diff --git a/Makefile b/Makefile index 00fa1dfc2e..e3a42bed9b 100644 --- a/Makefile +++ b/Makefile @@ -156,7 +156,7 @@ valgrind_check: all $(PROGRAMS) $(TESTS) done clean: - -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) $(THRIFTSERVER) build_config.mk + -rm -f $(PROGRAMS) $(BENCHMARKS) $(LIBRARY) $(SHARED) $(MEMENVLIBRARY) build_config.mk -rm -rf ios-x86/* ios-arm/* -find . -name "*.[od]" | xargs --no-run-if-empty rm -find . -type f -regex ".*\.\(\(gcda\)\|\(gcno\)\)" | xargs --no-run-if-empty rm diff --git a/db/db_impl.cc b/db/db_impl.cc index d31936778b..be1aaff68d 100644 --- a/db/db_impl.cc +++ b/db/db_impl.cc @@ -245,10 +245,6 @@ DBImpl::DBImpl(const Options& options, const std::string& dbname) dumpLeveldbBuildVersion(options_.info_log.get()); options_.Dump(options_.info_log.get()); -#ifdef USE_SCRIBE - logger_.reset(new ScribeLogger("localhost", 1456)); -#endif - char name[100]; Status st = env_->GetHostName(name, 100L); if (st.ok()) { diff --git a/db/db_impl.h b/db/db_impl.h index 7b7c8d3d59..232c060517 100644 --- a/db/db_impl.h +++ b/db/db_impl.h @@ -20,10 +20,6 @@ #include "util/stats_logger.h" #include "memtablelist.h" -#ifdef USE_SCRIBE -#include "scribe/scribe_logger.h" -#endif - namespace rocksdb { class MemTable; diff --git a/db/db_impl_readonly.h b/db/db_impl_readonly.h index de26ba2e1d..8723b7e26f 100644 --- a/db/db_impl_readonly.h +++ b/db/db_impl_readonly.h @@ -17,10 +17,6 @@ #include "port/port.h" #include "util/stats_logger.h" -#ifdef USE_SCRIBE -#include "scribe/scribe_logger.h" -#endif - namespace rocksdb { class DBImplReadOnly : public DBImpl { diff --git a/java/README b/java/README deleted file mode 100644 index 931f9a211a..0000000000 --- a/java/README +++ /dev/null @@ -1,20 +0,0 @@ -############################################################################### -leveldb - A Java port of LevelDB (https://github.com/dain/leveldb) - -This is a Java port of LevelDB. We only need the interface part, so the -implementation part is not checked in. - -This is based on commit: c8d074b3d95f30612e573bba689b85749031d639 from -https://github.com/dain/leveldb.git - -############################################################################### - -leveldbjni - JNI Wrapper for LevelDB (https://github.com/fusesource/leveldbjni) - -Provide LevelDB implementation by using JNI wrapper. It is written using HawtJNI -which is JNI code generatori (http://hawtjni.fusesource.org/). - -This is based on commmit: 8bac93ec1bcc97a098a1eaac265ea04b766ef574 from -https://github.com/fusesource/leveldbjni.git - -############################################################################### diff --git a/java/leveldb/.gitignore b/java/leveldb/.gitignore deleted file mode 100644 index 67590d81aa..0000000000 --- a/java/leveldb/.gitignore +++ /dev/null @@ -1,22 +0,0 @@ -target/ -/var -pom.xml.versionsBackup -test-output/ -/atlassian-ide-plugin.x -.idea -.*.swp -.*.swo -leveldb-c -*~ -*.swp -.idea -.idea/* -*.iml -*.ipr -*.iws -.DS_Store -.scala_dependencies -.project -.classpath -.settings -eclipse-classes diff --git a/java/leveldb/leveldb-api/pom.xml b/java/leveldb/leveldb-api/pom.xml deleted file mode 100644 index c8a484df77..0000000000 --- a/java/leveldb/leveldb-api/pom.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - 4.0.0 - - org.iq80.leveldb - leveldb-project - 0.4-SNAPSHOT - - - org.iq80.leveldb - leveldb-api - 0.4-SNAPSHOT - jar - - ${project.artifactId} - High level Java API for LevelDB - - diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/CompressionType.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/CompressionType.java deleted file mode 100644 index 4c622dfc6e..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/CompressionType.java +++ /dev/null @@ -1,45 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -public enum CompressionType -{ - NONE(0x00), - SNAPPY(0x01); - - public static CompressionType getCompressionTypeByPersistentId(int persistentId) { - for (CompressionType compressionType : CompressionType.values()) { - if (compressionType.persistentId == persistentId) { - return compressionType; - } - } - throw new IllegalArgumentException("Unknown persistentId " + persistentId); - } - - private final int persistentId; - - CompressionType(int persistentId) - { - this.persistentId = persistentId; - } - - public int persistentId() - { - return persistentId; - } -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DB.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DB.java deleted file mode 100644 index 9c3fbe8c9e..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DB.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.io.Closeable; -import java.util.Map; - -/** - * @author Hiram Chirino - */ -public interface DB extends Iterable>, Closeable { - - public byte[] get(byte[] key) throws DBException; - public byte[] get(byte[] key, ReadOptions options) throws DBException; - - public DBIterator iterator(); - public DBIterator iterator(ReadOptions options); - - public void put(byte[] key, byte[] value) throws DBException; - public void delete(byte[] key) throws DBException; - public void write(WriteBatch updates) throws DBException; - - public WriteBatch createWriteBatch(); - - /** - * @return null if options.isSnapshot()==false otherwise returns a snapshot - * of the DB after this operation. - */ - public Snapshot put(byte[] key, byte[] value, WriteOptions options) throws DBException; - - /** - * @return null if options.isSnapshot()==false otherwise returns a snapshot - * of the DB after this operation. - */ - public Snapshot delete(byte[] key, WriteOptions options) throws DBException; - - /** - * @return null if options.isSnapshot()==false otherwise returns a snapshot - * of the DB after this operation. - */ - public Snapshot write(WriteBatch updates, WriteOptions options) throws DBException; - - public Snapshot getSnapshot(); - - public long[] getApproximateSizes(Range ... ranges); - public String getProperty(String name); -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBComparator.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBComparator.java deleted file mode 100644 index 1a583118fd..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBComparator.java +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.util.Comparator; - -/** - * @author Hiram Chirino - */ -public interface DBComparator extends Comparator{ - - public String name(); - - /** - * If start < limit, returns a short key in [start,limit). - * Simple comparator implementations should return start unchanged, - * - * @param start - * @param limit - * @return - */ - byte[] findShortestSeparator(byte[] start, byte[] limit); - - /** - * returns a 'short key' where the 'short key' >= key. - * Simple comparator implementations should return key unchanged, - * - * @param key - */ - byte[] findShortSuccessor(byte[] key); - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBException.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBException.java deleted file mode 100644 index 09cf5ba0f1..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBException.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -/** - * @author Hiram Chirino - */ -public class DBException extends RuntimeException { - public DBException() { - } - - public DBException(String s) { - super(s); - } - - public DBException(String s, Throwable throwable) { - super(s, throwable); - } - - public DBException(Throwable throwable) { - super(throwable); - } -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBFactory.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBFactory.java deleted file mode 100644 index d569994578..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBFactory.java +++ /dev/null @@ -1,34 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.io.File; -import java.io.IOException; - -/** - * @author Hiram Chirino - */ -public interface DBFactory { - - public DB open(File path, Options options) throws IOException; - - public void destroy(File path, Options options) throws IOException; - - public void repair(File path, Options options) throws IOException; - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBIterator.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBIterator.java deleted file mode 100644 index 2d40b62e8c..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/DBIterator.java +++ /dev/null @@ -1,65 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.io.Closeable; -import java.util.Iterator; -import java.util.Map; - -/** - * @author Hiram Chirino - */ -public interface DBIterator extends Iterator>, Closeable { - - /** - * Repositions the iterator so the key of the next BlockElement - * returned greater than or equal to the specified targetKey. - */ - public void seek(byte[] key); - - /** - * Repositions the iterator so is is at the beginning of the Database. - */ - public void seekToFirst(); - - /** - * Returns the next element in the iteration, without advancing the iteration. - */ - public Map.Entry peekNext(); - - /** - * @return true if there is a previous entry in the iteration. - */ - boolean hasPrev(); - - /** - * @return the previous element in the iteration and rewinds the iteration. - */ - Map.Entry prev(); - - /** - * @return the previous element in the iteration, without rewinding the iteration. - */ - public Map.Entry peekPrev(); - - /** - * Repositions the iterator so it is at the end of of the Database. - */ - public void seekToLast(); - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Logger.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Logger.java deleted file mode 100644 index 0e54c3a5b8..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Logger.java +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -/** - * @author Hiram Chirino - */ -public interface Logger { - - public void log(String message); - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Options.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Options.java deleted file mode 100644 index b79d9d98f1..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Options.java +++ /dev/null @@ -1,168 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -public class Options { - - private boolean createIfMissing = true; - private boolean errorIfExists; - private int writeBufferSize = 4 << 20; - - private int maxOpenFiles = 1000; - - private int blockRestartInterval = 16; - private int blockSize = 4 * 1024; - private CompressionType compressionType = CompressionType.SNAPPY; - private boolean verifyChecksums = true; - private boolean paranoidChecks = false; - private DBComparator comparator; - private Logger logger = null; - private long cacheSize; - - static void checkArgNotNull(Object value, String name) { - if(value==null) { - throw new IllegalArgumentException("The "+name+" argument cannot be null"); - } - } - - public boolean createIfMissing() - { - return createIfMissing; - } - - public Options createIfMissing(boolean createIfMissing) - { - this.createIfMissing = createIfMissing; - return this; - } - - public boolean errorIfExists() - { - return errorIfExists; - } - - public Options errorIfExists(boolean errorIfExists) - { - this.errorIfExists = errorIfExists; - return this; - } - - public int writeBufferSize() - { - return writeBufferSize; - } - - public Options writeBufferSize(int writeBufferSize) - { - this.writeBufferSize = writeBufferSize; - return this; - } - - public int maxOpenFiles() - { - return maxOpenFiles; - } - - public Options maxOpenFiles(int maxOpenFiles) - { - this.maxOpenFiles = maxOpenFiles; - return this; - } - - public int blockRestartInterval() - { - return blockRestartInterval; - } - - public Options blockRestartInterval(int blockRestartInterval) - { - this.blockRestartInterval = blockRestartInterval; - return this; - } - - public int blockSize() - { - return blockSize; - } - - public Options blockSize(int blockSize) - { - this.blockSize = blockSize; - return this; - } - - public CompressionType compressionType() - { - return compressionType; - } - - public Options compressionType(CompressionType compressionType) - { - checkArgNotNull(compressionType, "compressionType"); - this.compressionType = compressionType; - return this; - } - - public boolean verifyChecksums() - { - return verifyChecksums; - } - - public Options verifyChecksums(boolean verifyChecksums) - { - this.verifyChecksums = verifyChecksums; - return this; - } - - - public long cacheSize() { - return cacheSize; - } - - public Options cacheSize(long cacheSize) { - this.cacheSize = cacheSize; - return this; - } - - public DBComparator comparator() { - return comparator; - } - - public Options comparator(DBComparator comparator) { - this.comparator = comparator; - return this; - } - - public Logger logger() { - return logger; - } - - public Options logger(Logger logger) { - this.logger = logger; - return this; - } - - public boolean paranoidChecks() { - return paranoidChecks; - } - - public Options paranoidChecks(boolean paranoidChecks) { - this.paranoidChecks = paranoidChecks; - return this; - } -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Range.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Range.java deleted file mode 100644 index 1d0e5ebd59..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Range.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -/** - * @author Hiram Chirino - */ -public class Range { - - final private byte[] start; - final private byte[] limit; - - public byte[] limit() { - return limit; - } - - public byte[] start() { - return start; - } - - public Range(byte[] start, byte[] limit) { - Options.checkArgNotNull(start, "start"); - Options.checkArgNotNull(limit, "limit"); - this.limit = limit; - this.start = start; - } - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/ReadOptions.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/ReadOptions.java deleted file mode 100644 index d0ea596710..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/ReadOptions.java +++ /dev/null @@ -1,54 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -public class ReadOptions -{ - private boolean verifyChecksums = false; - private boolean fillCache = true; - private Snapshot snapshot; - - public Snapshot snapshot() - { - return snapshot; - } - - public ReadOptions snapshot(Snapshot snapshot) - { - this.snapshot = snapshot; - return this; - } - - public boolean fillCache() { - return fillCache; - } - - public ReadOptions fillCache(boolean fillCache) { - this.fillCache = fillCache; - return this; - } - - public boolean verifyChecksums() { - return verifyChecksums; - } - - public ReadOptions verifyChecksums(boolean verifyChecksums) { - this.verifyChecksums = verifyChecksums; - return this; - } -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Snapshot.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Snapshot.java deleted file mode 100644 index e11928565c..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/Snapshot.java +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.io.Closeable; - -public interface Snapshot extends Closeable { - -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteBatch.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteBatch.java deleted file mode 100644 index 960a5f9598..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteBatch.java +++ /dev/null @@ -1,29 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -import java.io.Closeable; - -/** - * @author Hiram Chirino - */ -public interface WriteBatch extends Closeable { - - public WriteBatch put(byte[] key, byte[] value); - public WriteBatch delete(byte[] key); -} diff --git a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteOptions.java b/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteOptions.java deleted file mode 100644 index 2d1876c6be..0000000000 --- a/java/leveldb/leveldb-api/src/main/java/org/iq80/leveldb/WriteOptions.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (C) 2011 the original author or authors. - * See the notice.md file distributed with this work for additional - * information regarding copyright ownership. - * - * 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 org.iq80.leveldb; - -public class WriteOptions -{ - private boolean sync; - private boolean snapshot; - - - public boolean sync() - { - return sync; - } - - public WriteOptions sync(boolean sync) - { - this.sync = sync; - return this; - } - - public boolean snapshot() { - return snapshot; - } - - public WriteOptions snapshot(boolean snapshot) { - this.snapshot = snapshot; - return this; - } - -} diff --git a/java/leveldb/license-header.txt b/java/leveldb/license-header.txt deleted file mode 100644 index 0d35f5c69b..0000000000 --- a/java/leveldb/license-header.txt +++ /dev/null @@ -1,15 +0,0 @@ -Copyright (C) 2011 the original author or authors. -See the notice.md file distributed with this work for additional -information regarding copyright ownership. - -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. diff --git a/java/leveldb/license.txt b/java/leveldb/license.txt deleted file mode 100755 index 6b0b1270ff..0000000000 --- a/java/leveldb/license.txt +++ /dev/null @@ -1,203 +0,0 @@ - - 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. - diff --git a/java/leveldb/notice.md b/java/leveldb/notice.md deleted file mode 100644 index f21e158803..0000000000 --- a/java/leveldb/notice.md +++ /dev/null @@ -1,5 +0,0 @@ -LevelDB Copyright Notices -========================= - -* Copyright 2011 Dain Sundstrom -* Copyright 2011 FuseSource Corp. http://fusesource.com diff --git a/java/leveldb/pom.xml b/java/leveldb/pom.xml deleted file mode 100644 index 22cfd8778b..0000000000 --- a/java/leveldb/pom.xml +++ /dev/null @@ -1,386 +0,0 @@ - - - - 4.0.0 - - org.iq80.leveldb - leveldb-project - 0.4-SNAPSHOT - pom - - ${project.artifactId} - - Port of LevelDB to Java - http://github.com/dain/leveldb - - - leveldb-api - leveldb - - - 2011 - - - - Apache License 2.0 - http://www.apache.org/licenses/LICENSE-2.0.html - repo - - - - - - dain - Dain Sundstrom - dain@iq80.com - - - chirino - Hiram Chirino - hiram@hiramchirino.com - http://hiramchirino.com - -5 - - - - - UTF-8 - https://oss.sonatype.org/content/repositories/snapshots/ - - - - scm:git:git://github.com/dain/leveldb.git - scm:git:git@github.com:dain/leveldb.git - http://github.com/dain/leveldb/tree/master - - - - 3.0 - - - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - https://oss.sonatype.org/content/repositories/snapshots - - false - - - true - - - - - - - sonatype-nexus-snapshots - Sonatype Nexus Snapshots - ${sonatypeOssDistMgmtSnapshotsUrl} - - - sonatype-nexus-staging - Nexus Release Repository - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - - - - org.apache.maven.plugins - maven-enforcer-plugin - 1.0 - - - enforce-versions - - enforce - - - - - 3.0.0 - - - 1.6 - - - - - - - - org.apache.maven.plugins - maven-source-plugin - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.8.1 - - - - org.apache.maven.plugins - maven-source-plugin - 2.1.2 - - true - - - - create-source-jar - - jar-no-fork - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 2.3.2 - - 1.6 - 1.6 - - - - - org.codehaus.mojo - findbugs-maven-plugin - 2.3.2 - - true - true - true - - - - - org.codehaus.mojo - cobertura-maven-plugin - 2.4 - - - xml - - - - - - org.apache.maven.plugins - maven-install-plugin - 2.3.1 - - - - org.apache.maven.plugins - maven-resources-plugin - 2.4.3 - - - - org.apache.maven.plugins - maven-deploy-plugin - 2.5 - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.7 - - - com.google.doclava - doclava - 1.0.3 - - com.google.doclava.Doclava - - ${sun.boot.class.path} - - -quiet - - - -hdf project.name "${project.name}" - -d ${project.build.directory}/apidocs - - false - - -J-Xmx1024m - - - - attach-javadocs - - jar - - - - - - - org.apache.maven.plugins - maven-release-plugin - 2.2.1 - - forked-path - false - -Psonatype-oss-release - false - true - @{project.version} - - - - - - com.mycila.maven-license-plugin - maven-license-plugin - 1.9.0 - -
license-header.txt
- - **/README.txt - **/config.properties - **/log.properties - -
-
- - - org.apache.maven.plugins - maven-site-plugin - 3.0 - - - attach-descriptor - - attach-descriptor - - - - - - - org.apache.maven.plugins - maven-project-info-reports-plugin - 2.4 - - false - false - - - - index - dependencies - issue-tracking - license - mailing-list - modules - project-team - plugin-management - plugins - scm - - - - - org.apache.maven.plugins - maven-jxr-plugin - 2.3 - - - UTF-8 - UTF-8 - true - ${project.name} Source Xref (${project.version}) - ${project.name} Source Xref (${project.version}) - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.7 - - - com.google.doclava - doclava - 1.0.3 - - com.google.doclava.Doclava - - ${sun.boot.class.path} - - -quiet - - - -hdf project.name "${project.name}" - -d ${project.build.directory}/site/apidocs - - false - - -J-Xmx1024m - - - - - -
-
-
- - - - sonatype-oss-release - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.1 - - - sign-artifacts - verify - - sign - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - - - - - -
diff --git a/java/leveldb/src/site/site.xml b/java/leveldb/src/site/site.xml deleted file mode 100644 index e32fcc506d..0000000000 --- a/java/leveldb/src/site/site.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - com.googlecode.fluido-skin - fluido-skin - 1.3 - - - - - - - - - - - diff --git a/java/leveldbjni/.gitignore b/java/leveldbjni/.gitignore deleted file mode 100644 index 0f7766ed70..0000000000 --- a/java/leveldbjni/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -*~ -*.swp -.idea -.idea/* -*.iml -*.ipr -*.iws -target -.DS_Store -.project -.classpath -.settings -eclipse-classes diff --git a/java/leveldbjni/changelog.md b/java/leveldbjni/changelog.md deleted file mode 100644 index 0547e93399..0000000000 --- a/java/leveldbjni/changelog.md +++ /dev/null @@ -1,49 +0,0 @@ -# [LevelDBJNI](https://github.com/fusesource/leveldbjni) - -## [leveldbjni 1.4][1_4], released 2012-10-31 -[1_4]: http://repo.fusesource.com/nexus/content/groups/public/org/fusesource/leveldbjni/leveldbjni/1.4 - -* Switch to leveldb-api version 0.4 -* Checking the results of autotool chain into the source tree so that folks building don't have to have the autotools installed. -* Support suspending the background compaction thread. - -## [leveldbjni 1.3][1_3], released 2012-09-24 -[1_3]: http://repo.fusesource.com/nexus/content/groups/public/org/fusesource/leveldbjni/leveldbjni/1.3 - -* Make Util.link work on windows too. -* Expose the CreateHardLinkW windows API call. -* Added Windows LevelDB Support -* Update to hawtjni 1.6. -* Support the db.compactRange method to force compaction of the leveldb files. -* Fixed bug need to get leveldbjni workin on the Zing JVM - -## [leveldbjni 1.2][1_2], released 2012-02-27 -[1_2]: http://repo.fusesource.com/nexus/content/groups/public/org/fusesource/leveldbjni/leveldbjni/1.2 - -* Document how to use the memory pools. -* Fixes issue #6 Support using a memory pool to reduce native memory allocation overhead. -* Update leveldb, hawtjni, and leveldb-api versions. -* Store the version in the factory class. -* Added a release guide. - -## [leveldbjni 1.1][1_1], released 2011-09-29 -[1_1]: http://repo.fusesource.com/nexus/content/groups/public/org/fusesource/leveldbjni/leveldbjni/1.1 - -* the all module needs at least one java file so that it produces a javadoc and src.zip -* Try to load the native lib when the JniDBFactory class is loaded. -* Fixes issue #1 : Bug on NativeBuffer offset -* Switch the license from CDDL to the New BSD license to match the license used in the leveldb project. -* Add the sonatype snapshot repo since that's where the leveldb-api is at currently. -* Pickup updates in the api module. -* Updating build instructions. -* implement repair and destroy. -* api updated -* Cleaner java package structure. We only need to expose one public class now since we are using the org.iq80.leveldb abstract api. -* Refactored so that the main user API is the abstract API defined in 'org.iq80.leveldb.api' package. - -## [leveldbjni 1.0][1_0], released 2011-08-08 -[1_0]: http://repo.fusesource.com/nexus/content/groups/public/org/fusesource/leveldbjni/leveldbjni/1.0 - -* Initial Release -* OS X Intel 32 and 64 bit support -* Linux Intel 32 and 64 bit support diff --git a/java/leveldbjni/db.h.patch b/java/leveldbjni/db.h.patch deleted file mode 100644 index d1006a0a39..0000000000 --- a/java/leveldbjni/db.h.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 3f0a7d241d96e8dc40ebf8001e4c41aa4ff86472 Mon Sep 17 00:00:00 2001 -From: Abhishek Kona -Date: Tue, 11 Dec 2012 22:38:14 -0800 -Subject: [PATCH] patch to make it compilable with java - ---- - include/leveldb/db.h | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/include/leveldb/db.h b/include/leveldb/db.h -index 2cfa537..e84685b 100644 ---- a/include/leveldb/db.h -+++ b/include/leveldb/db.h -@@ -182,9 +182,12 @@ class DB { - virtual Status GetLiveFiles(std::vector&, - uint64_t* manifest_file_size) = 0; - -- // The sequence number of the most recent transaction. -+ // The sequence number of the most recent transaction. - virtual SequenceNumber GetLatestSequenceNumber() = 0; - -+ virtual void SuspendCompactions() {}; -+ virtual void ResumeCompactions() {}; -+ - // Return's an iterator for all writes since the sequence number - // Status::ok if iterator is valid. - // The iterator internally holds references to the available log files. --- -1.7.11.1 - diff --git a/java/leveldbjni/leveldbjni-all/pom.xml b/java/leveldbjni/leveldbjni-all/pom.xml deleted file mode 100755 index 095b466c0a..0000000000 --- a/java/leveldbjni/leveldbjni-all/pom.xml +++ /dev/null @@ -1,95 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-all - 1.5.7 - - ${project.artifactId} - An uber jar which contains all the leveldbjni platform libraries and dependencies - - - - org.fusesource.leveldbjni.fb - leveldbjni-osx - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-linux32 - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-linux64 - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-win32 - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-win64 - 1.5.7 - - - - - - - - - org.fusesource.mvnplugins - maven-uberize-plugin - 1.15 - - - package - uberize - - - - - - - diff --git a/java/leveldbjni/leveldbjni-all/src/main/java/org/fusesource/leveldbjni/All.java b/java/leveldbjni/leveldbjni-all/src/main/java/org/fusesource/leveldbjni/All.java deleted file mode 100644 index a2ca0c7c40..0000000000 --- a/java/leveldbjni/leveldbjni-all/src/main/java/org/fusesource/leveldbjni/All.java +++ /dev/null @@ -1,4 +0,0 @@ -package org.fusesource.leveldbjni; - -public class All { -} \ No newline at end of file diff --git a/java/leveldbjni/leveldbjni-linux32/pom.xml b/java/leveldbjni/leveldbjni-linux32/pom.xml deleted file mode 100755 index d4b022550b..0000000000 --- a/java/leveldbjni/leveldbjni-linux32/pom.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-linux32 - 1.5.7 - - ${project.artifactId} - The leveldbjni linux 32 native libraries - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - - - - - ${basedir}/../leveldbjni/src/test/java - - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - ${basedir}/target/generated-sources/hawtjni/lib - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - build - - compile - - - - leveldbjni - false - - org.fusesource.leveldbjni.fb - leveldbjni - ${project.version} - native-src - zip - - - --with-leveldb=${env.LEVELDB_HOME} - --with-snappy=${env.SNAPPY_HOME} - - - - - - - diff --git a/java/leveldbjni/leveldbjni-linux64/pom.xml b/java/leveldbjni/leveldbjni-linux64/pom.xml deleted file mode 100755 index 11abf0e962..0000000000 --- a/java/leveldbjni/leveldbjni-linux64/pom.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-linux64 - 1.5.7 - - ${project.artifactId} - The leveldbjni linux 64 native libraries - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - - - - - ${basedir}/../leveldbjni/src/test/java - - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - ${basedir}/target/generated-sources/hawtjni/lib - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - build - - - - - leveldbjni - false - - org.fusesource.leveldbjni.fb - leveldbjni - ${project.version} - native-src - zip - - - --with-leveldb=${env.LEVELDB_HOME} - --with-snappy=${env.SNAPPY_HOME} - - - - - - - diff --git a/java/leveldbjni/leveldbjni-osx/pom.xml b/java/leveldbjni/leveldbjni-osx/pom.xml deleted file mode 100755 index da26c80a40..0000000000 --- a/java/leveldbjni/leveldbjni-osx/pom.xml +++ /dev/null @@ -1,110 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-osx - 1.5.7 - - ${project.artifactId} - The leveldbjni OS X universal native libraries - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - test-jar - test - - - - - ${basedir}/../leveldbjni/src/test/java - - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - ${basedir}/target/generated-sources/hawtjni/lib - - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - build - - - - - leveldbjni - false - - org.fusesource.leveldbjni.fb - leveldbjni - ${project.version} - native-src - zip - - osx - - --with-leveldb=${env.LEVELDB_HOME} - --with-snappy=${env.SNAPPY_HOME} - --with-universal - - - - - - - diff --git a/java/leveldbjni/leveldbjni-win32/pom.xml b/java/leveldbjni/leveldbjni-win32/pom.xml deleted file mode 100755 index c65386efd0..0000000000 --- a/java/leveldbjni/leveldbjni-win32/pom.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-win32 - 1.5.7 - - ${project.artifactId} - The leveldbjni Windows 32 bit native libraries - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - - - - - ${basedir}/../leveldbjni/src/test/java - - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - ${basedir}/target/generated-sources/hawtjni/lib - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - build - - compile - - - - leveldbjni - false - - org.fusesource.leveldbjni.fb - leveldbjni - ${project.version} - native-src - zip - - ${basedir}/../leveldbjni/target/generated-sources/hawtjni/native-package - - - - - - diff --git a/java/leveldbjni/leveldbjni-win64/pom.xml b/java/leveldbjni/leveldbjni-win64/pom.xml deleted file mode 100755 index 565f43d4da..0000000000 --- a/java/leveldbjni/leveldbjni-win64/pom.xml +++ /dev/null @@ -1,96 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni-win64 - 1.5.7 - - ${project.artifactId} - The leveldbjni Windows 64 bit native libraries - - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - - - - - ${basedir}/../leveldbjni/src/test/java - - - - org.apache.maven.plugins - maven-jar-plugin - 2.3.1 - - ${basedir}/target/generated-sources/hawtjni/lib - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - build - - - - - leveldbjni - false - - org.fusesource.leveldbjni.fb - leveldbjni - ${project.version} - native-src - zip - - ${basedir}/../leveldbjni/target/generated-sources/hawtjni/native-package - - - - - - diff --git a/java/leveldbjni/leveldbjni/pom.xml b/java/leveldbjni/leveldbjni/pom.xml deleted file mode 100755 index 032f0270c3..0000000000 --- a/java/leveldbjni/leveldbjni/pom.xml +++ /dev/null @@ -1,180 +0,0 @@ - - - - - 4.0.0 - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - - - org.fusesource.leveldbjni.fb - leveldbjni - 1.5.7 - jar - - ${project.artifactId} - leveldbjni is a jni library for acessing leveldb. - - - false - - - - - org.fusesource.hawtjni - hawtjni-runtime - ${hawtjni-version} - - - org.iq80.leveldb - leveldb-api - ${leveldb-api-version} - - - - - - - ${project.basedir}/src/main/resources - true - - **/* - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - test-jar - - - - - - - org.fusesource.hawtjni - maven-hawtjni-plugin - ${hawtjni-version} - - - - generate - package-source - - - - - ${skipAutogen} - leveldbjni - false - - - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.4.3 - - true - once - -ea - false - ${project.build.directory} - - **/* - - - **/*Test.java - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.5 - 1.5 - - - - - org.apache.felix - maven-bundle-plugin - 2.0.1 - - - bundle-manifest - process-classes - - manifest - - - - !org.fusesource.leveldbjni*,!org.fusesource.hawtjni*,sun.reflect;resolution:=optional,* - - - - - - - maven-jar-plugin - - - ${project.build.outputDirectory}/META-INF/MANIFEST.MF - - - - - - - - diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/JniDBFactory.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/JniDBFactory.java deleted file mode 100644 index 02d82a4f88..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/JniDBFactory.java +++ /dev/null @@ -1,212 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni; - -import org.fusesource.leveldbjni.internal.*; -import org.iq80.leveldb.*; - -import java.io.*; -import java.net.URL; -import java.util.concurrent.Callable; - -/** - * @author Hiram Chirino - */ -public class JniDBFactory implements DBFactory { - - public static final JniDBFactory factory = new JniDBFactory(); - static { - NativeDB.LIBRARY.load(); - } - - public static final String VERSION; - static { - String v="unknown"; - InputStream is = JniDBFactory.class.getResourceAsStream("version.txt"); - try { - v = new BufferedReader(new InputStreamReader(is, "UTF-8")).readLine(); - } catch (Throwable e) { - } finally { - try { - is.close(); - } catch (Throwable e) { - } - } - VERSION = v; - } - - public static byte[] bytes(String value) { - if( value == null) { - return null; - } - try { - return value.getBytes("UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - - public static String asString(byte value[]) { - if( value == null) { - return null; - } - try { - return new String(value, "UTF-8"); - } catch (UnsupportedEncodingException e) { - throw new RuntimeException(e); - } - } - - static private class OptionsResourceHolder { - - NativeCache cache = null; - NativeComparator comparator=null; - NativeLogger logger=null; - NativeOptions options; - - public void init(Options value) { - - options = new NativeOptions(); - options.blockRestartInterval(value.blockRestartInterval()); - options.blockSize(value.blockSize()); - options.createIfMissing(value.createIfMissing()); - options.errorIfExists(value.errorIfExists()); - options.maxOpenFiles(value.maxOpenFiles()); - options.paranoidChecks(value.paranoidChecks()); - options.writeBufferSize(value.writeBufferSize()); - - switch(value.compressionType()) { - case NONE: - options.compression(NativeCompressionType.kNoCompression); - break; - case SNAPPY: - options.compression(NativeCompressionType.kSnappyCompression); - break; - } - - - if(value.cacheSize()>0 ) { - cache = new NativeCache(value.cacheSize()); - options.cache(cache); - } - - final DBComparator userComparator = value.comparator(); - if(userComparator!=null) { - comparator = new NativeComparator() { - @Override - public int compare(byte[] key1, byte[] key2) { - return userComparator.compare(key1, key2); - } - - @Override - public String name() { - return userComparator.name(); - } - }; - options.comparator(comparator); - } - - final Logger userLogger = value.logger(); - if(userLogger!=null) { - logger = new NativeLogger() { - @Override - public void log(String message) { - userLogger.log(message); - } - }; - options.infoLog(logger); - } - - } - public void close() { - if(cache!=null) { - cache.delete(); - } - if(comparator!=null){ - comparator.delete(); - } - if(logger!=null) { - logger.delete(); - } - } - } - - public DB open(File path, Options options) throws IOException { - NativeDB db=null; - OptionsResourceHolder holder = new OptionsResourceHolder(); - try { - holder.init(options); - db = NativeDB.open(holder.options, path); - } finally { - // if we could not open up the DB, then clean up the - // other allocated native resouces.. - if(db==null) { - holder.close(); - } - } - return new JniDB(db, holder.cache, holder.comparator, holder.logger); - } - - public void destroy(File path, Options options) throws IOException { - OptionsResourceHolder holder = new OptionsResourceHolder(); - try { - holder.init(options); - NativeDB.destroy(path, holder.options); - } finally { - holder.close(); - } - } - - public void repair(File path, Options options) throws IOException { - OptionsResourceHolder holder = new OptionsResourceHolder(); - try { - holder.init(options); - NativeDB.repair(path, holder.options); - } finally { - holder.close(); - } - } - - @Override - public String toString() { - return String.format("leveldbjni version %s", VERSION); - } - - - public static void pushMemoryPool(int size) { - NativeBuffer.pushMemoryPool(size); - } - - public static void popMemoryPool() { - NativeBuffer.popMemoryPool(); - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDB.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDB.java deleted file mode 100644 index e89a9983ef..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDB.java +++ /dev/null @@ -1,235 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.iq80.leveldb.*; - -/** - * @author Hiram Chirino - */ -public class JniDB implements DB { - - private final NativeDB db; - private final NativeCache cache; - private final NativeComparator comparator; - private final NativeLogger logger; - - public JniDB(NativeDB db, NativeCache cache, NativeComparator comparator, NativeLogger logger) { - this.db = db; - this.cache = cache; - this.comparator = comparator; - this.logger = logger; - } - - public void close() { - db.delete(); - if(cache!=null) { - cache.delete(); - } - if(comparator!=null){ - comparator.delete(); - } - if(logger!=null) { - logger.delete(); - } - } - - - public byte[] get(byte[] key) throws DBException { - return get(key, new ReadOptions()); - } - - public byte[] get(byte[] key, ReadOptions options) throws DBException { - try { - return db.get(convert(options), key); - } catch (NativeDB.DBException e) { - if(e.isNotFound()) { - return null; - } - throw new DBException(e.getMessage(), e); - } - } - - public DBIterator iterator() { - return iterator(new ReadOptions()); - } - - public DBIterator iterator(ReadOptions options) { - return new JniDBIterator(db.iterator(convert(options))); - } - - public void put(byte[] key, byte[] value) throws DBException { - put(key, value, new WriteOptions()); - } - - public void delete(byte[] key) throws DBException { - delete(key, new WriteOptions()); - } - - public void write(WriteBatch updates) throws DBException { - write(updates, new WriteOptions()); - } - - public WriteBatch createWriteBatch() { - return new JniWriteBatch(new NativeWriteBatch()); - } - - public Snapshot put(byte[] key, byte[] value, WriteOptions options) throws DBException { - try { - db.put(convert(options), key, value); - return null; - } catch (NativeDB.DBException e) { - throw new DBException(e.getMessage(), e); - } - } - - public Snapshot delete(byte[] key, WriteOptions options) throws DBException { - try { - db.delete(convert(options), key); - return null; - } catch (NativeDB.DBException e) { - throw new DBException(e.getMessage(), e); - } - } - - public Snapshot write(WriteBatch updates, WriteOptions options) throws DBException { - try { - db.write(convert(options), ((JniWriteBatch) updates).writeBatch()); - return null; - } catch (NativeDB.DBException e) { - throw new DBException(e.getMessage(), e); - } - } - - public Snapshot getSnapshot() { - return new JniSnapshot(db, db.getSnapshot()); - } - - public long[] getApproximateSizes(Range... ranges) { - NativeRange args[] = new NativeRange[ranges.length]; - for (int i = 0; i < args.length; i++) { - args[i] = new NativeRange(ranges[i].start(), ranges[i].limit()); - } - return db.getApproximateSizes(args); - } - - public String getProperty(String name) { - return db.getProperty(name); - } - - private NativeReadOptions convert(ReadOptions options) { - if(options==null) { - return null; - } - NativeReadOptions rc = new NativeReadOptions(); - rc.fillCache(options.fillCache()); - rc.verifyChecksums(options.verifyChecksums()); - if(options.snapshot()!=null) { - rc.snapshot(((JniSnapshot) options.snapshot()).snapshot()); - } - return rc; - } - - private NativeWriteOptions convert(WriteOptions options) { - if(options==null) { - return null; - } - NativeWriteOptions rc = new NativeWriteOptions(); - rc.sync(options.sync()); - if(options.snapshot()) { - throw new UnsupportedOperationException("WriteOptions snapshot not supported"); - } - return rc; - } - - public void compactRange(byte[] begin, byte[] end) throws DBException { - db.compactRange(begin, end); - } - -// -// Using a fork of leveldb with db Suspend / Resume methods to avoid -// having to callback into java. -// - public void suspendCompactions() throws InterruptedException { - db.suspendCompactions(); - } - public void resumeCompactions() { - db.resumeCompactions(); - } - -// private static class Suspension { -// static long env = Util.EnvJNI.Default(); -// -// CountDownLatch suspended = new CountDownLatch(1); -// CountDownLatch resumed = new CountDownLatch(1); -// Callback callback = new Callback(this, "suspended", 1); -// -// public Suspension() { -// Util.EnvJNI.Schedule(env, callback.getAddress(), 0); -// } -// -// private long suspended(long arg) { -// suspended.countDown(); -// try { -// resumed.await(); -// } catch (InterruptedException e) { -// } finally { -// callback.dispose(); -// } -// return 0; -// } -// } -// -// int suspendCounter = 0; -// Suspension suspension = null; -// -// public void suspendCompactions() throws InterruptedException { -// Suspension s = null; -// synchronized (this) { -// suspendCounter++; -// if( suspendCounter==1 ) { -// suspension = new Suspension(); -// } -// s = suspension; -// } -// // Don't return until the compactions have suspended. -// s.suspended.await(); -// } -// -// synchronized public void resumeCompactions() { -// suspendCounter--; -// if( suspendCounter==0 ) { -// suspension.resumed.countDown(); -// suspension = null; -// } -// } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDBIterator.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDBIterator.java deleted file mode 100644 index 0bfd46f65d..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniDBIterator.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.leveldbjni.internal.NativeDB; -import org.fusesource.leveldbjni.internal.NativeIterator; -import org.iq80.leveldb.DBIterator; - -import java.util.AbstractMap; -import java.util.Map; -import java.util.NoSuchElementException; - -/** - * @author Hiram Chirino - */ -public class JniDBIterator implements DBIterator { - - private final NativeIterator iterator; - - JniDBIterator(NativeIterator iterator) { - this.iterator = iterator; - } - - public void close() { - iterator.delete(); - } - - public void remove() { - throw new UnsupportedOperationException(); - } - - public void seek(byte[] key) { - try { - iterator.seek(key); - } catch (NativeDB.DBException e) { - if( e.isNotFound() ) { - throw new NoSuchElementException(); - } else { - throw new RuntimeException(e); - } - } - } - - public void seekToFirst() { - iterator.seekToFirst(); - } - - public void seekToLast() { - iterator.seekToLast(); - } - - - public Map.Entry peekNext() { - if(!iterator.isValid()) { - throw new NoSuchElementException(); - } - try { - return new AbstractMap.SimpleImmutableEntry(iterator.key(), iterator.value()); - } catch (NativeDB.DBException e) { - throw new RuntimeException(e); - } - } - - public boolean hasNext() { - return iterator.isValid(); - } - - public Map.Entry next() { - Map.Entry rc = peekNext(); - try { - iterator.next(); - } catch (NativeDB.DBException e) { - throw new RuntimeException(e); - } - return rc; - } - - public boolean hasPrev() { - if( !iterator.isValid() ) - return false; - try { - iterator.prev(); - try { - return iterator.isValid(); - } finally { - iterator.next(); - } - } catch (NativeDB.DBException e) { - throw new RuntimeException(e); - } - } - - public Map.Entry peekPrev() { - try { - iterator.prev(); - try { - return peekNext(); - } finally { - iterator.next(); - } - } catch (NativeDB.DBException e) { - throw new RuntimeException(e); - } - } - - public Map.Entry prev() { - Map.Entry rc = peekPrev(); - try { - iterator.prev(); - } catch (NativeDB.DBException e) { - throw new RuntimeException(e); - } - return rc; - } - - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniSnapshot.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniSnapshot.java deleted file mode 100644 index 827613f351..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniSnapshot.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.leveldbjni.internal.*; -import org.iq80.leveldb.Snapshot; - -/** - * @author Hiram Chirino - */ -public class JniSnapshot implements Snapshot { - - private final NativeDB db; - private final NativeSnapshot snapshot; - - JniSnapshot(NativeDB db, NativeSnapshot snapshot) { - this.db = db; - this.snapshot = snapshot; - } - - public void close() { - db.releaseSnapshot(snapshot); - } - - NativeSnapshot snapshot() { - return snapshot; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniWriteBatch.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniWriteBatch.java deleted file mode 100644 index 27d86d6f17..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/JniWriteBatch.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.leveldbjni.internal.NativeWriteBatch; -import org.iq80.leveldb.WriteBatch; - -/** - * @author Hiram Chirino - */ -public class JniWriteBatch implements WriteBatch { - - private final NativeWriteBatch writeBatch; - - JniWriteBatch(NativeWriteBatch writeBatch) { - this.writeBatch = writeBatch; - } - - public void close() { - writeBatch.delete(); - } - - public WriteBatch put(byte[] key, byte[] value) { - writeBatch.put(key, value); - return this; - } - - public WriteBatch delete(byte[] key) { - writeBatch.delete(key); - return this; - } - - public NativeWriteBatch writeBatch() { - return writeBatch; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeBuffer.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeBuffer.java deleted file mode 100644 index 6eeb06f2fe..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeBuffer.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; -import org.fusesource.hawtjni.runtime.PointerMath; - -import java.util.concurrent.Callable; -import java.util.concurrent.atomic.AtomicInteger; - -import static org.fusesource.hawtjni.runtime.ArgFlag.*; - -/** - * A NativeBuffer allocates a native buffer on the heap. It supports - * creating sub slices/views of that buffer and manages reference tracking - * so that the the native buffer is freed once all NativeBuffer views - * are deleted. - * - * @author Hiram Chirino - */ -public class NativeBuffer extends NativeObject { - - @JniClass - static class NativeBufferJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(cast="void *") - public static final native long malloc( - @JniArg(cast="size_t") long size); - - public static final native void free( - @JniArg(cast="void *") long self); - -// public static final native void buffer_copy ( -// @JniArg(cast="const void *") long src, -// @JniArg(cast="size_t") long srcPos, -// @JniArg(cast="void *") long dest, -// @JniArg(cast="size_t") long destPos, -// @JniArg(cast="size_t") long length); - - public static final native void buffer_copy ( - @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) byte[] src, - @JniArg(cast="size_t") long srcPos, - @JniArg(cast="void *") long dest, - @JniArg(cast="size_t") long destPos, - @JniArg(cast="size_t") long length); - - public static final native void buffer_copy ( - @JniArg(cast="const void *") long src, - @JniArg(cast="size_t") long srcPos, - @JniArg(cast="void *", flags={NO_IN, CRITICAL}) byte[] dest, - @JniArg(cast="size_t") long destPos, - @JniArg(cast="size_t") long length); - -// @JniMethod(cast="void *") -// public static final native long memset ( -// @JniArg(cast="void *") long buffer, -// int c, -// @JniArg(cast="size_t") long num); - - } - - private static class Allocation extends NativeObject { - private final AtomicInteger retained = new AtomicInteger(0); - - private Allocation(long size) { - super(NativeBufferJNI.malloc(size)); - } - - void retain() { - assertAllocated(); - retained.incrementAndGet(); - } - - void release() { - assertAllocated(); - int r = retained.decrementAndGet(); - if( r < 0 ) { - throw new Error("The object has already been deleted."); - } else if( r==0 ) { - NativeBufferJNI.free(self); - } - self = 0; - } - } - - private static class Pool { - private final NativeBuffer.Pool prev; - Allocation allocation; - long pos; - long remaining; - int chunk; - - public Pool(int chunk, Pool prev) { - this.chunk = chunk; - this.prev = prev; - } - - NativeBuffer create(long size) { - if( size >= chunk ) { - Allocation allocation = new Allocation(size); - return new NativeBuffer(allocation, allocation.self, size); - } - - if( remaining < size ) { - delete(); - } - - if( allocation == null ) { - allocate(); - } - - NativeBuffer rc = new NativeBuffer(allocation, pos, size); - pos = PointerMath.add(pos, size); - remaining -= size; - return rc; - } - - private void allocate() { - allocation = new NativeBuffer.Allocation(chunk); - allocation.retain(); - remaining = chunk; - pos = allocation.self; - } - - public void delete() { - if( allocation!=null ) { - allocation.release(); - allocation = null; - } - } - } - - private final Allocation allocation; - private final long capacity; - - static final private ThreadLocal CURRENT_POOL = new ThreadLocal(); - - static public NativeBuffer create(long capacity) { - Pool pool = CURRENT_POOL.get(); - if( pool == null ) { - Allocation allocation = new Allocation(capacity); - return new NativeBuffer(allocation, allocation.self, capacity); - } else { - return pool.create(capacity); - } - } - - - public static void pushMemoryPool(int size) { - Pool original = CURRENT_POOL.get(); - Pool next = new Pool(size, original); - CURRENT_POOL.set(next); - } - - public static void popMemoryPool() { - Pool next = CURRENT_POOL.get(); - next.delete(); - if( next.prev == null ) { - CURRENT_POOL.remove(); - } else { - CURRENT_POOL.set(next.prev); - } - } - - static public NativeBuffer create(byte[] data) { - if( data == null ) { - return null; - } else { - return create(data, 0 , data.length); - } - } - - static public NativeBuffer create(String data) { - return create(cbytes(data)); - } - - static public NativeBuffer create(byte[] data, int offset, int length) { - NativeBuffer rc = create(length); - rc.write(0, data, offset, length); - return rc; - } - - private NativeBuffer(Allocation allocation, long self, long capacity) { - super(self); - this.capacity = capacity; - this.allocation = allocation; - this.allocation.retain(); - } - - public NativeBuffer slice(long offset, long length) { - assertAllocated(); - if( length < 0 ) throw new IllegalArgumentException("length cannot be negative"); - if( offset < 0 ) throw new IllegalArgumentException("offset cannot be negative"); - if( offset+length >= capacity) throw new ArrayIndexOutOfBoundsException("offset + length exceed the length of this buffer"); - return new NativeBuffer(allocation, PointerMath.add(self, offset), length); - } - - static byte[] cbytes(String strvalue) { - byte[] value = strvalue.getBytes(); - // expand by 1 so we get a null at the end. - byte[] rc = new byte[value.length+1]; - System.arraycopy(value, 0, rc, 0, value.length); - return rc; - } - - public NativeBuffer head(long length) { - return slice(0, length); - } - - public NativeBuffer tail(long length) { - if( capacity-length < 0) throw new ArrayIndexOutOfBoundsException("capacity-length cannot be less than zero"); - return slice(capacity-length, length); - } - - public void delete() { - allocation.release(); - } - - public long capacity() { - return capacity; - } - - public void write(long at, byte []source, int offset, int length) { - assertAllocated(); - if( length < 0 ) throw new IllegalArgumentException("length cannot be negative"); - if( offset < 0 ) throw new IllegalArgumentException("offset cannot be negative"); - if( at < 0 ) throw new IllegalArgumentException("at cannot be negative"); - if( at+length > capacity ) throw new ArrayIndexOutOfBoundsException("at + length exceeds the capacity of this object"); - if( offset+length > source.length) throw new ArrayIndexOutOfBoundsException("offset + length exceed the length of the source buffer"); - NativeBufferJNI.buffer_copy(source, offset, self, at, length); - } - - public void read(long at, byte []target, int offset, int length) { - assertAllocated(); - if( length < 0 ) throw new IllegalArgumentException("length cannot be negative"); - if( offset < 0 ) throw new IllegalArgumentException("offset cannot be negative"); - if( at < 0 ) throw new IllegalArgumentException("at cannot be negative"); - if( at+length > capacity ) throw new ArrayIndexOutOfBoundsException("at + length exceeds the capacity of this object"); - if( offset+length > target.length) throw new ArrayIndexOutOfBoundsException("offset + length exceed the length of the target buffer"); - NativeBufferJNI.buffer_copy(self, at, target, offset, length); - } - - public byte[] toByteArray() { - if( capacity > Integer.MAX_VALUE ) { - throw new OutOfMemoryError("Native buffer larger than the largest allowed Java byte[]"); - } - byte [] rc = new byte[(int) capacity]; - read(0, rc, 0, rc.length); - return rc; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCache.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCache.java deleted file mode 100644 index ebc7cd4938..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCache.java +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.MethodFlag.CPP_DELETE; - -/** - * Provides a java interface to the C++ rocksdb::Cache class. - * - * @author Hiram Chirino - */ -public class NativeCache extends NativeObject { - - @JniClass(name="rocksdb::Cache", flags={CPP}) - private static class CacheJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(cast="rocksdb::Cache *", accessor="rocksdb::NewLRUCache") - public static final native long NewLRUCache( - @JniArg(cast="size_t") long capacity); - - @JniMethod(flags={CPP_DELETE}) - public static final native void delete(long self); - } - - public NativeCache(long capacity) { - super(CacheJNI.NewLRUCache(capacity)); - } - - public void delete() { - assertAllocated(); - CacheJNI.delete(self); - self = 0; - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeComparator.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeComparator.java deleted file mode 100644 index 350a7b5704..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeComparator.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.*; - -import static org.fusesource.hawtjni.runtime.FieldFlag.*; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; -import static org.fusesource.hawtjni.runtime.ArgFlag.*; -import static org.fusesource.hawtjni.runtime.ClassFlag.*; - -/** - *

- * Provides a java interface to the C++ rocksdb::Comparator class. - *

- * - * @author Hiram Chirino - */ -public abstract class NativeComparator extends NativeObject { - - @JniClass(name="JNIComparator", flags={STRUCT, CPP}) - static public class ComparatorJNI { - - static { - NativeDB.LIBRARY.load(); - init(); - } - - @JniMethod(flags={CPP_NEW}) - public static final native long create(); - @JniMethod(flags={CPP_DELETE}) - public static final native void delete(long ptr); - - public static final native void memmove ( - @JniArg(cast="void *") long dest, - @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) ComparatorJNI src, - @JniArg(cast="size_t") long size); - - public static final native void memmove ( - @JniArg(cast="void *", flags={NO_IN, CRITICAL}) ComparatorJNI dest, - @JniArg(cast="const void *") long src, - @JniArg(cast="size_t") long size); - - @JniField(cast="jobject", flags={POINTER_FIELD}) - long target; - - @JniField(cast="jmethodID", flags={POINTER_FIELD}) - long compare_method; - - @JniField(cast="const char *") - long name; - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, accessor="sizeof(struct JNIComparator)") - static int SIZEOF; - - @JniField(flags={CONSTANT}, cast="const Comparator*", accessor="rocksdb::BytewiseComparator()") - private static long BYTEWISE_COMPARATOR; - - } - - private NativeBuffer name_buffer; - private long globalRef; - - public NativeComparator() { - super(ComparatorJNI.create()); - try { - name_buffer = NativeBuffer.create(name()); - globalRef = NativeDB.DBJNI.NewGlobalRef(this); - if( globalRef==0 ) { - throw new RuntimeException("jni call failed: NewGlobalRef"); - } - ComparatorJNI struct = new ComparatorJNI(); - struct.compare_method = NativeDB.DBJNI.GetMethodID(this.getClass(), "compare", "(JJ)I"); - if( struct.compare_method==0 ) { - throw new RuntimeException("jni call failed: GetMethodID"); - } - struct.target = globalRef; - struct.name = name_buffer.pointer(); - ComparatorJNI.memmove(self, struct, ComparatorJNI.SIZEOF); - - } catch (RuntimeException e) { - delete(); - throw e; - } - } - - public static final NativeComparator BYTEWISE_COMPARATOR = new NativeComparator(ComparatorJNI.BYTEWISE_COMPARATOR) { - @Override - public void delete() { - // we won't really delete this one since it's static. - } - @Override - public int compare(byte[] key1, byte[] key2) { - throw new UnsupportedOperationException(); - } - @Override - public String name() { - throw new UnsupportedOperationException(); - } - }; - - NativeComparator(long ptr) { - super(ptr); - } - - public void delete() { - if( name_buffer!=null ) { - name_buffer.delete(); - name_buffer = null; - } - if( globalRef!=0 ) { - NativeDB.DBJNI.DeleteGlobalRef(globalRef); - globalRef = 0; - } - } - - private int compare(long ptr1, long ptr2) { - NativeSlice s1 = new NativeSlice(); - s1.read(ptr1, 0); - NativeSlice s2 = new NativeSlice(); - s2.read(ptr2, 0); - return compare(s1.toByteArray(), s2.toByteArray()); - } - - public abstract int compare(byte[] key1, byte[] key2); - public abstract String name(); - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCompressionType.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCompressionType.java deleted file mode 100644 index e3d5411ef5..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeCompressionType.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -/** - * Provides a java interface to the C++ rocksdb::CompressionType enum. - * - * @author Hiram Chirino - */ -public enum NativeCompressionType { - kNoCompression(0x0), kSnappyCompression(0x1); - - static final int t = kNoCompression.value; - final int value; - - NativeCompressionType(int value) { - this.value = value; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeDB.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeDB.java deleted file mode 100644 index 606114098a..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeDB.java +++ /dev/null @@ -1,427 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; -import org.fusesource.hawtjni.runtime.Library; - -import java.io.File; -import java.io.IOException; - -import static org.fusesource.hawtjni.runtime.ArgFlag.*; -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; - -/** - * The DB object provides the main interface to acessing LevelDB - * - * @author Hiram Chirino - */ -public class NativeDB extends NativeObject { - - public static final Library LIBRARY = new Library("leveldbjni", NativeDB.class); - - @JniClass(name="rocksdb::DB", flags={CPP}) - static class DBJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(flags={JNI, POINTER_RETURN}, cast="jobject") - public static final native long NewGlobalRef( - Object target); - - @JniMethod(flags={JNI}, cast="jobject") - public static final native void DeleteGlobalRef( - @JniArg(cast="jobject", flags={POINTER_ARG}) - long target); - - @JniMethod(flags={JNI, POINTER_RETURN}, cast="jmethodID") - public static final native long GetMethodID( - @JniArg(cast="jclass", flags={POINTER_ARG}) - Class clazz, - String name, - String signature); - - @JniMethod(flags={CPP_DELETE}) - static final native void delete( - long self - ); - - @JniMethod(copy="rocksdb::Status", accessor = "rocksdb::DB::Open") - static final native long Open( - @JniArg(flags={BY_VALUE, NO_OUT}) NativeOptions options, - @JniArg(cast="const char*") String path, - @JniArg(cast="rocksdb::DB**") long[] self); - - @JniMethod(copy="rocksdb::Status", flags={CPP_METHOD}) - static final native long Put( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeWriteOptions options, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice key, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice value - ); - - @JniMethod(copy="rocksdb::Status", flags={CPP_METHOD}) - static final native long Delete( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeWriteOptions options, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice key - ); - - @JniMethod(copy="rocksdb::Status", flags={CPP_METHOD}) - static final native long Write( - long self, - @JniArg(flags={BY_VALUE}) NativeWriteOptions options, - @JniArg(cast="rocksdb::WriteBatch *") long updates - ); - - @JniMethod(copy="rocksdb::Status", flags={CPP_METHOD}) - static final native long Get( - long self, - @JniArg(flags={NO_OUT, BY_VALUE}) NativeReadOptions options, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice key, - @JniArg(cast="std::string *") long value - ); - - @JniMethod(cast="rocksdb::Iterator *", flags={CPP_METHOD}) - static final native long NewIterator( - long self, - @JniArg(flags={NO_OUT, BY_VALUE}) NativeReadOptions options - ); - - @JniMethod(cast="rocksdb::Snapshot *", flags={CPP_METHOD}) - static final native long GetSnapshot( - long self); - - @JniMethod(flags={CPP_METHOD}) - static final native void ReleaseSnapshot( - long self, - @JniArg(cast="const rocksdb::Snapshot *") long snapshot - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void GetApproximateSizes( - long self, - @JniArg(cast="const rocksdb::Range *") long range, - int n, - @JniArg(cast="uint64_t*") long[] sizes - ); - - @JniMethod(flags={CPP_METHOD}) - static final native boolean GetProperty( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice property, - @JniArg(cast="std::string *") long value - ); - - @JniMethod(copy="rocksdb::Status", accessor = "rocksdb::DestroyDB") - static final native long DestroyDB( - @JniArg(cast="const char*") String path, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeOptions options); - - @JniMethod(copy="rocksdb::Status", accessor = "rocksdb::RepairDB") - static final native long RepairDB( - @JniArg(cast="const char*") String path, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeOptions options); - - @JniMethod(flags={CPP_METHOD}) - static final native void CompactRange( - long self, - @JniArg(flags={NO_OUT}) NativeSlice begin, - @JniArg(flags={NO_OUT}) NativeSlice end - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void SuspendCompactions(long self); - - @JniMethod(flags={CPP_METHOD}) - static final native void ResumeCompactions(long self); - } - - public void delete() { - assertAllocated(); - DBJNI.delete(self); - self = 0; - } - - private NativeDB(long self) { - super(self); - } - - public static class DBException extends IOException { - private final boolean notFound; - - DBException(String s, boolean notFound) { - super(s); - this.notFound = notFound; - } - - public boolean isNotFound() { - return notFound; - } - } - - static void checkStatus(long s) throws DBException { - NativeStatus status = new NativeStatus(s); - try { - if( !status.isOk() ) { - throw new DBException(status.toString(), status.isNotFound()); - } - } finally { - status.delete(); - } - } - - static void checkArgNotNull(Object value, String name) { - if(value==null) { - throw new IllegalArgumentException("The "+name+" argument cannot be null"); - } - } - - public static NativeDB open(NativeOptions options, File path) throws IOException, DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(path, "path"); - long rc[] = new long[1]; - try { - checkStatus(DBJNI.Open(options, path.getCanonicalPath(), rc)); - } catch (IOException e) { - if( rc[0]!=0 ) { - DBJNI.delete(rc[0]); - } - throw e; - } - return new NativeDB(rc[0]); - } - - public void suspendCompactions() { - DBJNI.SuspendCompactions(self); - } - - public void resumeCompactions() { - DBJNI.ResumeCompactions(self); - } - - public void put(NativeWriteOptions options, byte[] key, byte[] value) throws DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(key, "key"); - checkArgNotNull(value, "value"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - NativeBuffer valueBuffer = NativeBuffer.create(value); - try { - put(options, keyBuffer, valueBuffer); - } finally { - valueBuffer.delete(); - } - } finally { - keyBuffer.delete(); - } - } - - private void put(NativeWriteOptions options, NativeBuffer keyBuffer, NativeBuffer valueBuffer) throws DBException { - put(options, new NativeSlice(keyBuffer), new NativeSlice(valueBuffer)); - } - - private void put(NativeWriteOptions options, NativeSlice keySlice, NativeSlice valueSlice) throws DBException { - assertAllocated(); - checkStatus(DBJNI.Put(self, options, keySlice, valueSlice)); - } - - public void delete(NativeWriteOptions options, byte[] key) throws DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(key, "key"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - delete(options, keyBuffer); - } finally { - keyBuffer.delete(); - } - } - - private void delete(NativeWriteOptions options, NativeBuffer keyBuffer) throws DBException { - delete(options, new NativeSlice(keyBuffer)); - } - - private void delete(NativeWriteOptions options, NativeSlice keySlice) throws DBException { - assertAllocated(); - checkStatus(DBJNI.Delete(self, options, keySlice)); - } - - public void write(NativeWriteOptions options, NativeWriteBatch updates) throws DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(updates, "updates"); - checkStatus(DBJNI.Write(self, options, updates.pointer())); - } - - public byte[] get(NativeReadOptions options, byte[] key) throws DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(key, "key"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - return get(options, keyBuffer); - } finally { - keyBuffer.delete(); - } - } - - private byte[] get(NativeReadOptions options, NativeBuffer keyBuffer) throws DBException { - return get(options, new NativeSlice(keyBuffer)); - } - - private byte[] get(NativeReadOptions options, NativeSlice keySlice) throws DBException { - assertAllocated(); - NativeStdString result = new NativeStdString(); - try { - checkStatus(DBJNI.Get(self, options, keySlice, result.pointer())); - return result.toByteArray(); - } finally { - result.delete(); - } - } - - public NativeSnapshot getSnapshot() { - return new NativeSnapshot(DBJNI.GetSnapshot(self)); - } - - public void releaseSnapshot(NativeSnapshot snapshot) { - checkArgNotNull(snapshot, "snapshot"); - DBJNI.ReleaseSnapshot(self, snapshot.pointer()); - } - - public NativeIterator iterator(NativeReadOptions options) { - checkArgNotNull(options, "options"); - return new NativeIterator(DBJNI.NewIterator(self, options)); - } - - public long[] getApproximateSizes(NativeRange... ranges) { - if( ranges==null ) { - return null; - } - - long rc[] = new long[ranges.length]; - NativeRange.RangeJNI structs[] = new NativeRange.RangeJNI[ranges.length]; - if( rc.length> 0 ) { - NativeBuffer range_array = NativeRange.RangeJNI.arrayCreate(ranges.length); - try { - for(int i=0; i < ranges.length; i++) { - structs[i] = new NativeRange.RangeJNI(ranges[i]); - structs[i].arrayWrite(range_array.pointer(), i); - } - DBJNI.GetApproximateSizes(self,range_array.pointer(), ranges.length, rc); - } finally { - for(int i=0; i < ranges.length; i++) { - if( structs[i] != null ) { - structs[i].delete(); - } - } - range_array.delete(); - } - } - return rc; - } - - public String getProperty(String name) { - checkArgNotNull(name, "name"); - NativeBuffer keyBuffer = NativeBuffer.create(name.getBytes()); - try { - byte[] property = getProperty(keyBuffer); - if( property==null ) { - return null; - } else { - return new String(property); - } - } finally { - keyBuffer.delete(); - } - } - - private byte[] getProperty(NativeBuffer nameBuffer) { - return getProperty(new NativeSlice(nameBuffer)); - } - - private byte[] getProperty(NativeSlice nameSlice) { - assertAllocated(); - NativeStdString result = new NativeStdString(); - try { - if( DBJNI.GetProperty(self, nameSlice, result.pointer()) ) { - return result.toByteArray(); - } else { - return null; - } - } finally { - result.delete(); - } - } - - public void compactRange(byte[] begin, byte[] end) { - NativeBuffer keyBuffer = NativeBuffer.create(begin); - try { - NativeBuffer valueBuffer = NativeBuffer.create(end); - try { - compactRange(keyBuffer, valueBuffer); - } finally { - if( valueBuffer!=null ) { - valueBuffer.delete(); - } - } - } finally { - if( keyBuffer!=null ) { - keyBuffer.delete(); - } - } - } - - private void compactRange( NativeBuffer beginBuffer, NativeBuffer endBuffer) { - compactRange(NativeSlice.create(beginBuffer), NativeSlice.create(endBuffer)); - } - - private void compactRange( NativeSlice beginSlice, NativeSlice endSlice) { - assertAllocated(); - DBJNI.CompactRange(self, beginSlice, endSlice); - } - - - static public void destroy(File path, NativeOptions options) throws IOException, DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(path, "path"); - checkStatus(DBJNI.DestroyDB(path.getCanonicalPath(), options)); - } - - static public void repair(File path, NativeOptions options) throws IOException, DBException { - checkArgNotNull(options, "options"); - checkArgNotNull(path, "path"); - checkStatus(DBJNI.RepairDB(path.getCanonicalPath(), options)); - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeIterator.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeIterator.java deleted file mode 100644 index b1883d1c8a..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeIterator.java +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.*; - -import static org.fusesource.hawtjni.runtime.MethodFlag.*; -import static org.fusesource.hawtjni.runtime.ArgFlag.*; -import static org.fusesource.hawtjni.runtime.ClassFlag.*; - -/** - * Provides a java interface to the C++ rocksdb::Iterator class. - * - * @author Hiram Chirino - */ -public class NativeIterator extends NativeObject { - - @JniClass(name="rocksdb::Iterator", flags={CPP}) - private static class IteratorJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(flags={CPP_DELETE}) - public static final native void delete( - long self - ); - - @JniMethod(flags={CPP_METHOD}) - static final native boolean Valid( - long self - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void SeekToFirst( - long self - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void SeekToLast( - long self - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void Seek( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice target - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void Next( - long self - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void Prev( - long self - ); - - @JniMethod(copy="rocksdb::Slice", flags={CPP_METHOD}) - static final native long key( - long self - ); - - @JniMethod(copy="rocksdb::Slice", flags={CPP_METHOD}) - static final native long value( - long self - ); - - @JniMethod(copy="rocksdb::Status", flags={CPP_METHOD}) - static final native long status( - long self - ); - } - - NativeIterator(long self) { - super(self); - } - - public void delete() { - assertAllocated(); - IteratorJNI.delete(self); - self = 0; - } - - public boolean isValid() { - assertAllocated(); - return IteratorJNI.Valid(self); - } - - private void checkStatus() throws NativeDB.DBException { - NativeDB.checkStatus(IteratorJNI.status(self)); - } - - public void seekToFirst() { - assertAllocated(); - IteratorJNI.SeekToFirst(self); - } - - public void seekToLast() { - assertAllocated(); - IteratorJNI.SeekToLast(self); - } - - public void seek(byte[] key) throws NativeDB.DBException { - NativeDB.checkArgNotNull(key, "key"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - seek(keyBuffer); - } finally { - keyBuffer.delete(); - } - } - - private void seek(NativeBuffer keyBuffer) throws NativeDB.DBException { - seek(new NativeSlice(keyBuffer)); - } - - private void seek(NativeSlice keySlice) throws NativeDB.DBException { - assertAllocated(); - IteratorJNI.Seek(self, keySlice); - checkStatus(); - } - - public void next() throws NativeDB.DBException { - assertAllocated(); - IteratorJNI.Next(self); - checkStatus(); - } - - public void prev() throws NativeDB.DBException { - assertAllocated(); - IteratorJNI.Prev(self); - checkStatus(); - } - - public byte[] key() throws NativeDB.DBException { - assertAllocated(); - long slice_ptr = IteratorJNI.key(self); - checkStatus(); - try { - NativeSlice slice = new NativeSlice(); - slice.read(slice_ptr, 0); - return slice.toByteArray(); - } finally { - NativeSlice.SliceJNI.delete(slice_ptr); - } - } - - public byte[] value() throws NativeDB.DBException { - assertAllocated(); - long slice_ptr = IteratorJNI.value(self); - checkStatus(); - try { - NativeSlice slice = new NativeSlice(); - slice.read(slice_ptr, 0); - return slice.toByteArray(); - } finally { - NativeSlice.SliceJNI.delete(slice_ptr); - } - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeLogger.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeLogger.java deleted file mode 100644 index e84cf282f5..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeLogger.java +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniField; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ArgFlag.CRITICAL; -import static org.fusesource.hawtjni.runtime.ArgFlag.NO_OUT; -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; -import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; -import static org.fusesource.hawtjni.runtime.FieldFlag.POINTER_FIELD; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; - -/** - *

- * Provides a java interface to the C++ rocksdb::Logger class. - *

- * - * @author Hiram Chirino - */ -public abstract class NativeLogger extends NativeObject { - - @JniClass(name="JNILogger", flags={STRUCT, CPP}) - static public class LoggerJNI { - - static { - NativeDB.LIBRARY.load(); - init(); - } - - @JniMethod(flags={CPP_NEW}) - public static final native long create(); - - @JniMethod(flags={CPP_DELETE}) - public static final native void delete( - long self - ); - - public static final native void memmove ( - @JniArg(cast="void *") long dest, - @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) LoggerJNI src, - @JniArg(cast="size_t") long size); - - @JniField(cast="jobject", flags={POINTER_FIELD}) - long target; - - @JniField(cast="jmethodID", flags={POINTER_FIELD}) - long log_method; - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, accessor="sizeof(struct JNILogger)") - static int SIZEOF; - } - - private long globalRef; - - public NativeLogger() { - super(LoggerJNI.create()); - try { - globalRef = NativeDB.DBJNI.NewGlobalRef(this); - if( globalRef==0 ) { - throw new RuntimeException("jni call failed: NewGlobalRef"); - } - LoggerJNI struct = new LoggerJNI(); - struct.log_method = NativeDB.DBJNI.GetMethodID(this.getClass(), "log", "(Ljava/lang/String;)V"); - if( struct.log_method ==0 ) { - throw new RuntimeException("jni call failed: GetMethodID"); - } - struct.target = globalRef; - LoggerJNI.memmove(self, struct, LoggerJNI.SIZEOF); - - } catch (RuntimeException e) { - delete(); - throw e; - } - } - - NativeLogger(long ptr) { - super(ptr); - } - - public void delete() { - if( globalRef!=0 ) { - NativeDB.DBJNI.DeleteGlobalRef(globalRef); - globalRef = 0; - } - } - - public abstract void log(String message); - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeObject.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeObject.java deleted file mode 100644 index af2fb84ae5..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeObject.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -/** - * A helper base class which is used to track a pointer to a native - * structure or class. - * - * @author Hiram Chirino - */ -class NativeObject { - - protected long self; - - protected NativeObject(long self) { - this.self = self; - if( self ==0 ) { - throw new OutOfMemoryError("Failure allocating native heap memory"); - } - } - - long pointer() { - return self; - } - - public boolean isAllocated() { - return self !=0; - } - - protected void assertAllocated() { - assert isAllocated() : "This object has been deleted"; - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeOptions.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeOptions.java deleted file mode 100644 index ed6f0014f3..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeOptions.java +++ /dev/null @@ -1,465 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniField; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; -import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; -import static org.fusesource.hawtjni.runtime.FieldFlag.FIELD_SKIP; -import static org.fusesource.hawtjni.runtime.MethodFlag.CONSTANT_INITIALIZER; - -/** - * Provides a java interface to the C++ rocksdb::Options class. - * - * @author Hiram Chirino - */ -@JniClass(name="rocksdb::Options", flags={STRUCT, CPP}) -public class NativeOptions { - - static { - NativeDB.LIBRARY.load(); - init(); - } - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, cast="Env*", accessor="rocksdb::Env::Default()") - private static long DEFAULT_ENV; - - private boolean create_if_missing = false; - private boolean error_if_exists = false; - private boolean paranoid_checks = false; - @JniField(cast="size_t") - private long write_buffer_size = 4 << 20; - @JniField(cast="size_t") - private long max_write_buffer_number = 2; - @JniField(cast="size_t") - private long block_size = 4086; - private int max_open_files = 1000; - private int block_restart_interval = 16; - private boolean no_block_cache = false; - private boolean use_fsync = false; - private int num_levels = 7; - private int level0_file_num_compaction_trigger = 4; - private int level0_slowdown_writes_trigger = 8; - private int level0_stop_writes_trigger = 12; - private int max_mem_compaction_level = 2; - private int target_file_size_base = 2 * 1048576; - private int target_file_size_multiplier = 1; - - @JniField(flags={FIELD_SKIP}) - private NativeComparator comparatorObject = NativeComparator.BYTEWISE_COMPARATOR; - @JniField(cast="const rocksdb::Comparator*") - private long comparator = comparatorObject.pointer(); - - @JniField(cast="uint64_t") - private long max_bytes_for_level_base = 10 * 1048576; - private int max_bytes_for_level_multiplier = 10; - private int expanded_compaction_factor = 25; - private int source_compaction_factor = 1; - private int max_grandparent_overlap_factor = 10; - private boolean disableDataSync = false; - private int db_stats_log_interval = 1800; - private boolean disable_seek_compaction = false; - @JniField(cast="uint64_t") - private long delete_obsolete_files_period_micros = 0; - private int max_background_compactions = 1; - - @JniField(cast="size_t") - private long max_log_file_size = 0; - private double rate_limit = 0.0; - private int table_cache_numshardbits = 4; - private boolean disable_auto_compactions = false; - - @JniField(cast="uint64_t") - private long WAL_ttl_seconds = 0; - - @JniField(flags={FIELD_SKIP}) - private NativeLogger infoLogObject = null; - @JniField(cast="rocksdb::Logger*") - private long info_log = 0; - - @JniField(cast="rocksdb::Env*") - private long env = DEFAULT_ENV; - @JniField(cast="rocksdb::Cache*") - private long block_cache = 0; - @JniField(flags={FIELD_SKIP}) - private NativeCache cache; - - @JniField(cast="rocksdb::CompressionType") - private int compression = NativeCompressionType.kSnappyCompression.value; - - public NativeOptions createIfMissing(boolean value) { - this.create_if_missing = value; - return this; - } - public boolean createIfMissing() { - return create_if_missing; - } - - public NativeOptions errorIfExists(boolean value) { - this.error_if_exists = value; - return this; - } - public boolean errorIfExists() { - return error_if_exists; - } - - public NativeOptions paranoidChecks(boolean value) { - this.paranoid_checks = value; - return this; - } - public boolean paranoidChecks() { - return paranoid_checks; - } - - public NativeOptions writeBufferSize(long value) { - this.write_buffer_size = value; - return this; - } - public long writeBufferSize() { - return write_buffer_size; - } - - public NativeOptions maxOpenFiles(int value) { - this.max_open_files = value; - return this; - } - public int maxOpenFiles() { - return max_open_files; - } - - public NativeOptions blockRestartInterval(int value) { - this.block_restart_interval = value; - return this; - } - public int blockRestartInterval() { - return block_restart_interval; - } - - public NativeOptions blockSize(long value) { - this.block_size = value; - return this; - } - public long blockSize() { - return block_size; - } - -// @JniField(cast="Env*") -// private long env = DEFAULT_ENV; - - public NativeComparator comparator() { - return comparatorObject; - } - - public NativeOptions comparator(NativeComparator comparator) { - if( comparator==null ) { - throw new IllegalArgumentException("comparator cannot be null"); - } - this.comparatorObject = comparator; - this.comparator = comparator.pointer(); - return this; - } - - public NativeLogger infoLog() { - return infoLogObject; - } - - public NativeOptions infoLog(NativeLogger logger) { - this.infoLogObject = logger; - if( logger ==null ) { - this.info_log = 0; - } else { - this.info_log = logger.pointer(); - } - return this; - } - - public NativeCompressionType compression() { - if(compression == NativeCompressionType.kNoCompression.value) { - return NativeCompressionType.kNoCompression; - } else if(compression == NativeCompressionType.kSnappyCompression.value) { - return NativeCompressionType.kSnappyCompression; - } else { - return NativeCompressionType.kSnappyCompression; - } - } - - public NativeOptions compression(NativeCompressionType compression) { - this.compression = compression.value; - return this; - } - - public NativeCache cache() { - return cache; - } - - public NativeOptions cache(NativeCache cache) { - this.cache = cache; - if( cache!=null ) { - this.block_cache = cache.pointer(); - } else { - this.block_cache = 0; - } - return this; - } - - public int numLevels() { - return this.num_levels; - } - - public NativeOptions numLevels(int numLevels) { - this.num_levels = numLevels; - return this; - } - - public int level0FileNumCompactionTrigger() { - return this.level0_file_num_compaction_trigger; - } - - public NativeOptions level0FileNumCompactionTrigger(int n) { - this.level0_file_num_compaction_trigger = n; - return this; - } - - public int level0SlowdownWritesTrigger() { - return this.level0_slowdown_writes_trigger; - } - - public NativeOptions level0SlowdownWritesTrigger(int n) { - this.level0_slowdown_writes_trigger = n; - return this; - } - - public int level0StopWritesTrigger() { - return this.level0_stop_writes_trigger; - } - - public NativeOptions level0StopWritesTrigger(int n) { - this.level0_stop_writes_trigger = n; - return this; - } - - public int maxMemCompactionLevel() { - return this.max_mem_compaction_level; - } - - public NativeOptions maxMemCompactionLevel(int n) { - this.max_mem_compaction_level = n; - return this; - } - - public int targetFileSizeBase() { - return this.target_file_size_base; - } - - public NativeOptions targetFileSizeBase(int n) { - this.target_file_size_base = n; - return this; - } - - public int targetFileSizeMultiplier() { - return this.target_file_size_multiplier; - } - - public NativeOptions targetFileSizeMultiplier(int n) { - this.target_file_size_multiplier = n; - return this; - } - - public long maxBytesLevelBase() { - return this.max_bytes_for_level_base; - } - - public NativeOptions maxBytesLevelBase(long n) { - this.max_bytes_for_level_base = n; - return this; - } - - public int maxBytesLevelMultiplier() { - return this.max_bytes_for_level_multiplier; - } - - public NativeOptions maxBytesLevelMultiplier(int n) { - this.max_bytes_for_level_multiplier = n; - return this; - } - - public int expandedCompactionFactor() { - return this.expanded_compaction_factor; - } - - public NativeOptions expandedCompactionFactor(int n) { - this.expanded_compaction_factor = n; - return this; - } - - public int sourceCompactionFactor() { - return this.source_compaction_factor; - } - - public NativeOptions sourceCompactionFactor(int n) { - this.source_compaction_factor = n; - return this; - } - - public int maxGrandparentOverlapFactor() { - return this.max_grandparent_overlap_factor; - } - - public NativeOptions maxGrandparentOverlapFactor(int n) { - this.max_grandparent_overlap_factor = n; - return this; - } - - public boolean disableDataSync() { - return this.disableDataSync; - } - - public NativeOptions disableDataSync(boolean flag) { - this.disableDataSync = flag; - return this; - } - - public int dbStatsLogInterval() { - return this.db_stats_log_interval; - } - - public NativeOptions dbStatsLogInterval(int n) { - this.db_stats_log_interval = n; - return this; - } - - public boolean disableSeekCompaction() { - return this.disable_seek_compaction; - } - - public NativeOptions disableSeekCompaction(boolean flag) { - this.disable_seek_compaction = flag; - return this; - } - - public long deleteObsoleteFilesMicros() { - return this.delete_obsolete_files_period_micros; - } - - public NativeOptions deleteObsoleteFilesMicros(long micros) { - this.delete_obsolete_files_period_micros = micros; - return this; - } - - public int maxBackgroundCompactions() { - return this.max_background_compactions; - } - - public NativeOptions maxBackgroundCompactions(int n) { - this.max_background_compactions = n; - return this; - } - - public long maxLogFileSize() { - return this.max_log_file_size; - } - - public NativeOptions maxLogFileSize(long s) { - this.max_log_file_size = s; - return this; - } - - public double rateLimit() { - return this.rate_limit; - } - - public NativeOptions rateLimit(double rate) { - this.rate_limit = rate; - return this; - } - - public int tableCacheNumShardBits() { - return this.table_cache_numshardbits; - } - - public NativeOptions tableCacheNumShardBits(int n) { - this.table_cache_numshardbits = n; - return this; - } - - public boolean disableAutoCompactions() { - return this.disable_auto_compactions; - } - - public NativeOptions disableAutoCompactions(boolean b) { - this.disable_auto_compactions = b; - return this; - } - - public long WALttlSeconds() { - return this.WAL_ttl_seconds; - } - - public NativeOptions WALttlSeconds(long n) { - this.WAL_ttl_seconds = n; - return this; - } - - public boolean noBlockCache() { - return this.no_block_cache; - } - - public NativeOptions noBlockCache(boolean b) { - this.no_block_cache = b; - return this; - } - - public boolean useFsync() { - return this.use_fsync; - } - - public NativeOptions useFsync(boolean b) { - this.use_fsync = b; - return this; - } - - public long maxWriteBufferNumber() { - return this.max_write_buffer_number; - } - - public NativeOptions maxWriteBufferNumber(long n) { - this.max_write_buffer_number = n; - return this; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeRange.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeRange.java deleted file mode 100644 index 1a08304d0e..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeRange.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.*; - -import static org.fusesource.hawtjni.runtime.ArgFlag.*; -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; -import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; -import static org.fusesource.hawtjni.runtime.FieldFlag.FIELD_SKIP; -import static org.fusesource.hawtjni.runtime.MethodFlag.CONSTANT_INITIALIZER; - -/** - * Provides a java interface to the C++ rocksdb::ReadOptions class. - * - * @author Hiram Chirino - */ -public class NativeRange { - - @JniClass(name="rocksdb::Range", flags={STRUCT, CPP}) - static public class RangeJNI { - - static { - NativeDB.LIBRARY.load(); - init(); - } - - public static final native void memmove ( - @JniArg(cast="void *") long dest, - @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) RangeJNI src, - @JniArg(cast="size_t") long size); - - public static final native void memmove ( - @JniArg(cast="void *", flags={NO_IN, CRITICAL}) RangeJNI dest, - @JniArg(cast="const void *") long src, - @JniArg(cast="size_t") long size); - - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, accessor="sizeof(struct rocksdb::Range)") - static int SIZEOF; - - @JniField - NativeSlice start = new NativeSlice(); - @JniField(flags={FIELD_SKIP}) - NativeBuffer start_buffer; - - @JniField - NativeSlice limit = new NativeSlice(); - @JniField(flags={FIELD_SKIP}) - NativeBuffer limit_buffer; - - public RangeJNI(NativeRange range) { - start_buffer = NativeBuffer.create(range.start()); - start.set(start_buffer); - try { - limit_buffer = NativeBuffer.create(range.limit()); - } catch (OutOfMemoryError e) { - start_buffer.delete(); - throw e; - } - limit.set(limit_buffer); - } - - public void delete() { - start_buffer.delete(); - limit_buffer.delete(); - } - - static NativeBuffer arrayCreate(int dimension) { - return NativeBuffer.create(dimension*SIZEOF); - } - - void arrayWrite(long buffer, int index) { - RangeJNI.memmove(PointerMath.add(buffer, SIZEOF * index), this, SIZEOF); - } - - void arrayRead(long buffer, int index) { - RangeJNI.memmove(this, PointerMath.add(buffer, SIZEOF * index), SIZEOF); - } - - } - - final private byte[] start; - final private byte[] limit; - - public byte[] limit() { - return limit; - } - - public byte[] start() { - return start; - } - - public NativeRange(byte[] start, byte[] limit) { - NativeDB.checkArgNotNull(start, "start"); - NativeDB.checkArgNotNull(limit, "limit"); - this.limit = limit; - this.start = start; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeReadOptions.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeReadOptions.java deleted file mode 100644 index 3679eb2a50..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeReadOptions.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniField; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; - -/** - * Provides a java interface to the C++ rocksdb::ReadOptions class. - * - * @author Hiram Chirino - */ -@JniClass(name="rocksdb::ReadOptions", flags={STRUCT, CPP}) -public class NativeReadOptions { - - @JniField - private boolean verify_checksums = false; - - @JniField - private boolean fill_cache = true; - - @JniField(cast="const rocksdb::Snapshot*") - private long snapshot=0; - - public boolean fillCache() { - return fill_cache; - } - - public NativeReadOptions fillCache(boolean fill_cache) { - this.fill_cache = fill_cache; - return this; - } - - public NativeSnapshot snapshot() { - if( snapshot == 0 ) { - return null; - } else { - return new NativeSnapshot(snapshot); - } - } - - public NativeReadOptions snapshot(NativeSnapshot snapshot) { - if( snapshot==null ) { - this.snapshot = 0; - } else { - this.snapshot = snapshot.pointer(); - } - return this; - } - - public boolean verifyChecksums() { - return verify_checksums; - } - - public NativeReadOptions verifyChecksums(boolean verify_checksums) { - this.verify_checksums = verify_checksums; - return this; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSlice.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSlice.java deleted file mode 100644 index 146b4fae7e..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSlice.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.*; - -import static org.fusesource.hawtjni.runtime.ArgFlag.*; -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; -import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; -import static org.fusesource.hawtjni.runtime.MethodFlag.CONSTANT_INITIALIZER; -import static org.fusesource.hawtjni.runtime.MethodFlag.CPP_DELETE; - -/** - * Provides a java interface to the C++ rocksdb::Slice class. - * - * @author Hiram Chirino - */ -@JniClass(name="rocksdb::Slice", flags={STRUCT, CPP}) -class NativeSlice { - - @JniClass(name="rocksdb::Slice", flags={CPP}) - static class SliceJNI { - static { - NativeDB.LIBRARY.load(); - init(); - } - - @JniMethod(flags={CPP_DELETE}) - public static final native void delete( - long self - ); - - public static final native void memmove ( - @JniArg(cast="void *") long dest, - @JniArg(cast="const void *", flags={NO_OUT, CRITICAL}) NativeSlice src, - @JniArg(cast="size_t") long size); - - public static final native void memmove ( - @JniArg(cast="void *", flags={NO_IN, CRITICAL}) NativeSlice dest, - @JniArg(cast="const void *") long src, - @JniArg(cast="size_t") long size); - - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, accessor="sizeof(struct rocksdb::Slice)") - static int SIZEOF; - - } - - - @JniField(cast="const char*") - private long data_; - @JniField(cast="size_t") - private long size_; - - public NativeSlice() { - } - - public NativeSlice(long data, long length) { - this.data_ = data; - this.size_ = length; - } - - public NativeSlice(NativeBuffer buffer) { - this(buffer.pointer(), buffer.capacity()); - } - - public static NativeSlice create(NativeBuffer buffer) { - if(buffer == null ) { - return null; - } else { - return new NativeSlice(buffer); - } - } - - public long data() { - return data_; - } - - public NativeSlice data(long data) { - this.data_ = data; - return this; - } - - public long size() { - return size_; - } - - public NativeSlice size(long size) { - this.size_ = size; - return this; - } - - public NativeSlice set(NativeSlice buffer) { - this.size_ = buffer.size_; - this.data_ = buffer.data_; - return this; - } - - public NativeSlice set(NativeBuffer buffer) { - this.size_ = buffer.capacity(); - this.data_ = buffer.pointer(); - return this; - } - - public byte[] toByteArray() { - if( size_ > Integer.MAX_VALUE ) { - throw new ArrayIndexOutOfBoundsException("Native slice is larger than the maximum Java array"); - } - byte []rc = new byte[(int) size_]; - NativeBuffer.NativeBufferJNI.buffer_copy(data_, 0, rc, 0, rc.length); - return rc; - } - - static NativeBuffer arrayCreate(int dimension) { - return NativeBuffer.create(dimension*SliceJNI.SIZEOF); - } - - void write(long buffer, int index) { - SliceJNI.memmove(PointerMath.add(buffer, SliceJNI.SIZEOF*index), this, SliceJNI.SIZEOF); - } - - void read(long buffer, int index) { - SliceJNI.memmove(this, PointerMath.add(buffer, SliceJNI.SIZEOF*index), SliceJNI.SIZEOF); - } - - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSnapshot.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSnapshot.java deleted file mode 100644 index 5546c282b9..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeSnapshot.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -/** - * Provides a java interface to the C++ rocksdb::Snapshot class. - * - * @author Hiram Chirino - */ -public class NativeSnapshot extends NativeObject { - - NativeSnapshot(long self) { - super(self); - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStatus.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStatus.java deleted file mode 100644 index 3a2605868a..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStatus.java +++ /dev/null @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.MethodFlag.CPP_DELETE; -import static org.fusesource.hawtjni.runtime.MethodFlag.CPP_METHOD; - -/** - * Provides a java interface to the C++ rocksdb::Status class. - * - * @author Hiram Chirino - */ -class NativeStatus extends NativeObject{ - - @JniClass(name="rocksdb::Status", flags={CPP}) - static class StatusJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(flags={CPP_DELETE}) - public static final native void delete( - long self); - - @JniMethod(flags={CPP_METHOD}) - public static final native boolean ok( - long self); - - @JniMethod(flags={CPP_METHOD}) - public static final native boolean IsNotFound( - long self); - - @JniMethod(copy="std::string", flags={CPP_METHOD}) - public static final native long ToString( - long self); - } - - public NativeStatus(long self) { - super(self); - } - - public void delete() { - assertAllocated(); - StatusJNI.delete(self); - self = 0; - } - - public boolean isOk() { - assertAllocated(); - return StatusJNI.ok(self); - } - - public boolean isNotFound() { - assertAllocated(); - return StatusJNI.IsNotFound(self); - } - - public String toString() { - assertAllocated(); - long strptr = StatusJNI.ToString(self); - if( strptr==0 ) { - return null; - } else { - NativeStdString rc = new NativeStdString(strptr); - try { - return rc.toString(); - } finally { - rc.delete(); - } - } - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStdString.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStdString.java deleted file mode 100644 index 85a51c2b2b..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeStdString.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; - -/** - * Provides a java interface to the C++ std::string class. - * - * @author Hiram Chirino - */ -class NativeStdString extends NativeObject { - - @JniClass(name="std::string", flags={CPP}) - private static class StdStringJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(flags={CPP_NEW}) - public static final native long create(); - - @JniMethod(flags={CPP_NEW}) - public static final native long create(String value); - - @JniMethod(flags={CPP_DELETE}) - static final native void delete( - long self); - - @JniMethod(flags={CPP_METHOD}, accessor = "c_str", cast="const char*") - public static final native long c_str_ptr ( - long self); - - @JniMethod(flags={CPP_METHOD},cast = "size_t") - public static final native long length ( - long self); - - } - - public NativeStdString(long self) { - super(self); - } - - public NativeStdString() { - super(StdStringJNI.create()); - } - - public void delete() { - assertAllocated(); - StdStringJNI.delete(self); - self = 0; - } - - public String toString() { - return new String(toByteArray()); - } - - public long length() { - assertAllocated(); - return StdStringJNI.length(self); - } - - public byte[] toByteArray() { - long l = length(); - if( l > Integer.MAX_VALUE ) { - throw new ArrayIndexOutOfBoundsException("Native string is larger than the maximum Java array"); - } - byte []rc = new byte[(int) l]; - NativeBuffer.NativeBufferJNI.buffer_copy(StdStringJNI.c_str_ptr(self), 0, rc, 0, rc.length); - return rc; - } -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteBatch.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteBatch.java deleted file mode 100644 index b328a4e13f..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteBatch.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniMethod; - -import static org.fusesource.hawtjni.runtime.ArgFlag.BY_VALUE; -import static org.fusesource.hawtjni.runtime.ArgFlag.NO_OUT; -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; - -/** - * Provides a java interface to the C++ rocksdb::WriteBatch class. - * - * @author Hiram Chirino - */ -public class NativeWriteBatch extends NativeObject { - - @JniClass(name="rocksdb::WriteBatch", flags={CPP}) - private static class WriteBatchJNI { - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(flags={CPP_NEW}) - public static final native long create(); - @JniMethod(flags={CPP_DELETE}) - public static final native void delete( - long self); - - @JniMethod(flags={CPP_METHOD}) - static final native void Put( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice key, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice value - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void Delete( - long self, - @JniArg(flags={BY_VALUE, NO_OUT}) NativeSlice key - ); - - @JniMethod(flags={CPP_METHOD}) - static final native void Clear( - long self - ); - - } - - public NativeWriteBatch() { - super(WriteBatchJNI.create()); - } - - public void delete() { - assertAllocated(); - WriteBatchJNI.delete(self); - self = 0; - } - - public void put(byte[] key, byte[] value) { - NativeDB.checkArgNotNull(key, "key"); - NativeDB.checkArgNotNull(value, "value"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - NativeBuffer valueBuffer = NativeBuffer.create(value); - try { - put(keyBuffer, valueBuffer); - } finally { - valueBuffer.delete(); - } - } finally { - keyBuffer.delete(); - } - } - - private void put(NativeBuffer keyBuffer, NativeBuffer valueBuffer) { - put(new NativeSlice(keyBuffer), new NativeSlice(valueBuffer)); - } - - private void put(NativeSlice keySlice, NativeSlice valueSlice) { - assertAllocated(); - WriteBatchJNI.Put(self, keySlice, valueSlice); - } - - - public void delete(byte[] key) { - NativeDB.checkArgNotNull(key, "key"); - NativeBuffer keyBuffer = NativeBuffer.create(key); - try { - delete(keyBuffer); - } finally { - keyBuffer.delete(); - } - } - - private void delete(NativeBuffer keyBuffer) { - delete(new NativeSlice(keyBuffer)); - } - - private void delete(NativeSlice keySlice) { - assertAllocated(); - WriteBatchJNI.Delete(self, keySlice); - } - - public void clear() { - assertAllocated(); - WriteBatchJNI.Clear(self); - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteOptions.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteOptions.java deleted file mode 100644 index e392d35dd6..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/NativeWriteOptions.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniField; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.ClassFlag.STRUCT; - -/** - * Provides a java interface to the C++ rocksdb::WriteOptions class. - * - * @author Hiram Chirino - */ -@JniClass(name="rocksdb::WriteOptions", flags={STRUCT, CPP}) -public class NativeWriteOptions { - - @JniField - boolean sync; - - public boolean sync() { - return sync; - } - - public NativeWriteOptions sync(boolean sync) { - this.sync = sync; - return this; - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/Util.java b/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/Util.java deleted file mode 100644 index f8d7c7f435..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/java/org/fusesource/leveldbjni/internal/Util.java +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.internal; - -import org.fusesource.hawtjni.runtime.JniArg; -import org.fusesource.hawtjni.runtime.JniClass; -import org.fusesource.hawtjni.runtime.JniField; -import org.fusesource.hawtjni.runtime.JniMethod; - -import java.io.File; -import java.io.IOException; - -import static org.fusesource.hawtjni.runtime.ClassFlag.CPP; -import static org.fusesource.hawtjni.runtime.FieldFlag.CONSTANT; -import static org.fusesource.hawtjni.runtime.MethodFlag.*; -import static org.fusesource.hawtjni.runtime.ArgFlag.*; - -/** - * Some miscellaneous utility functions. - * - * @author Hiram Chirino - */ -public class Util { - - @JniClass(name="rocksdb::Env", flags={CPP}) - static class EnvJNI { - - static { - NativeDB.LIBRARY.load(); - } - - @JniMethod(cast = "rocksdb::Env *", accessor = "rocksdb::Env::Default") - public static final native long Default(); - - @JniMethod(flags = {CPP_METHOD}) - public static final native void Schedule( - long self, - @JniArg(cast = "void (*)(void*)") long fp, - @JniArg(cast = "void *") long arg); - - } - - @JniClass(flags={CPP}) - static class UtilJNI { - - static { - NativeDB.LIBRARY.load(); - init(); - } - - @JniMethod(flags={CONSTANT_INITIALIZER}) - private static final native void init(); - - @JniField(flags={CONSTANT}, accessor="1", conditional="defined(_WIN32) || defined(_WIN64)") - static int ON_WINDOWS; - - - @JniMethod(conditional="!defined(_WIN32) && !defined(_WIN64)") - static final native int link( - @JniArg(cast="const char*") String source, - @JniArg(cast="const char*") String target); - - @JniMethod(conditional="defined(_WIN32) || defined(_WIN64)") - static final native int CreateHardLinkW( - @JniArg(cast="LPCTSTR", flags={POINTER_ARG, UNICODE}) String target, - @JniArg(cast="LPCTSTR", flags={POINTER_ARG, UNICODE}) String source, - @JniArg(cast="LPSECURITY_ATTRIBUTES", flags={POINTER_ARG}) long lpSecurityAttributes); - - @JniMethod(flags={CONSTANT_GETTER}) - public static final native int errno(); - - @JniMethod(cast="char *") - public static final native long strerror(int errnum); - - public static final native int strlen( - @JniArg(cast="const char *")long s); - - } - - /** - * Creates a hard link from source to target. - * @param source - * @param target - * @return - */ - public static void link(File source, File target) throws IOException { - if( UtilJNI.ON_WINDOWS == 1 ) { - if( UtilJNI.CreateHardLinkW(target.getCanonicalPath(), source.getCanonicalPath(), 0) == 0) { - throw new IOException("link failed"); - } - } else { - if( UtilJNI.link(source.getCanonicalPath(), target.getCanonicalPath()) != 0 ) { - throw new IOException("link failed: "+strerror()); - } - } - } - - static int errno() { - return UtilJNI.errno(); - } - - static String strerror() { - return string(UtilJNI.strerror(errno())); - } - - static String string(long ptr) { - if( ptr == 0 ) - return null; - return new String(new NativeSlice(ptr, UtilJNI.strlen(ptr)).toByteArray()); - } - -} diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.am b/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.am deleted file mode 100644 index c73517d1c5..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -# --------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. -# --------------------------------------------------------------------------- - -ACLOCAL_AMFLAGS = -I m4 - -lib_LTLIBRARIES = libleveldbjni.la -# libleveldbjni_la_CFLAGS = -#libleveldbjni_la_LDFLAGS = - -libleveldbjni_la_SOURCES = src/leveldbjni.cpp\ - src/leveldbjni_stats.cpp\ - src/leveldbjni_structs.cpp\ - src/buffer.c\ - src/hawtjni.c diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.in b/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.in deleted file mode 100644 index e5c0f39c19..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/Makefile.in +++ /dev/null @@ -1,810 +0,0 @@ -# Makefile.in generated by automake 1.12.1 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994-2012 Free Software Foundation, Inc. - -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - -# --------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You 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. -# --------------------------------------------------------------------------- - -VPATH = @srcdir@ -am__make_dryrun = \ - { \ - am__dry=no; \ - case $$MAKEFLAGS in \ - *\\[\ \ ]*) \ - echo 'am--echo: ; @echo "AM" OK' | $(MAKE) -f - 2>/dev/null \ - | grep '^AM OK$$' >/dev/null || am__dry=yes;; \ - *) \ - for am__flg in $$MAKEFLAGS; do \ - case $$am__flg in \ - *=*|--*) ;; \ - *n*) am__dry=yes; break;; \ - esac; \ - done;; \ - esac; \ - test $$am__dry = yes; \ - } -pkgdatadir = $(datadir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkglibexecdir = $(libexecdir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -target_triplet = @target@ -subdir = . -DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in $(top_srcdir)/autotools/ar-lib \ - $(top_srcdir)/autotools/config.guess \ - $(top_srcdir)/autotools/config.sub \ - $(top_srcdir)/autotools/install-sh \ - $(top_srcdir)/autotools/ltmain.sh \ - $(top_srcdir)/autotools/missing $(top_srcdir)/configure \ - $(top_srcdir)/src/config.h.in autotools/ar-lib \ - autotools/config.guess autotools/config.sub \ - autotools/install-sh autotools/ltmain.sh autotools/missing -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/custom.m4 \ - $(top_srcdir)/m4/jni.m4 $(top_srcdir)/m4/libtool.m4 \ - $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ - $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ - $(top_srcdir)/m4/osx-universal.m4 $(top_srcdir)/configure.ac -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ - configure.lineno config.status.lineno -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/src/config.h -CONFIG_CLEAN_FILES = -CONFIG_CLEAN_VPATH_FILES = -am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; -am__vpath_adj = case $$p in \ - $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ - *) f=$$p;; \ - esac; -am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; -am__install_max = 40 -am__nobase_strip_setup = \ - srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` -am__nobase_strip = \ - for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" -am__nobase_list = $(am__nobase_strip_setup); \ - for p in $$list; do echo "$$p $$p"; done | \ - sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ - $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ - if (++n[$$2] == $(am__install_max)) \ - { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ - END { for (dir in files) print dir, files[dir] }' -am__base_list = \ - sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ - sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' -am__uninstall_files_from_dir = { \ - test -z "$$files" \ - || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ - || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ - $(am__cd) "$$dir" && rm -f $$files; }; \ - } -am__installdirs = "$(DESTDIR)$(libdir)" -LTLIBRARIES = $(lib_LTLIBRARIES) -libleveldbjni_la_LIBADD = -am_libleveldbjni_la_OBJECTS = leveldbjni.lo leveldbjni_stats.lo \ - leveldbjni_structs.lo buffer.lo hawtjni.lo -libleveldbjni_la_OBJECTS = $(am_libleveldbjni_la_OBJECTS) -DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src -depcomp = -am__depfiles_maybe = -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -LTCXXCOMPILE = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ - $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -CXXLD = $(CXX) -CXXLINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ - --mode=link $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ - $(LDFLAGS) -o $@ -SOURCES = $(libleveldbjni_la_SOURCES) -DIST_SOURCES = $(libleveldbjni_la_SOURCES) -am__can_run_installinfo = \ - case $$AM_UPDATE_INFO_DIR in \ - n|no|NO) false;; \ - *) (install-info --version) >/dev/null 2>&1;; \ - esac -ETAGS = etags -CTAGS = ctags -CSCOPE = cscope -AM_RECURSIVE_TARGETS = cscope -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -distdir = $(PACKAGE)-$(VERSION) -top_distdir = $(distdir) -am__remove_distdir = \ - if test -d "$(distdir)"; then \ - find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ - && rm -rf "$(distdir)" \ - || { sleep 5 && rm -rf "$(distdir)"; }; \ - else :; fi -am__post_remove_distdir = $(am__remove_distdir) -DIST_ARCHIVES = $(distdir).tar.gz -GZIP_ENV = --best -DIST_TARGETS = dist-gzip -distuninstallcheck_listfiles = find . -type f -print -am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ - | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' -distcleancheck_listfiles = find . -type f -print -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AR = @AR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CFLAGS = @CFLAGS@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CXX = @CXX@ -CXXCPP = @CXXCPP@ -CXXFLAGS = @CXXFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DLLTOOL = @DLLTOOL@ -DSYMUTIL = @DSYMUTIL@ -DUMPBIN = @DUMPBIN@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -FGREP = @FGREP@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -JNI_EXTRA_CFLAGS = @JNI_EXTRA_CFLAGS@ -JNI_EXTRA_LDFLAGS = @JNI_EXTRA_LDFLAGS@ -JNI_JDK = @JNI_JDK@ -LD = @LD@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LIBTOOL = @LIBTOOL@ -LIPO = @LIPO@ -LN_S = @LN_S@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MANIFEST_TOOL = @MANIFEST_TOOL@ -MKDIR_P = @MKDIR_P@ -NM = @NM@ -NMEDIT = @NMEDIT@ -OBJDUMP = @OBJDUMP@ -OBJEXT = @OBJEXT@ -OSX_SDKS_DIR = @OSX_SDKS_DIR@ -OSX_VERSION = @OSX_VERSION@ -OTOOL = @OTOOL@ -OTOOL64 = @OTOOL64@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_URL = @PACKAGE_URL@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SED = @SED@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_AR = @ac_ct_AR@ -ac_ct_CC = @ac_ct_CC@ -ac_ct_CXX = @ac_ct_CXX@ -ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ -am__leading_dot = @am__leading_dot@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target = @target@ -target_alias = @target_alias@ -target_cpu = @target_cpu@ -target_os = @target_os@ -target_vendor = @target_vendor@ -top_build_prefix = @top_build_prefix@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -ACLOCAL_AMFLAGS = -I m4 -lib_LTLIBRARIES = libleveldbjni.la -# libleveldbjni_la_CFLAGS = -#libleveldbjni_la_LDFLAGS = -libleveldbjni_la_SOURCES = src/leveldbjni.cpp\ - src/leveldbjni_stats.cpp\ - src/leveldbjni_structs.cpp\ - src/buffer.c\ - src/hawtjni.c - -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .cpp .lo .o .obj -am--refresh: Makefile - @: -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - echo ' cd $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps'; \ - $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign --ignore-deps \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps Makefile'; \ - $(am__cd) $(top_srcdir) && \ - $(AUTOMAKE) --foreign --ignore-deps Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - echo ' $(SHELL) ./config.status'; \ - $(SHELL) ./config.status;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - $(SHELL) ./config.status --recheck - -$(top_srcdir)/configure: $(am__configure_deps) - $(am__cd) $(srcdir) && $(AUTOCONF) -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -$(am__aclocal_m4_deps): - -src/config.h: src/stamp-h1 - @if test ! -f $@; then rm -f src/stamp-h1; else :; fi - @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/stamp-h1; else :; fi - -src/stamp-h1: $(top_srcdir)/src/config.h.in $(top_builddir)/config.status - @rm -f src/stamp-h1 - cd $(top_builddir) && $(SHELL) ./config.status src/config.h -$(top_srcdir)/src/config.h.in: $(am__configure_deps) - ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) - rm -f src/stamp-h1 - touch $@ - -distclean-hdr: - -rm -f src/config.h src/stamp-h1 -install-libLTLIBRARIES: $(lib_LTLIBRARIES) - @$(NORMAL_INSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - list2=; for p in $$list; do \ - if test -f $$p; then \ - list2="$$list2 $$p"; \ - else :; fi; \ - done; \ - test -z "$$list2" || { \ - echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ - $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ - } - -uninstall-libLTLIBRARIES: - @$(NORMAL_UNINSTALL) - @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ - for p in $$list; do \ - $(am__strip_dir) \ - echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ - $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ - done - -clean-libLTLIBRARIES: - -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) - @list='$(lib_LTLIBRARIES)'; \ - locs=`for p in $$list; do echo $$p; done | \ - sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ - sort -u`; \ - test -z "$$locs" || { \ - echo rm -f $${locs}; \ - rm -f $${locs}; \ - } -libleveldbjni.la: $(libleveldbjni_la_OBJECTS) $(libleveldbjni_la_DEPENDENCIES) $(EXTRA_libleveldbjni_la_DEPENDENCIES) - $(CXXLINK) -rpath $(libdir) $(libleveldbjni_la_OBJECTS) $(libleveldbjni_la_LIBADD) $(LIBS) - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -.c.o: - $(COMPILE) -c $< - -.c.obj: - $(COMPILE) -c `$(CYGPATH_W) '$<'` - -.c.lo: - $(LTCOMPILE) -c -o $@ $< - -buffer.lo: src/buffer.c - $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o buffer.lo `test -f 'src/buffer.c' || echo '$(srcdir)/'`src/buffer.c - -hawtjni.lo: src/hawtjni.c - $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hawtjni.lo `test -f 'src/hawtjni.c' || echo '$(srcdir)/'`src/hawtjni.c - -.cpp.o: - $(CXXCOMPILE) -c -o $@ $< - -.cpp.obj: - $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` - -.cpp.lo: - $(LTCXXCOMPILE) -c -o $@ $< - -leveldbjni.lo: src/leveldbjni.cpp - $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o leveldbjni.lo `test -f 'src/leveldbjni.cpp' || echo '$(srcdir)/'`src/leveldbjni.cpp - -leveldbjni_stats.lo: src/leveldbjni_stats.cpp - $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o leveldbjni_stats.lo `test -f 'src/leveldbjni_stats.cpp' || echo '$(srcdir)/'`src/leveldbjni_stats.cpp - -leveldbjni_structs.lo: src/leveldbjni_structs.cpp - $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o leveldbjni_structs.lo `test -f 'src/leveldbjni_structs.cpp' || echo '$(srcdir)/'`src/leveldbjni_structs.cpp - -mostlyclean-libtool: - -rm -f *.lo - -clean-libtool: - -rm -rf .libs _libs - -distclean-libtool: - -rm -f libtool config.lt - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - set x; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - shift; \ - if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - if test $$# -gt 0; then \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - "$$@" $$unique; \ - else \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$unique; \ - fi; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ - END { if (nonempty) { for (i in files) print i; }; }'`; \ - test -z "$(CTAGS_ARGS)$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && $(am__cd) $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) "$$here" - -cscope: cscope.files - test ! -s cscope.files \ - || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) - -clean-cscope: - -rm -f cscope.files - -cscope.files: clean-cscope cscopelist - -cscopelist: $(HEADERS) $(SOURCES) $(LISP) - list='$(SOURCES) $(HEADERS) $(LISP)'; \ - case "$(srcdir)" in \ - [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ - *) sdir=$(subdir)/$(srcdir) ;; \ - esac; \ - for i in $$list; do \ - if test -f "$$i"; then \ - echo "$(subdir)/$$i"; \ - else \ - echo "$$sdir/$$i"; \ - fi; \ - done >> $(top_builddir)/cscope.files - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -rm -f cscope.out cscope.in.out cscope.po.out cscope.files - -distdir: $(DISTFILES) - $(am__remove_distdir) - test -d "$(distdir)" || mkdir "$(distdir)" - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d "$(distdir)/$$file"; then \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ - find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ - fi; \ - cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ - else \ - test -f "$(distdir)/$$file" \ - || cp -p $$d/$$file "$(distdir)/$$file" \ - || exit 1; \ - fi; \ - done - -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -755 \ - -exec chmod u+rwx,go+rx {} \; -o \ - ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ - ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ - || chmod -R a+r "$(distdir)" -dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz - $(am__post_remove_distdir) - -dist-bzip2: distdir - tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 - $(am__post_remove_distdir) - -dist-lzip: distdir - tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz - $(am__post_remove_distdir) - -dist-xz: distdir - tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz - $(am__post_remove_distdir) - -dist-tarZ: distdir - tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z - $(am__post_remove_distdir) - -dist-shar: distdir - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz - $(am__post_remove_distdir) - -dist-zip: distdir - -rm -f $(distdir).zip - zip -rq $(distdir).zip $(distdir) - $(am__post_remove_distdir) - -dist dist-all: - $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' - $(am__post_remove_distdir) - -# This target untars the dist file and tries a VPATH configuration. Then -# it guarantees that the distribution is self-contained by making another -# tarfile. -distcheck: dist - case '$(DIST_ARCHIVES)' in \ - *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ - *.tar.bz2*) \ - bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ - *.tar.lz*) \ - lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ - *.tar.xz*) \ - xz -dc $(distdir).tar.xz | $(am__untar) ;;\ - *.tar.Z*) \ - uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ - *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ - *.zip*) \ - unzip $(distdir).zip ;;\ - esac - chmod -R a-w $(distdir); chmod a+w $(distdir) - mkdir $(distdir)/_build - mkdir $(distdir)/_inst - chmod a-w $(distdir) - test -d $(distdir)/_build || exit 0; \ - dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ - && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ - && am__cwd=`pwd` \ - && $(am__cd) $(distdir)/_build \ - && ../configure --srcdir=.. --prefix="$$dc_install_base" \ - $(AM_DISTCHECK_CONFIGURE_FLAGS) \ - $(DISTCHECK_CONFIGURE_FLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) \ - && $(MAKE) $(AM_MAKEFLAGS) dvi \ - && $(MAKE) $(AM_MAKEFLAGS) check \ - && $(MAKE) $(AM_MAKEFLAGS) install \ - && $(MAKE) $(AM_MAKEFLAGS) installcheck \ - && $(MAKE) $(AM_MAKEFLAGS) uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ - distuninstallcheck \ - && chmod -R a-w "$$dc_install_base" \ - && ({ \ - (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ - && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ - distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ - } || { rm -rf "$$dc_destdir"; exit 1; }) \ - && rm -rf "$$dc_destdir" \ - && $(MAKE) $(AM_MAKEFLAGS) dist \ - && rm -rf $(DIST_ARCHIVES) \ - && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ - && cd "$$am__cwd" \ - || exit 1 - $(am__post_remove_distdir) - @(echo "$(distdir) archives ready for distribution: "; \ - list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ - sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' -distuninstallcheck: - @test -n '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: trying to run $@ with an empty' \ - '$$(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - $(am__cd) '$(distuninstallcheck_dir)' || { \ - echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ - exit 1; \ - }; \ - test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left after uninstall:" ; \ - if test -n "$(DESTDIR)"; then \ - echo " (check DESTDIR support)"; \ - fi ; \ - $(distuninstallcheck_listfiles) ; \ - exit 1; } >&2 -distcleancheck: distclean - @if test '$(srcdir)' = . ; then \ - echo "ERROR: distcleancheck can only run from a VPATH build" ; \ - exit 1 ; \ - fi - @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ - || { echo "ERROR: files left in build directory after distclean:" ; \ - $(distcleancheck_listfiles) ; \ - exit 1; } >&2 -check-am: all-am -check: check-am -all-am: Makefile $(LTLIBRARIES) -installdirs: - for dir in "$(DESTDIR)$(libdir)"; do \ - test -z "$$dir" || $(MKDIR_P) "$$dir"; \ - done -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - if test -z '$(STRIP)'; then \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - install; \ - else \ - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ - fi -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ - mostlyclean-am - -distclean: distclean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-hdr distclean-libtool distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -html-am: - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-dvi-am: - -install-exec-am: install-libLTLIBRARIES - -install-html: install-html-am - -install-html-am: - -install-info: install-info-am - -install-info-am: - -install-man: - -install-pdf: install-pdf-am - -install-pdf-am: - -install-ps: install-ps-am - -install-ps-am: - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf $(top_srcdir)/autom4te.cache - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic \ - mostlyclean-libtool - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: uninstall-libLTLIBRARIES - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \ - clean-cscope clean-generic clean-libLTLIBRARIES clean-libtool \ - cscope cscopelist ctags dist dist-all dist-bzip2 dist-gzip \ - dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \ - distclean distclean-compile distclean-generic distclean-hdr \ - distclean-libtool distclean-tags distcleancheck distdir \ - distuninstallcheck dvi dvi-am html html-am info info-am \ - install install-am install-data install-data-am install-dvi \ - install-dvi-am install-exec install-exec-am install-html \ - install-html-am install-info install-info-am \ - install-libLTLIBRARIES install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ - tags uninstall uninstall-am uninstall-libLTLIBRARIES - - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/aclocal.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/aclocal.m4 deleted file mode 100644 index 289e077327..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/aclocal.m4 +++ /dev/null @@ -1,718 +0,0 @@ -# generated automatically by aclocal 1.12.1 -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, -[m4_warning([this file was generated for autoconf 2.69. -You have another version of autoconf. It may work, but is not guaranteed to. -If you have problems, you may need to regenerate the build system entirely. -To do so, use the procedure documented by the package, typically 'autoreconf'.])]) - -# Copyright (C) 2002-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_AUTOMAKE_VERSION(VERSION) -# ---------------------------- -# Automake X.Y traces this macro to ensure aclocal.m4 has been -# generated from the m4 files accompanying Automake X.Y. -# (This private macro should not be called outside this file.) -AC_DEFUN([AM_AUTOMAKE_VERSION], -[am__api_version='1.12' -dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to -dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.12.1], [], - [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl -]) - -# _AM_AUTOCONF_VERSION(VERSION) -# ----------------------------- -# aclocal traces this macro to find the Autoconf version. -# This is a private macro too. Using m4_define simplifies -# the logic in aclocal, which can simply ignore this definition. -m4_define([_AM_AUTOCONF_VERSION], []) - -# AM_SET_CURRENT_AUTOMAKE_VERSION -# ------------------------------- -# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. -# This function is AC_REQUIREd by AM_INIT_AUTOMAKE. -AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.12.1])dnl -m4_ifndef([AC_AUTOCONF_VERSION], - [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) - -# Copyright (C) 2011-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 1 - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - ]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # 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__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[dnl Rely on autoconf to set up CDPATH properly. -AC_PREREQ([2.50])dnl -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 10 - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Do all the work for Automake. -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 19 - -# This macro actually does too much. Some checks are only needed if -# your package does certain things. But this isn't really a big deal. - -# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) -# AM_INIT_AUTOMAKE([OPTIONS]) -# ----------------------------------------------- -# The call with PACKAGE and VERSION arguments is the old style -# call (pre autoconf-2.50), which is being phased out. PACKAGE -# and VERSION should now be passed to AC_INIT and removed from -# the call to AM_INIT_AUTOMAKE. -# We support both call styles for the transition. After -# the next Automake release, Autoconf can make the AC_INIT -# arguments mandatory, and then we can depend on a new Autoconf -# release and drop the old call support. -AC_DEFUN([AM_INIT_AUTOMAKE], -[AC_PREREQ([2.62])dnl -dnl Autoconf wants to disallow AM_ names. We explicitly allow -dnl the ones we care about. -m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl -AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl -AC_REQUIRE([AC_PROG_INSTALL])dnl -if test "`cd $srcdir && pwd`" != "`pwd`"; then - # Use -I$(srcdir) only when $(srcdir) != ., so that make's output - # is not polluted with repeated "-I." - AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl - # test to see if srcdir already configured - if test -f $srcdir/config.status; then - AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) - 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 -AC_SUBST([CYGPATH_W]) - -# Define the identity of the package. -dnl Distinguish between old-style and new-style calls. -m4_ifval([$2], -[AC_DIAGNOSE([obsolete], -[$0: two- and three-arguments forms are deprecated. For more info, see: -http://www.gnu.org/software/automake/manual/automake.html#Modernize-AM_INIT_AUTOMAKE-invocation]) -m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl - AC_SUBST([PACKAGE], [$1])dnl - AC_SUBST([VERSION], [$2])], -[_AM_SET_OPTIONS([$1])dnl -dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. -m4_if( - m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), - [ok:ok],, - [m4_fatal([AC_INIT should be called with package and version arguments])])dnl - AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl - AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl - -_AM_IF_OPTION([no-define],, -[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) - AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl - -# Some tools Automake needs. -AC_REQUIRE([AM_SANITY_CHECK])dnl -AC_REQUIRE([AC_ARG_PROGRAM])dnl -AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) -AM_MISSING_PROG([AUTOCONF], [autoconf]) -AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) -AM_MISSING_PROG([AUTOHEADER], [autoheader]) -AM_MISSING_PROG([MAKEINFO], [makeinfo]) -AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl -AC_REQUIRE([AC_PROG_MKDIR_P])dnl -# We need awk for the "check" target. The system "awk" is bad on -# some platforms. -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([AC_PROG_MAKE_SET])dnl -AC_REQUIRE([AM_SET_LEADING_DOT])dnl -_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], - [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], - [_AM_PROG_TAR([v7])])]) -_AM_IF_OPTION([no-dependencies],, -[AC_PROVIDE_IFELSE([AC_PROG_CC], - [_AM_DEPENDENCIES([CC])], - [m4_define([AC_PROG_CC], - m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_CXX], - [_AM_DEPENDENCIES([CXX])], - [m4_define([AC_PROG_CXX], - m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl -AC_PROVIDE_IFELSE([AC_PROG_OBJC], - [_AM_DEPENDENCIES([OBJC])], - [m4_define([AC_PROG_OBJC], - m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl -dnl Support for Objective C++ was only introduced in Autoconf 2.65, -dnl but we still cater to Autoconf 2.62. -m4_ifdef([AC_PROG_OBJCXX], -[AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], - [_AM_DEPENDENCIES([OBJCXX])], - [m4_define([AC_PROG_OBJCXX], - m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])])dnl -]) -_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl -dnl The 'parallel-tests' driver may need to know about EXEEXT, so add the -dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro -dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. -AC_CONFIG_COMMANDS_PRE(dnl -[m4_provide_if([_AM_COMPILER_EXEEXT], - [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl -]) - -dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not -dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further -dnl mangled by Autoconf and run in a shell conditional statement. -m4_define([_AC_COMPILER_EXEEXT], -m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) - - -# When config.status generates a header, we must update the stamp-h file. -# This file resides in the same directory as the config header -# that is generated. The stamp files are numbered to have different names. - -# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the -# loop where config.status creates the headers, so we can generate -# our stamp files there. -AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], -[# Compute $1's index in $config_headers. -_am_arg=$1 -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) - -# Copyright (C) 2001-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 8 - -# AM_PROG_INSTALL_SH -# ------------------ -# Define $install_sh. -AC_DEFUN([AM_PROG_INSTALL_SH], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -if test x"${install_sh}" != 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 -AC_SUBST([install_sh])]) - -# Copyright (C) 2003-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# Check whether the underlying file-system supports filenames -# with a leading dot. For instance MS-DOS doesn't. -AC_DEFUN([AM_SET_LEADING_DOT], -[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 -AC_SUBST([am__leading_dot])]) - -# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- - -# Copyright (C) 1997-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 7 - -# AM_MISSING_PROG(NAME, PROGRAM) -# ------------------------------ -AC_DEFUN([AM_MISSING_PROG], -[AC_REQUIRE([AM_MISSING_HAS_RUN]) -$1=${$1-"${am_missing_run}$2"} -AC_SUBST($1)]) - - -# AM_MISSING_HAS_RUN -# ------------------ -# Define MISSING if not defined so far and test if it supports --run. -# If it does, set am_missing_run to use it, otherwise, to nothing. -AC_DEFUN([AM_MISSING_HAS_RUN], -[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([missing])dnl -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 --run true"; then - am_missing_run="$MISSING --run " -else - am_missing_run= - AC_MSG_WARN(['missing' script is too old or missing]) -fi -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 6 - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Check to make sure that the build environment is sane. -*- Autoconf -*- - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 9 - -# AM_SANITY_CHECK -# --------------- -AC_DEFUN([AM_SANITY_CHECK], -[AC_MSG_CHECKING([whether build environment is sane]) -# 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]]*) - AC_MSG_ERROR([unsafe absolute working directory name]);; -esac -case $srcdir in - *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) - AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; -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". - AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken - alias in your environment]) - 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 - AC_MSG_ERROR([newly created file is older than distributed files! -Check your system clock]) -fi -AC_MSG_RESULT([yes]) -# 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 -AC_CONFIG_COMMANDS_PRE( - [AC_MSG_CHECKING([that generated files are newer than configure]) - if test -n "$am_sleep_pid"; then - # Hide warnings about reused PIDs. - wait $am_sleep_pid 2>/dev/null - fi - AC_MSG_RESULT([done])]) -rm -f conftest.file -]) - -# Copyright (C) 2001-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 2 - -# AM_PROG_INSTALL_STRIP -# --------------------- -# One issue with vendor 'install' (even GNU) is that you can't -# specify the program used to strip binaries. This is especially -# annoying in cross-compiling environments, where the build's strip -# is unlikely to handle the host's binaries. -# Fortunately install-sh will honor a STRIPPROG variable, so we -# always use install-sh in "make install-strip", and initialize -# STRIPPROG with the value of the STRIP variable (set by the user). -AC_DEFUN([AM_PROG_INSTALL_STRIP], -[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl -# 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. -dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. -if test "$cross_compiling" != no; then - AC_CHECK_TOOL([STRIP], [strip], :) -fi -INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" -AC_SUBST([INSTALL_STRIP_PROGRAM])]) - -# Copyright (C) 2006-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 3 - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -# Check how to create a tarball. -*- Autoconf -*- - -# Copyright (C) 2004-2012 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# serial 3 - -# _AM_PROG_TAR(FORMAT) -# -------------------- -# Check how to create a tarball in format FORMAT. -# FORMAT should be one of 'v7', 'ustar', or 'pax'. -# -# Substitute a variable $(am__tar) that is a command -# writing to stdout a FORMAT-tarball containing the directory -# $tardir. -# tardir=directory && $(am__tar) > result.tar -# -# Substitute a variable $(am__untar) that extract such -# a tarball read from stdin. -# $(am__untar) < result.tar -AC_DEFUN([_AM_PROG_TAR], -[# Always define AMTAR for backward compatibility. Yes, it's still used -# in the wild :-( We should find a proper way to deprecate it ... -AC_SUBST([AMTAR], ['$${TAR-tar}']) -m4_if([$1], [v7], - [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], - [m4_case([$1], [ustar],, [pax],, - [m4_fatal([Unknown tar format])]) -AC_MSG_CHECKING([how to create a $1 tar archive]) -# Loop over all known methods to create a tar archive until one works. -_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' -_am_tools=${am_cv_prog_tar_$1-$_am_tools} -# Do not fold the above two line into one, because Tru64 sh and -# Solaris sh will not grok spaces in the rhs of '-'. -for _am_tool in $_am_tools -do - case $_am_tool in - gnutar) - for _am_tar in tar gnutar gtar; - do - AM_RUN_LOG([$_am_tar --version]) && break - done - am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' - am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' - am__untar="$_am_tar -xf -" - ;; - plaintar) - # Must skip GNU tar: if it does not support --format= it doesn't create - # ustar tarball either. - (tar --version) >/dev/null 2>&1 && continue - am__tar='tar chf - "$$tardir"' - am__tar_='tar chf - "$tardir"' - am__untar='tar xf -' - ;; - pax) - am__tar='pax -L -x $1 -w "$$tardir"' - am__tar_='pax -L -x $1 -w "$tardir"' - am__untar='pax -r' - ;; - cpio) - am__tar='find "$$tardir" -print | cpio -o -H $1 -L' - am__tar_='find "$tardir" -print | cpio -o -H $1 -L' - am__untar='cpio -i -H $1 -d' - ;; - none) - am__tar=false - am__tar_=false - am__untar=false - ;; - esac - - # If the value was cached, stop now. We just wanted to have am__tar - # and am__untar set. - test -n "${am_cv_prog_tar_$1}" && break - - # tar/untar a dummy directory, and stop if the command works - rm -rf conftest.dir - mkdir conftest.dir - echo GrepMe > conftest.dir/file - AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) - rm -rf conftest.dir - if test -s conftest.tar; then - AM_RUN_LOG([$am__untar /dev/null 2>&1 && break - fi -done -rm -rf conftest.dir - -AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) -AC_MSG_RESULT([$am_cv_prog_tar_$1])]) -AC_SUBST([am__tar]) -AC_SUBST([am__untar]) -]) # _AM_PROG_TAR - -m4_include([m4/custom.m4]) -m4_include([m4/jni.m4]) -m4_include([m4/libtool.m4]) -m4_include([m4/ltoptions.m4]) -m4_include([m4/ltsugar.m4]) -m4_include([m4/ltversion.m4]) -m4_include([m4/lt~obsolete.m4]) -m4_include([m4/osx-universal.m4]) diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ar-lib b/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ar-lib deleted file mode 100755 index 67f5f36f10..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ar-lib +++ /dev/null @@ -1,270 +0,0 @@ -#! /bin/sh -# Wrapper for Microsoft lib.exe - -me=ar-lib -scriptversion=2012-03-01.08; # UTC - -# Copyright (C) 2010-2012 Free Software Foundation, Inc. -# Written by Peter Rosin . -# -# 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 -# . - - -# func_error message -func_error () -{ - echo "$me: $1" 1>&2 - exit 1 -} - -file_conv= - -# func_file_conv build_file -# Convert a $build file to $host form and store it in $file -# Currently only supports Windows hosts. -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 in - 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_at_file at_file operation archive -# Iterate over all members in AT_FILE performing OPERATION on ARCHIVE -# for each of them. -# When interpreting the content of the @FILE, do NOT use func_file_conv, -# since the user would need to supply preconverted file names to -# binutils ar, at least for MinGW. -func_at_file () -{ - operation=$2 - archive=$3 - at_file_contents=`cat "$1"` - eval set x "$at_file_contents" - shift - - for member - do - $AR -NOLOGO $operation:"$member" "$archive" || exit $? - done -} - -case $1 in - '') - func_error "no command. Try '$0 --help' for more information." - ;; - -h | --h*) - cat <. -# -# 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. - - -# Originally written by Per Bothner. Please send patches (context -# diff format) to and include a ChangeLog -# entry. -# -# This script attempts to guess a canonical system name similar to -# config.sub. If it succeeds, it prints the system name on stdout, and -# exits with 0. Otherwise, it exits with 1. -# -# 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;hb=HEAD - -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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -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 - -# 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=`(/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 ;; - *) machine=${UNAME_MACHINE_ARCH}-unknown ;; - esac - # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. - case "${UNAME_MACHINE_ARCH}" in - 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 - # 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/[-_].*/\./'` - ;; - 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}" - exit ;; - *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` - echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${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 ;; - 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/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` - 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) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - esac - exit ;; - i*:CYGWIN*:*) - echo ${UNAME_MACHINE}-pc-cygwin - exit ;; - *:MINGW*:*) - echo ${UNAME_MACHINE}-pc-mingw32 - exit ;; - i*: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-gnu`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 '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu - exit ;; - i*86:Minix:*:*) - echo ${UNAME_MACHINE}-pc-minix - exit ;; - aarch64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - aarch64_be:Linux:*:*) - UNAME_MACHINE=aarch64_be - echo ${UNAME_MACHINE}-unknown-linux-gnu - 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="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu - else - if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep -q __ARM_PCS_VFP - then - echo ${UNAME_MACHINE}-unknown-linux-gnueabi - else - echo ${UNAME_MACHINE}-unknown-linux-gnueabihf - fi - fi - exit ;; - avr32*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - cris:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - crisv32:Linux:*:*) - echo ${UNAME_MACHINE}-axis-linux-gnu - exit ;; - frv:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - hexagon:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - i*86:Linux:*:*) - LIBC=gnu - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit ;; - ia64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m32r*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - m68*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - 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-gnu"; exit; } - ;; - or32:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - padre:Linux:*:*) - echo sparc-unknown-linux-gnu - exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu - 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-gnu ;; - PA8*) echo hppa2.0-unknown-linux-gnu ;; - *) echo hppa-unknown-linux-gnu ;; - esac - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - s390:Linux:*:* | s390x:Linux:*:*) - echo ${UNAME_MACHINE}-ibm-linux - exit ;; - sh64*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sh*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - sparc:Linux:*:* | sparc64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - tile*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - vax:Linux:*:*) - echo ${UNAME_MACHINE}-dec-linux-gnu - exit ;; - x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - exit ;; - xtensa*:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-gnu - 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 configury 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 ;; - 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 ;; - 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 - case $UNAME_PROCESSOR in - i386) - eval $set_cc_for_build - 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 - UNAME_PROCESSOR="x86_64" - fi - fi ;; - unknown) UNAME_PROCESSOR=powerpc ;; - esac - 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 ;; - *: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 ;; -esac - -#echo '(No uname command or uname output not recognized.)' 1>&2 -#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 - -eval $set_cc_for_build -cat >$dummy.c < -# include -#endif -main () -{ -#if defined (sony) -#if defined (MIPSEB) - /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, - I don't know.... */ - printf ("mips-sony-bsd\n"); exit (0); -#else -#include - printf ("m68k-sony-newsos%s\n", -#ifdef NEWSOS4 - "4" -#else - "" -#endif - ); exit (0); -#endif -#endif - -#if defined (__arm) && defined (__acorn) && defined (__unix) - printf ("arm-acorn-riscix\n"); exit (0); -#endif - -#if defined (hp300) && !defined (hpux) - printf ("m68k-hp-bsd\n"); exit (0); -#endif - -#if defined (NeXT) -#if !defined (__ARCHITECTURE__) -#define __ARCHITECTURE__ "m68k" -#endif - int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - if (version < 4) - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); - else - printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); - exit (0); -#endif - -#if defined (MULTIMAX) || defined (n16) -#if defined (UMAXV) - printf ("ns32k-encore-sysv\n"); exit (0); -#else -#if defined (CMU) - printf ("ns32k-encore-mach\n"); exit (0); -#else - printf ("ns32k-encore-bsd\n"); exit (0); -#endif -#endif -#endif - -#if defined (__386BSD__) - printf ("i386-pc-bsd\n"); exit (0); -#endif - -#if defined (sequent) -#if defined (i386) - printf ("i386-sequent-dynix\n"); exit (0); -#endif -#if defined (ns32000) - printf ("ns32k-sequent-dynix\n"); exit (0); -#endif -#endif - -#if defined (_SEQUENT_) - struct utsname un; - - uname(&un); - - if (strncmp(un.version, "V2", 2) == 0) { - printf ("i386-sequent-ptx2\n"); exit (0); - } - if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ - printf ("i386-sequent-ptx1\n"); exit (0); - } - printf ("i386-sequent-ptx\n"); exit (0); - -#endif - -#if defined (vax) -# if !defined (ultrix) -# include -# if defined (BSD) -# if BSD == 43 - printf ("vax-dec-bsd4.3\n"); exit (0); -# else -# if BSD == 199006 - printf ("vax-dec-bsd4.3reno\n"); exit (0); -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# endif -# else - printf ("vax-dec-bsd\n"); exit (0); -# endif -# else - printf ("vax-dec-ultrix\n"); exit (0); -# endif -#endif - -#if defined (alliant) && defined (i860) - printf ("i860-alliant-bsd\n"); exit (0); -#endif - - exit (1); -} -EOF - -$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && - { echo "$SYSTEM_NAME"; exit; } - -# Apollos put the system type in the environment. - -test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } - -# Convex versions that predate uname can use getsysinfo(1) - -if [ -x /usr/convex/getsysinfo ] -then - case `getsysinfo -f cpu_type` in - c1*) - echo c1-convex-bsd - exit ;; - c2*) - if getsysinfo -f scalar_acc - then echo c32-convex-bsd - else echo c2-convex-bsd - fi - exit ;; - c34*) - echo c34-convex-bsd - exit ;; - c38*) - echo c38-convex-bsd - exit ;; - c4*) - echo c4-convex-bsd - exit ;; - esac -fi - -cat >&2 < in order to provide the needed -information to handle your system. - -config.guess timestamp = $timestamp - -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` -/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: diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/config.sub b/java/leveldbjni/leveldbjni/src/main/native-package/autotools/config.sub deleted file mode 100755 index 59bb593f10..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/config.sub +++ /dev/null @@ -1,1779 +0,0 @@ -#! /bin/sh -# Configuration validation subroutine script. -# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -# 2011, 2012 Free Software Foundation, Inc. - -timestamp='2012-04-18' - -# This file is (in principle) common to ALL GNU software. -# The presence of a machine in this file suggests that SOME GNU software -# can handle that machine. It does not imply ALL GNU software can. -# -# 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 2 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. - - -# Please send patches to . Submit a context -# diff and a properly formatted GNU ChangeLog entry. -# -# 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;hb=HEAD - -# 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 - $0 [OPTION] 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, -2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 -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-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ - 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 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ - | be32 | be64 \ - | bfin \ - | c4x | clipper \ - | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ - | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ - | hexagon \ - | i370 | i860 | i960 | ia64 \ - | ip2k | iq2000 \ - | le32 | le64 \ - | lm32 \ - | m32c | m32r | m32rle | m68000 | m68k | m88k \ - | maxq | mb | microblaze | 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 \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipstx39 | mipstx39el \ - | mn10200 | mn10300 \ - | moxie \ - | mt \ - | msp430 \ - | nds32 | nds32le | nds32be \ - | nios | nios2 \ - | ns16k | ns32k \ - | open8 \ - | or32 \ - | pdp10 | pdp11 | pj | pjl \ - | powerpc | powerpc64 | powerpc64le | powerpcle \ - | pyramid \ - | rl78 | rx \ - | score \ - | 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 \ - | spu \ - | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ - | ubicom32 \ - | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ - | 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 - ;; - m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | 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-* \ - | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ - | avr-* | avr32-* \ - | be32-* | be64-* \ - | bfin-* | bs2000-* \ - | c[123]* | c30-* | [cjt]90-* | c4x-* \ - | clipper-* | craynv-* | cydra-* \ - | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ - | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ - | h8300-* | h8500-* \ - | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ - | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ - | ip2k-* | iq2000-* \ - | le32-* | le64-* \ - | lm32-* \ - | m32c-* | m32r-* | m32rle-* \ - | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ - | 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-* \ - | mipsisa64-* | mipsisa64el-* \ - | mipsisa64r2-* | mipsisa64r2el-* \ - | mipsisa64sb1-* | mipsisa64sb1el-* \ - | mipsisa64sr71k-* | mipsisa64sr71kel-* \ - | mipstx39-* | mipstx39el-* \ - | mmix-* \ - | mt-* \ - | msp430-* \ - | nds32-* | nds32le-* | nds32be-* \ - | nios-* | nios2-* \ - | none-* | np1-* | ns16k-* | ns32k-* \ - | open8-* \ - | orion-* \ - | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ - | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ - | pyramid-* \ - | 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-* \ - | 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 - ;; - 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 - ;; - 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 - ;; - 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 - ;; - mingw32) - basic_machine=i386-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 - ;; - msdos) - basic_machine=i386-pc - os=-msdos - ;; - ms1-*) - basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` - ;; - msys) - basic_machine=i386-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 - ;; - 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 | ppc-le | powerpc-little) - 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 | ppc64-le | powerpc64-little) - 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) - 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 - ;; - 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* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ - | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ - | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -openbsd* | -solidbsd* \ - | -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* \ - | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -linux-android* \ - | -linux-newlib* | -linux-uclibc* \ - | -uxpv* | -beos* | -mpeix* | -udk* \ - | -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*) - # 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 - ;; - -kaos*) - os=-kaos - ;; - -zvmoe) - os=-zvmoe - ;; - -dicos*) - os=-dicos - ;; - -nacl*) - ;; - -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 - ;; - 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 - ;; - *-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: diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/install-sh b/java/leveldbjni/leveldbjni/src/main/native-package/autotools/install-sh deleted file mode 100755 index 377bb8687f..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/install-sh +++ /dev/null @@ -1,527 +0,0 @@ -#!/bin/sh -# install - install a program, script, or datafile - -scriptversion=2011-11-20.07; # 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. - -nl=' -' -IFS=" "" $nl" - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit=${DOITPROG-} -if test -z "$doit"; then - doit_exec=exec -else - doit_exec=$doit -fi - -# 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_glob='?' -initialize_posix_glob=' - test "$posix_glob" != "?" || { - if (set -f) 2>/dev/null; then - posix_glob= - else - posix_glob=: - fi - } -' - -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 -no_target_directory= - -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 - *' '* | *' '* | *' -'* | *'*'* | *'?'* | *'['*) - echo "$0: invalid mode: $mode" >&2 - exit 1;; - esac - shift;; - - -o) chowncmd="$chownprog $2" - shift;; - - -s) stripcmd=$stripprog;; - - -t) dst_arg=$2 - # Protect names problematic for 'test' and other utilities. - case $dst_arg in - -* | [=\(\)!]) dst_arg=./$dst_arg;; - esac - shift;; - - -T) no_target_directory=true;; - - --version) echo "$0 $scriptversion"; exit $?;; - - --) shift - break;; - - -*) echo "$0: invalid option: $1" >&2 - exit 1;; - - *) break;; - esac - shift -done - -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 - 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 -n "$no_target_directory"; then - echo "$0: $dst_arg: Is a directory" >&2 - exit 1 - fi - dstdir=$dst - dst=$dstdir/`basename "$src"` - dstdir_status=0 - else - # Prefer dirname, but fall back on a substitute if dirname fails. - dstdir=` - (dirname "$dst") 2>/dev/null || - expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$dst" : 'X\(//\)[^/]' \| \ - X"$dst" : 'X\(//\)$' \| \ - X"$dst" : 'X\(/\)' \| . 2>/dev/null || - echo X"$dst" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q' - ` - - 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 - - eval "$initialize_posix_glob" - - oIFS=$IFS - IFS=/ - $posix_glob set -f - set fnord $dstdir - shift - $posix_glob 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` && - - eval "$initialize_posix_glob" && - $posix_glob set -f && - set X $old && old=:$2:$4:$5:$6 && - set X $new && new=:$2:$4:$5:$6 && - $posix_glob 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: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ltmain.sh b/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ltmain.sh deleted file mode 100644 index 63ae69dc6f..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/ltmain.sh +++ /dev/null @@ -1,9655 +0,0 @@ - -# libtool (GNU libtool) 2.4.2 -# Written by Gordon Matzigkeit , 1996 - -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, -# 2007, 2008, 2009, 2010, 2011 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. - -# GNU Libtool 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 of the License, or -# (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, -# or obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -# Usage: $progname [OPTION]... [MODE-ARG]... -# -# Provide generalized library-building support services. -# -# --config show all configuration variables -# --debug enable verbose shell tracing -# -n, --dry-run display commands without modifying any files -# --features display basic configuration information and exit -# --mode=MODE use operation mode MODE -# --preserve-dup-deps don't remove duplicate dependency libraries -# --quiet, --silent don't print informational messages -# --no-quiet, --no-silent -# print informational messages (default) -# --no-warn don't display warning messages -# --tag=TAG use configuration variables from tag TAG -# -v, --verbose print more informational messages than default -# --no-verbose don't print the extra informational messages -# --version print version information -# -h, --help, --help-all print short, long, or detailed help message -# -# MODE must be one of the following: -# -# clean remove files from the build directory -# compile compile a source file into a libtool object -# execute automatically set library path, then run a program -# finish complete the installation of libtool libraries -# install install libraries or executables -# link create a library or an executable -# uninstall remove libraries from an installed directory -# -# MODE-ARGS vary depending on the MODE. When passed as first option, -# `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. -# Try `$progname --help --mode=MODE' for a more detailed description of MODE. -# -# When reporting a bug, please describe a test case to reproduce it and -# include the following information: -# -# host-triplet: $host -# shell: $SHELL -# compiler: $LTCC -# compiler flags: $LTCFLAGS -# linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.4.2 -# automake: $automake_version -# autoconf: $autoconf_version -# -# Report bugs to . -# GNU libtool home page: . -# General help using GNU software: . - -PROGRAM=libtool -PACKAGE=libtool -VERSION=2.4.2 -TIMESTAMP="" -package_revision=1.3337 - -# Be Bourne compatible -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs 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 -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' -} - -# NLS nuisances: We save the old values to restore during execute mode. -lt_user_locale= -lt_safe_locale= -for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES -do - eval "if test \"\${$lt_var+set}\" = set; then - save_$lt_var=\$$lt_var - $lt_var=C - export $lt_var - lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\" - lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\" - fi" -done -LC_ALL=C -LANGUAGE=C -export LANGUAGE LC_ALL - -$lt_unset CDPATH - - -# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh -# is ksh but when the shell is invoked as "sh" and the current value of -# the _XPG environment variable is not equal to 1 (one), the special -# positional parameter $0, within a function call, is the name of the -# function. -progpath="$0" - - - -: ${CP="cp -f"} -test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} -: ${MAKE="make"} -: ${MKDIR="mkdir"} -: ${MV="mv -f"} -: ${RM="rm -f"} -: ${SHELL="${CONFIG_SHELL-/bin/sh}"} -: ${Xsed="$SED -e 1s/^X//"} - -# Global variables: -EXIT_SUCCESS=0 -EXIT_FAILURE=1 -EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. -EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. - -exit_status=$EXIT_SUCCESS - -# Make sure IFS has a sensible default -lt_nl=' -' -IFS=" $lt_nl" - -dirname="s,/[^/]*$,," -basename="s,^.*/,," - -# func_dirname file append nondir_replacement -# Compute the dirname of FILE. If nonempty, add APPEND to the result, -# otherwise set result to NONDIR_REPLACEMENT. -func_dirname () -{ - func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi -} # func_dirname may be replaced by extended shell implementation - - -# func_basename file -func_basename () -{ - func_basename_result=`$ECHO "${1}" | $SED "$basename"` -} # func_basename may be replaced by extended shell implementation - - -# func_dirname_and_basename file append nondir_replacement -# perform func_basename and func_dirname in a single function -# call: -# dirname: Compute the dirname of FILE. If nonempty, -# add APPEND to the result, otherwise set result -# to NONDIR_REPLACEMENT. -# value returned in "$func_dirname_result" -# basename: Compute filename of FILE. -# value retuned in "$func_basename_result" -# Implementation must be kept synchronized with func_dirname -# and func_basename. For efficiency, we do not delegate to -# those functions but instead duplicate the functionality here. -func_dirname_and_basename () -{ - # Extract subdirectory from the argument. - func_dirname_result=`$ECHO "${1}" | $SED -e "$dirname"` - if test "X$func_dirname_result" = "X${1}"; then - func_dirname_result="${3}" - else - func_dirname_result="$func_dirname_result${2}" - fi - func_basename_result=`$ECHO "${1}" | $SED -e "$basename"` -} # func_dirname_and_basename may be replaced by extended shell implementation - - -# func_stripname prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# func_strip_suffix prefix name -func_stripname () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname may be replaced by extended shell implementation - - -# These SED scripts presuppose an absolute path with a trailing slash. -pathcar='s,^/\([^/]*\).*$,\1,' -pathcdr='s,^/[^/]*,,' -removedotparts=':dotsl - s@/\./@/@g - t dotsl - s,/\.$,/,' -collapseslashes='s@/\{1,\}@/@g' -finalslash='s,/*$,/,' - -# func_normal_abspath PATH -# Remove doubled-up and trailing slashes, "." path components, -# and cancel out any ".." path components in PATH after making -# it an absolute path. -# value returned in "$func_normal_abspath_result" -func_normal_abspath () -{ - # Start from root dir and reassemble the path. - func_normal_abspath_result= - func_normal_abspath_tpath=$1 - func_normal_abspath_altnamespace= - case $func_normal_abspath_tpath in - "") - # Empty path, that just means $cwd. - func_stripname '' '/' "`pwd`" - func_normal_abspath_result=$func_stripname_result - return - ;; - # The next three entries are used to spot a run of precisely - # two leading slashes without using negated character classes; - # we take advantage of case's first-match behaviour. - ///*) - # Unusual form of absolute path, do nothing. - ;; - //*) - # Not necessarily an ordinary path; POSIX reserves leading '//' - # and for example Cygwin uses it to access remote file shares - # over CIFS/SMB, so we conserve a leading double slash if found. - func_normal_abspath_altnamespace=/ - ;; - /*) - # Absolute path, do nothing. - ;; - *) - # Relative path, prepend $cwd. - func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath - ;; - esac - # Cancel out all the simple stuff to save iterations. We also want - # the path to end with a slash for ease of parsing, so make sure - # there is one (and only one) here. - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` - while :; do - # Processed it all yet? - if test "$func_normal_abspath_tpath" = / ; then - # If we ascended to the root using ".." the result may be empty now. - if test -z "$func_normal_abspath_result" ; then - func_normal_abspath_result=/ - fi - break - fi - func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcar"` - func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ - -e "$pathcdr"` - # Figure out what to do with it - case $func_normal_abspath_tcomponent in - "") - # Trailing empty path component, ignore it. - ;; - ..) - # Parent dir; strip last assembled component from result. - func_dirname "$func_normal_abspath_result" - func_normal_abspath_result=$func_dirname_result - ;; - *) - # Actual path component, append it. - func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent - ;; - esac - done - # Restore leading double-slash if one was found on entry. - func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result -} - -# func_relative_path SRCDIR DSTDIR -# generates a relative path from SRCDIR to DSTDIR, with a trailing -# slash if non-empty, suitable for immediately appending a filename -# without needing to append a separator. -# value returned in "$func_relative_path_result" -func_relative_path () -{ - func_relative_path_result= - func_normal_abspath "$1" - func_relative_path_tlibdir=$func_normal_abspath_result - func_normal_abspath "$2" - func_relative_path_tbindir=$func_normal_abspath_result - - # Ascend the tree starting from libdir - while :; do - # check if we have found a prefix of bindir - case $func_relative_path_tbindir in - $func_relative_path_tlibdir) - # found an exact match - func_relative_path_tcancelled= - break - ;; - $func_relative_path_tlibdir*) - # found a matching prefix - func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" - func_relative_path_tcancelled=$func_stripname_result - if test -z "$func_relative_path_result"; then - func_relative_path_result=. - fi - break - ;; - *) - func_dirname $func_relative_path_tlibdir - func_relative_path_tlibdir=${func_dirname_result} - if test "x$func_relative_path_tlibdir" = x ; then - # Have to descend all the way to the root! - func_relative_path_result=../$func_relative_path_result - func_relative_path_tcancelled=$func_relative_path_tbindir - break - fi - func_relative_path_result=../$func_relative_path_result - ;; - esac - done - - # Now calculate path; take care to avoid doubling-up slashes. - func_stripname '' '/' "$func_relative_path_result" - func_relative_path_result=$func_stripname_result - func_stripname '/' '/' "$func_relative_path_tcancelled" - if test "x$func_stripname_result" != x ; then - func_relative_path_result=${func_relative_path_result}/${func_stripname_result} - fi - - # Normalisation. If bindir is libdir, return empty string, - # else relative path ending with a slash; either way, target - # file name can be directly appended. - if test ! -z "$func_relative_path_result"; then - func_stripname './' '' "$func_relative_path_result/" - func_relative_path_result=$func_stripname_result - fi -} - -# The name of this program: -func_dirname_and_basename "$progpath" -progname=$func_basename_result - -# Make sure we have an absolute path for reexecution: -case $progpath in - [\\/]*|[A-Za-z]:\\*) ;; - *[\\/]*) - progdir=$func_dirname_result - progdir=`cd "$progdir" && pwd` - progpath="$progdir/$progname" - ;; - *) - save_IFS="$IFS" - IFS=${PATH_SEPARATOR-:} - for progdir in $PATH; do - IFS="$save_IFS" - test -x "$progdir/$progname" && break - done - IFS="$save_IFS" - test -n "$progdir" || progdir=`pwd` - progpath="$progdir/$progname" - ;; -esac - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -Xsed="${SED}"' -e 1s/^X//' -sed_quote_subst='s/\([`"$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution that turns a string into a regex matching for the -# string literally. -sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' - -# Sed substitution that converts a w32 file name or path -# which contains forward slashes, into one that contains -# (escaped) backslashes. A very naive implementation. -lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' - -# Re-`\' parameter expansions in output of double_quote_subst that were -# `\'-ed in input to the same. If an odd number of `\' preceded a '$' -# in input to double_quote_subst, that '$' was protected from expansion. -# Since each input `\' is now two `\'s, look for any number of runs of -# four `\'s followed by two `\'s and then a '$'. `\' that '$'. -bs='\\' -bs2='\\\\' -bs4='\\\\\\\\' -dollar='\$' -sed_double_backslash="\ - s/$bs4/&\\ -/g - s/^$bs2$dollar/$bs&/ - s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g - s/\n//g" - -# Standard options: -opt_dry_run=false -opt_help=false -opt_quiet=false -opt_verbose=false -opt_warning=: - -# func_echo arg... -# Echo program name prefixed message, along with the current mode -# name if it has been set yet. -func_echo () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }$*" -} - -# func_verbose arg... -# Echo program name prefixed message in verbose mode only. -func_verbose () -{ - $opt_verbose && func_echo ${1+"$@"} - - # A bug in bash halts the script if the last line of a function - # fails when set -e is in force, so we need another command to - # work around that: - : -} - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -# func_error arg... -# Echo program name prefixed message to standard error. -func_error () -{ - $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 -} - -# func_warning arg... -# Echo program name prefixed warning message to standard error. -func_warning () -{ - $opt_warning && $ECHO "$progname: ${opt_mode+$opt_mode: }warning: "${1+"$@"} 1>&2 - - # bash bug again: - : -} - -# func_fatal_error arg... -# Echo program name prefixed message to standard error, and exit. -func_fatal_error () -{ - func_error ${1+"$@"} - exit $EXIT_FAILURE -} - -# func_fatal_help arg... -# Echo program name prefixed message to standard error, followed by -# a help hint, and exit. -func_fatal_help () -{ - func_error ${1+"$@"} - func_fatal_error "$help" -} -help="Try \`$progname --help' for more information." ## default - - -# func_grep expression filename -# Check whether EXPRESSION matches any line of FILENAME, without output. -func_grep () -{ - $GREP "$1" "$2" >/dev/null 2>&1 -} - - -# func_mkdir_p directory-path -# Make sure the entire path to DIRECTORY-PATH is available. -func_mkdir_p () -{ - my_directory_path="$1" - my_dir_list= - - if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then - - # Protect directory names starting with `-' - case $my_directory_path in - -*) my_directory_path="./$my_directory_path" ;; - esac - - # While some portion of DIR does not yet exist... - while test ! -d "$my_directory_path"; do - # ...make a list in topmost first order. Use a colon delimited - # list incase some portion of path contains whitespace. - my_dir_list="$my_directory_path:$my_dir_list" - - # If the last portion added has no slash in it, the list is done - case $my_directory_path in */*) ;; *) break ;; esac - - # ...otherwise throw away the child directory and loop - my_directory_path=`$ECHO "$my_directory_path" | $SED -e "$dirname"` - done - my_dir_list=`$ECHO "$my_dir_list" | $SED 's,:*$,,'` - - save_mkdir_p_IFS="$IFS"; IFS=':' - for my_dir in $my_dir_list; do - IFS="$save_mkdir_p_IFS" - # mkdir can fail with a `File exist' error if two processes - # try to create one of the directories concurrently. Don't - # stop in that case! - $MKDIR "$my_dir" 2>/dev/null || : - done - IFS="$save_mkdir_p_IFS" - - # Bail out if we (or some other process) failed to create a directory. - test -d "$my_directory_path" || \ - func_fatal_error "Failed to create \`$1'" - fi -} - - -# func_mktempdir [string] -# Make a temporary directory that won't clash with other running -# libtool processes, and avoids race conditions if possible. If -# given, STRING is the basename for that directory. -func_mktempdir () -{ - my_template="${TMPDIR-/tmp}/${1-$progname}" - - if test "$opt_dry_run" = ":"; then - # Return a directory name, but don't create it in dry-run mode - my_tmpdir="${my_template}-$$" - else - - # If mktemp works, use that first and foremost - my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null` - - if test ! -d "$my_tmpdir"; then - # Failing that, at least try and use $RANDOM to avoid a race - my_tmpdir="${my_template}-${RANDOM-0}$$" - - save_mktempdir_umask=`umask` - umask 0077 - $MKDIR "$my_tmpdir" - umask $save_mktempdir_umask - fi - - # If we're not in dry-run mode, bomb out on failure - test -d "$my_tmpdir" || \ - func_fatal_error "cannot create temporary directory \`$my_tmpdir'" - fi - - $ECHO "$my_tmpdir" -} - - -# func_quote_for_eval arg -# Aesthetically quote ARG to be evaled later. -# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT -# is double-quoted, suitable for a subsequent eval, whereas -# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters -# which are still active within double quotes backslashified. -func_quote_for_eval () -{ - case $1 in - *[\\\`\"\$]*) - func_quote_for_eval_unquoted_result=`$ECHO "$1" | $SED "$sed_quote_subst"` ;; - *) - func_quote_for_eval_unquoted_result="$1" ;; - esac - - case $func_quote_for_eval_unquoted_result in - # Double-quote args containing shell metacharacters to delay - # word splitting, command substitution and and variable - # expansion for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\"" - ;; - *) - func_quote_for_eval_result="$func_quote_for_eval_unquoted_result" - esac -} - - -# func_quote_for_expand arg -# Aesthetically quote ARG to be evaled later; same as above, -# but do not quote variable references. -func_quote_for_expand () -{ - case $1 in - *[\\\`\"]*) - my_arg=`$ECHO "$1" | $SED \ - -e "$double_quote_subst" -e "$sed_double_backslash"` ;; - *) - my_arg="$1" ;; - esac - - case $my_arg in - # Double-quote args containing shell metacharacters to delay - # word splitting and command substitution for a subsequent eval. - # Many Bourne shells cannot handle close brackets correctly - # in scan sets, so we specify it separately. - *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") - my_arg="\"$my_arg\"" - ;; - esac - - func_quote_for_expand_result="$my_arg" -} - - -# func_show_eval cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. -func_show_eval () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$my_cmd" - my_status=$? - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - - -# func_show_eval_locale cmd [fail_exp] -# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is -# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP -# is given, then evaluate it. Use the saved locale for evaluation. -func_show_eval_locale () -{ - my_cmd="$1" - my_fail_exp="${2-:}" - - ${opt_silent-false} || { - func_quote_for_expand "$my_cmd" - eval "func_echo $func_quote_for_expand_result" - } - - if ${opt_dry_run-false}; then :; else - eval "$lt_user_locale - $my_cmd" - my_status=$? - eval "$lt_safe_locale" - if test "$my_status" -eq 0; then :; else - eval "(exit $my_status); $my_fail_exp" - fi - fi -} - -# func_tr_sh -# Turn $1 into a string suitable for a shell variable name. -# Result is stored in $func_tr_sh_result. All characters -# not in the set a-zA-Z0-9_ are replaced with '_'. Further, -# if $1 begins with a digit, a '_' is prepended as well. -func_tr_sh () -{ - case $1 in - [0-9]* | *[!a-zA-Z0-9_]*) - func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` - ;; - * ) - func_tr_sh_result=$1 - ;; - esac -} - - -# func_version -# Echo version message to standard output and exit. -func_version () -{ - $opt_debug - - $SED -n '/(C)/!b go - :more - /\./!{ - N - s/\n# / / - b more - } - :go - /^# '$PROGRAM' (GNU /,/# warranty; / { - s/^# // - s/^# *$// - s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/ - p - }' < "$progpath" - exit $? -} - -# func_usage -# Echo short help message to standard output and exit. -func_usage () -{ - $opt_debug - - $SED -n '/^# Usage:/,/^# *.*--help/ { - s/^# // - s/^# *$// - s/\$progname/'$progname'/ - p - }' < "$progpath" - echo - $ECHO "run \`$progname --help | more' for full usage" - exit $? -} - -# func_help [NOEXIT] -# Echo long help message to standard output and exit, -# unless 'noexit' is passed as argument. -func_help () -{ - $opt_debug - - $SED -n '/^# Usage:/,/# Report bugs to/ { - :print - s/^# // - s/^# *$// - s*\$progname*'$progname'* - s*\$host*'"$host"'* - s*\$SHELL*'"$SHELL"'* - s*\$LTCC*'"$LTCC"'* - s*\$LTCFLAGS*'"$LTCFLAGS"'* - s*\$LD*'"$LD"'* - s/\$with_gnu_ld/'"$with_gnu_ld"'/ - s/\$automake_version/'"`(${AUTOMAKE-automake} --version) 2>/dev/null |$SED 1q`"'/ - s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ - p - d - } - /^# .* home page:/b print - /^# General help using/b print - ' < "$progpath" - ret=$? - if test -z "$1"; then - exit $ret - fi -} - -# func_missing_arg argname -# Echo program name prefixed message to standard error and set global -# exit_cmd. -func_missing_arg () -{ - $opt_debug - - func_error "missing argument for $1." - exit_cmd=exit -} - - -# func_split_short_opt shortopt -# Set func_split_short_opt_name and func_split_short_opt_arg shell -# variables after splitting SHORTOPT after the 2nd character. -func_split_short_opt () -{ - my_sed_short_opt='1s/^\(..\).*$/\1/;q' - my_sed_short_rest='1s/^..\(.*\)$/\1/;q' - - func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` - func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` -} # func_split_short_opt may be replaced by extended shell implementation - - -# func_split_long_opt longopt -# Set func_split_long_opt_name and func_split_long_opt_arg shell -# variables after splitting LONGOPT at the `=' sign. -func_split_long_opt () -{ - my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' - my_sed_long_arg='1s/^--[^=]*=//' - - func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` - func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` -} # func_split_long_opt may be replaced by extended shell implementation - -exit_cmd=: - - - - - -magic="%%%MAGIC variable%%%" -magic_exe="%%%MAGIC EXE variable%%%" - -# Global variables. -nonopt= -preserve_args= -lo2o="s/\\.lo\$/.${objext}/" -o2lo="s/\\.${objext}\$/.lo/" -extracted_archives= -extracted_serial=0 - -# If this variable is set in any of the actions, the command in it -# will be execed at the end. This prevents here-documents from being -# left over by shells. -exec_cmd= - -# func_append var value -# Append VALUE to the end of shell variable VAR. -func_append () -{ - eval "${1}=\$${1}\${2}" -} # func_append may be replaced by extended shell implementation - -# func_append_quoted var value -# Quote VALUE and append to the end of shell variable VAR, separated -# by a space. -func_append_quoted () -{ - func_quote_for_eval "${2}" - eval "${1}=\$${1}\\ \$func_quote_for_eval_result" -} # func_append_quoted may be replaced by extended shell implementation - - -# func_arith arithmetic-term... -func_arith () -{ - func_arith_result=`expr "${@}"` -} # func_arith may be replaced by extended shell implementation - - -# func_len string -# STRING may not start with a hyphen. -func_len () -{ - func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` -} # func_len may be replaced by extended shell implementation - - -# func_lo2o object -func_lo2o () -{ - func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` -} # func_lo2o may be replaced by extended shell implementation - - -# func_xform libobj-or-source -func_xform () -{ - func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` -} # func_xform may be replaced by extended shell implementation - - -# func_fatal_configuration arg... -# Echo program name prefixed message to standard error, followed by -# a configuration failure hint, and exit. -func_fatal_configuration () -{ - func_error ${1+"$@"} - func_error "See the $PACKAGE documentation for more information." - func_fatal_error "Fatal configuration error." -} - - -# func_config -# Display the configuration for all the tags in this script. -func_config () -{ - re_begincf='^# ### BEGIN LIBTOOL' - re_endcf='^# ### END LIBTOOL' - - # Default configuration. - $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" - - # Now print the configurations for the tags. - for tagname in $taglist; do - $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" - done - - exit $? -} - -# func_features -# Display the features supported by this script. -func_features () -{ - echo "host: $host" - if test "$build_libtool_libs" = yes; then - echo "enable shared libraries" - else - echo "disable shared libraries" - fi - if test "$build_old_libs" = yes; then - echo "enable static libraries" - else - echo "disable static libraries" - fi - - exit $? -} - -# func_enable_tag tagname -# Verify that TAGNAME is valid, and either flag an error and exit, or -# enable the TAGNAME tag. We also add TAGNAME to the global $taglist -# variable here. -func_enable_tag () -{ - # Global variable: - tagname="$1" - - re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" - re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" - sed_extractcf="/$re_begincf/,/$re_endcf/p" - - # Validate tagname. - case $tagname in - *[!-_A-Za-z0-9,/]*) - func_fatal_error "invalid tag name: $tagname" - ;; - esac - - # Don't test for the "default" C tag, as we know it's - # there but not specially marked. - case $tagname in - CC) ;; - *) - if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then - taglist="$taglist $tagname" - - # Evaluate the configuration. Be careful to quote the path - # and the sed script, to avoid splitting on whitespace, but - # also don't use non-portable quotes within backquotes within - # quotes we have to do it in 2 steps: - extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` - eval "$extractedcf" - else - func_error "ignoring unknown tag $tagname" - fi - ;; - esac -} - -# func_check_version_match -# Ensure that we are using m4 macros, and libtool script from the same -# release of libtool. -func_check_version_match () -{ - if test "$package_revision" != "$macro_revision"; then - if test "$VERSION" != "$macro_version"; then - if test -z "$macro_version"; then - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from an older release. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, but the -$progname: definition of this LT_INIT comes from $PACKAGE $macro_version. -$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION -$progname: and run autoconf again. -_LT_EOF - fi - else - cat >&2 <<_LT_EOF -$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, -$progname: but the definition of this LT_INIT comes from revision $macro_revision. -$progname: You should recreate aclocal.m4 with macros from revision $package_revision -$progname: of $PACKAGE $VERSION and run autoconf again. -_LT_EOF - fi - - exit $EXIT_MISMATCH - fi -} - - -# Shorthand for --mode=foo, only valid as the first argument -case $1 in -clean|clea|cle|cl) - shift; set dummy --mode clean ${1+"$@"}; shift - ;; -compile|compil|compi|comp|com|co|c) - shift; set dummy --mode compile ${1+"$@"}; shift - ;; -execute|execut|execu|exec|exe|ex|e) - shift; set dummy --mode execute ${1+"$@"}; shift - ;; -finish|finis|fini|fin|fi|f) - shift; set dummy --mode finish ${1+"$@"}; shift - ;; -install|instal|insta|inst|ins|in|i) - shift; set dummy --mode install ${1+"$@"}; shift - ;; -link|lin|li|l) - shift; set dummy --mode link ${1+"$@"}; shift - ;; -uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) - shift; set dummy --mode uninstall ${1+"$@"}; shift - ;; -esac - - - -# Option defaults: -opt_debug=: -opt_dry_run=false -opt_config=false -opt_preserve_dup_deps=false -opt_features=false -opt_finish=false -opt_help=false -opt_help_all=false -opt_silent=: -opt_warning=: -opt_verbose=: -opt_silent=false -opt_verbose=false - - -# Parse options once, thoroughly. This comes as soon as possible in the -# script to make things like `--version' happen as quickly as we can. -{ - # this just eases exit handling - while test $# -gt 0; do - opt="$1" - shift - case $opt in - --debug|-x) opt_debug='set -x' - func_echo "enabling shell trace mode" - $opt_debug - ;; - --dry-run|--dryrun|-n) - opt_dry_run=: - ;; - --config) - opt_config=: -func_config - ;; - --dlopen|-dlopen) - optarg="$1" - opt_dlopen="${opt_dlopen+$opt_dlopen -}$optarg" - shift - ;; - --preserve-dup-deps) - opt_preserve_dup_deps=: - ;; - --features) - opt_features=: -func_features - ;; - --finish) - opt_finish=: -set dummy --mode finish ${1+"$@"}; shift - ;; - --help) - opt_help=: - ;; - --help-all) - opt_help_all=: -opt_help=': help-all' - ;; - --mode) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_mode="$optarg" -case $optarg in - # Valid mode arguments: - clean|compile|execute|finish|install|link|relink|uninstall) ;; - - # Catch anything else as an error - *) func_error "invalid argument for $opt" - exit_cmd=exit - break - ;; -esac - shift - ;; - --no-silent|--no-quiet) - opt_silent=false -func_append preserve_args " $opt" - ;; - --no-warning|--no-warn) - opt_warning=false -func_append preserve_args " $opt" - ;; - --no-verbose) - opt_verbose=false -func_append preserve_args " $opt" - ;; - --silent|--quiet) - opt_silent=: -func_append preserve_args " $opt" - opt_verbose=false - ;; - --verbose|-v) - opt_verbose=: -func_append preserve_args " $opt" -opt_silent=false - ;; - --tag) - test $# = 0 && func_missing_arg $opt && break - optarg="$1" - opt_tag="$optarg" -func_append preserve_args " $opt $optarg" -func_enable_tag "$optarg" - shift - ;; - - -\?|-h) func_usage ;; - --help) func_help ;; - --version) func_version ;; - - # Separate optargs to long options: - --*=*) - func_split_long_opt "$opt" - set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} - shift - ;; - - # Separate non-argument short options: - -\?*|-h*|-n*|-v*) - func_split_short_opt "$opt" - set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} - shift - ;; - - --) break ;; - -*) func_fatal_help "unrecognized option \`$opt'" ;; - *) set dummy "$opt" ${1+"$@"}; shift; break ;; - esac - done - - # Validate options: - - # save first non-option argument - if test "$#" -gt 0; then - nonopt="$opt" - shift - fi - - # preserve --debug - test "$opt_debug" = : || func_append preserve_args " --debug" - - case $host in - *cygwin* | *mingw* | *pw32* | *cegcc*) - # don't eliminate duplications in $postdeps and $predeps - opt_duplicate_compiler_generated_deps=: - ;; - *) - opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps - ;; - esac - - $opt_help || { - # Sanity checks first: - func_check_version_match - - if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then - func_fatal_configuration "not configured to build any kind of library" - fi - - # Darwin sucks - eval std_shrext=\"$shrext_cmds\" - - # Only execute mode is allowed to have -dlopen flags. - if test -n "$opt_dlopen" && test "$opt_mode" != execute; then - func_error "unrecognized option \`-dlopen'" - $ECHO "$help" 1>&2 - exit $EXIT_FAILURE - fi - - # Change the help message to a mode-specific one. - generic_help="$help" - help="Try \`$progname --help --mode=$opt_mode' for more information." - } - - - # Bail if the options were screwed - $exit_cmd $EXIT_FAILURE -} - - - - -## ----------- ## -## Main. ## -## ----------- ## - -# func_lalib_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_lalib_p () -{ - test -f "$1" && - $SED -e 4q "$1" 2>/dev/null \ - | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 -} - -# func_lalib_unsafe_p file -# True iff FILE is a libtool `.la' library or `.lo' object file. -# This function implements the same check as func_lalib_p without -# resorting to external programs. To this end, it redirects stdin and -# closes it afterwards, without saving the original file descriptor. -# As a safety measure, use it only where a negative result would be -# fatal anyway. Works if `file' does not exist. -func_lalib_unsafe_p () -{ - lalib_p=no - if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then - for lalib_p_l in 1 2 3 4 - do - read lalib_p_line - case "$lalib_p_line" in - \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; - esac - done - exec 0<&5 5<&- - fi - test "$lalib_p" = yes -} - -# func_ltwrapper_script_p file -# True iff FILE is a libtool wrapper script -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_script_p () -{ - func_lalib_p "$1" -} - -# func_ltwrapper_executable_p file -# True iff FILE is a libtool wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_executable_p () -{ - func_ltwrapper_exec_suffix= - case $1 in - *.exe) ;; - *) func_ltwrapper_exec_suffix=.exe ;; - esac - $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 -} - -# func_ltwrapper_scriptname file -# Assumes file is an ltwrapper_executable -# uses $file to determine the appropriate filename for a -# temporary ltwrapper_script. -func_ltwrapper_scriptname () -{ - func_dirname_and_basename "$1" "" "." - func_stripname '' '.exe' "$func_basename_result" - func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" -} - -# func_ltwrapper_p file -# True iff FILE is a libtool wrapper script or wrapper executable -# This function is only a basic sanity check; it will hardly flush out -# determined imposters. -func_ltwrapper_p () -{ - func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" -} - - -# func_execute_cmds commands fail_cmd -# Execute tilde-delimited COMMANDS. -# If FAIL_CMD is given, eval that upon failure. -# FAIL_CMD may read-access the current command in variable CMD! -func_execute_cmds () -{ - $opt_debug - save_ifs=$IFS; IFS='~' - for cmd in $1; do - IFS=$save_ifs - eval cmd=\"$cmd\" - func_show_eval "$cmd" "${2-:}" - done - IFS=$save_ifs -} - - -# func_source file -# Source FILE, adding directory component if necessary. -# Note that it is not necessary on cygwin/mingw to append a dot to -# FILE even if both FILE and FILE.exe exist: automatic-append-.exe -# behavior happens only for exec(3), not for open(2)! Also, sourcing -# `FILE.' does not work on cygwin managed mounts. -func_source () -{ - $opt_debug - case $1 in - */* | *\\*) . "$1" ;; - *) . "./$1" ;; - esac -} - - -# func_resolve_sysroot PATH -# Replace a leading = in PATH with a sysroot. Store the result into -# func_resolve_sysroot_result -func_resolve_sysroot () -{ - func_resolve_sysroot_result=$1 - case $func_resolve_sysroot_result in - =*) - func_stripname '=' '' "$func_resolve_sysroot_result" - func_resolve_sysroot_result=$lt_sysroot$func_stripname_result - ;; - esac -} - -# func_replace_sysroot PATH -# If PATH begins with the sysroot, replace it with = and -# store the result into func_replace_sysroot_result. -func_replace_sysroot () -{ - case "$lt_sysroot:$1" in - ?*:"$lt_sysroot"*) - func_stripname "$lt_sysroot" '' "$1" - func_replace_sysroot_result="=$func_stripname_result" - ;; - *) - # Including no sysroot. - func_replace_sysroot_result=$1 - ;; - esac -} - -# func_infer_tag arg -# Infer tagged configuration to use if any are available and -# if one wasn't chosen via the "--tag" command line option. -# Only attempt this if the compiler in the base compile -# command doesn't match the default compiler. -# arg is usually of the form 'gcc ...' -func_infer_tag () -{ - $opt_debug - if test -n "$available_tags" && test -z "$tagname"; then - CC_quoted= - for arg in $CC; do - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case $@ in - # Blanks in the command may have been stripped by the calling shell, - # but not from the CC environment variable when configure was run. - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; - # Blanks at the start of $base_compile will cause this to fail - # if we don't check for them as well. - *) - for z in $available_tags; do - if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then - # Evaluate the configuration. - eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" - CC_quoted= - for arg in $CC; do - # Double-quote args containing other shell metacharacters. - func_append_quoted CC_quoted "$arg" - done - CC_expanded=`func_echo_all $CC` - CC_quoted_expanded=`func_echo_all $CC_quoted` - case "$@ " in - " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ - " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) - # The compiler in the base compile command matches - # the one in the tagged configuration. - # Assume this is the tagged configuration we want. - tagname=$z - break - ;; - esac - fi - done - # If $tagname still isn't set, then no tagged configuration - # was found and let the user know that the "--tag" command - # line option must be used. - if test -z "$tagname"; then - func_echo "unable to infer tagged configuration" - func_fatal_error "specify a tag with \`--tag'" -# else -# func_verbose "using $tagname tagged configuration" - fi - ;; - esac - fi -} - - - -# func_write_libtool_object output_name pic_name nonpic_name -# Create a libtool object file (analogous to a ".la" file), -# but don't create it if we're doing a dry run. -func_write_libtool_object () -{ - write_libobj=${1} - if test "$build_libtool_libs" = yes; then - write_lobj=\'${2}\' - else - write_lobj=none - fi - - if test "$build_old_libs" = yes; then - write_oldobj=\'${3}\' - else - write_oldobj=none - fi - - $opt_dry_run || { - cat >${write_libobj}T </dev/null` - if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then - func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | - $SED -e "$lt_sed_naive_backslashify"` - else - func_convert_core_file_wine_to_w32_result= - fi - fi -} -# end: func_convert_core_file_wine_to_w32 - - -# func_convert_core_path_wine_to_w32 ARG -# Helper function used by path conversion functions when $build is *nix, and -# $host is mingw, cygwin, or some other w32 environment. Relies on a correctly -# configured wine environment available, with the winepath program in $build's -# $PATH. Assumes ARG has no leading or trailing path separator characters. -# -# ARG is path to be converted from $build format to win32. -# Result is available in $func_convert_core_path_wine_to_w32_result. -# Unconvertible file (directory) names in ARG are skipped; if no directory names -# are convertible, then the result may be empty. -func_convert_core_path_wine_to_w32 () -{ - $opt_debug - # unfortunately, winepath doesn't convert paths, only file names - func_convert_core_path_wine_to_w32_result="" - if test -n "$1"; then - oldIFS=$IFS - IFS=: - for func_convert_core_path_wine_to_w32_f in $1; do - IFS=$oldIFS - func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" - if test -n "$func_convert_core_file_wine_to_w32_result" ; then - if test -z "$func_convert_core_path_wine_to_w32_result"; then - func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" - else - func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" - fi - fi - done - IFS=$oldIFS - fi -} -# end: func_convert_core_path_wine_to_w32 - - -# func_cygpath ARGS... -# Wrapper around calling the cygpath program via LT_CYGPATH. This is used when -# when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) -# $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or -# (2), returns the Cygwin file name or path in func_cygpath_result (input -# file name or path is assumed to be in w32 format, as previously converted -# from $build's *nix or MSYS format). In case (3), returns the w32 file name -# or path in func_cygpath_result (input file name or path is assumed to be in -# Cygwin format). Returns an empty string on error. -# -# ARGS are passed to cygpath, with the last one being the file name or path to -# be converted. -# -# Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH -# environment variable; do not put it in $PATH. -func_cygpath () -{ - $opt_debug - if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then - func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` - if test "$?" -ne 0; then - # on failure, ensure result is empty - func_cygpath_result= - fi - else - func_cygpath_result= - func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" - fi -} -#end: func_cygpath - - -# func_convert_core_msys_to_w32 ARG -# Convert file name or path ARG from MSYS format to w32 format. Return -# result in func_convert_core_msys_to_w32_result. -func_convert_core_msys_to_w32 () -{ - $opt_debug - # awkward: cmd appends spaces to result - func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | - $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` -} -#end: func_convert_core_msys_to_w32 - - -# func_convert_file_check ARG1 ARG2 -# Verify that ARG1 (a file name in $build format) was converted to $host -# format in ARG2. Otherwise, emit an error message, but continue (resetting -# func_to_host_file_result to ARG1). -func_convert_file_check () -{ - $opt_debug - if test -z "$2" && test -n "$1" ; then - func_error "Could not determine host file name corresponding to" - func_error " \`$1'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback: - func_to_host_file_result="$1" - fi -} -# end func_convert_file_check - - -# func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH -# Verify that FROM_PATH (a path in $build format) was converted to $host -# format in TO_PATH. Otherwise, emit an error message, but continue, resetting -# func_to_host_file_result to a simplistic fallback value (see below). -func_convert_path_check () -{ - $opt_debug - if test -z "$4" && test -n "$3"; then - func_error "Could not determine the host path corresponding to" - func_error " \`$3'" - func_error "Continuing, but uninstalled executables may not work." - # Fallback. This is a deliberately simplistic "conversion" and - # should not be "improved". See libtool.info. - if test "x$1" != "x$2"; then - lt_replace_pathsep_chars="s|$1|$2|g" - func_to_host_path_result=`echo "$3" | - $SED -e "$lt_replace_pathsep_chars"` - else - func_to_host_path_result="$3" - fi - fi -} -# end func_convert_path_check - - -# func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG -# Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT -# and appending REPL if ORIG matches BACKPAT. -func_convert_path_front_back_pathsep () -{ - $opt_debug - case $4 in - $1 ) func_to_host_path_result="$3$func_to_host_path_result" - ;; - esac - case $4 in - $2 ) func_append func_to_host_path_result "$3" - ;; - esac -} -# end func_convert_path_front_back_pathsep - - -################################################## -# $build to $host FILE NAME CONVERSION FUNCTIONS # -################################################## -# invoked via `$to_host_file_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# Result will be available in $func_to_host_file_result. - - -# func_to_host_file ARG -# Converts the file name ARG from $build format to $host format. Return result -# in func_to_host_file_result. -func_to_host_file () -{ - $opt_debug - $to_host_file_cmd "$1" -} -# end func_to_host_file - - -# func_to_tool_file ARG LAZY -# converts the file name ARG from $build format to toolchain format. Return -# result in func_to_tool_file_result. If the conversion in use is listed -# in (the comma separated) LAZY, no conversion takes place. -func_to_tool_file () -{ - $opt_debug - case ,$2, in - *,"$to_tool_file_cmd",*) - func_to_tool_file_result=$1 - ;; - *) - $to_tool_file_cmd "$1" - func_to_tool_file_result=$func_to_host_file_result - ;; - esac -} -# end func_to_tool_file - - -# func_convert_file_noop ARG -# Copy ARG to func_to_host_file_result. -func_convert_file_noop () -{ - func_to_host_file_result="$1" -} -# end func_convert_file_noop - - -# func_convert_file_msys_to_w32 ARG -# Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_file_result. -func_convert_file_msys_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_to_host_file_result="$func_convert_core_msys_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_w32 - - -# func_convert_file_cygwin_to_w32 ARG -# Convert file name ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_file_cygwin_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # because $build is cygwin, we call "the" cygpath in $PATH; no need to use - # LT_CYGPATH in this case. - func_to_host_file_result=`cygpath -m "$1"` - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_cygwin_to_w32 - - -# func_convert_file_nix_to_w32 ARG -# Convert file name ARG from *nix to w32 format. Requires a wine environment -# and a working winepath. Returns result in func_to_host_file_result. -func_convert_file_nix_to_w32 () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_file_wine_to_w32 "$1" - func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_w32 - - -# func_convert_file_msys_to_cygwin ARG -# Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_file_msys_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - func_convert_core_msys_to_w32 "$1" - func_cygpath -u "$func_convert_core_msys_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_msys_to_cygwin - - -# func_convert_file_nix_to_cygwin ARG -# Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed -# in a wine environment, working winepath, and LT_CYGPATH set. Returns result -# in func_to_host_file_result. -func_convert_file_nix_to_cygwin () -{ - $opt_debug - func_to_host_file_result="$1" - if test -n "$1"; then - # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. - func_convert_core_file_wine_to_w32 "$1" - func_cygpath -u "$func_convert_core_file_wine_to_w32_result" - func_to_host_file_result="$func_cygpath_result" - fi - func_convert_file_check "$1" "$func_to_host_file_result" -} -# end func_convert_file_nix_to_cygwin - - -############################################# -# $build to $host PATH CONVERSION FUNCTIONS # -############################################# -# invoked via `$to_host_path_cmd ARG' -# -# In each case, ARG is the path to be converted from $build to $host format. -# The result will be available in $func_to_host_path_result. -# -# Path separators are also converted from $build format to $host format. If -# ARG begins or ends with a path separator character, it is preserved (but -# converted to $host format) on output. -# -# All path conversion functions are named using the following convention: -# file name conversion function : func_convert_file_X_to_Y () -# path conversion function : func_convert_path_X_to_Y () -# where, for any given $build/$host combination the 'X_to_Y' value is the -# same. If conversion functions are added for new $build/$host combinations, -# the two new functions must follow this pattern, or func_init_to_host_path_cmd -# will break. - - -# func_init_to_host_path_cmd -# Ensures that function "pointer" variable $to_host_path_cmd is set to the -# appropriate value, based on the value of $to_host_file_cmd. -to_host_path_cmd= -func_init_to_host_path_cmd () -{ - $opt_debug - if test -z "$to_host_path_cmd"; then - func_stripname 'func_convert_file_' '' "$to_host_file_cmd" - to_host_path_cmd="func_convert_path_${func_stripname_result}" - fi -} - - -# func_to_host_path ARG -# Converts the path ARG from $build format to $host format. Return result -# in func_to_host_path_result. -func_to_host_path () -{ - $opt_debug - func_init_to_host_path_cmd - $to_host_path_cmd "$1" -} -# end func_to_host_path - - -# func_convert_path_noop ARG -# Copy ARG to func_to_host_path_result. -func_convert_path_noop () -{ - func_to_host_path_result="$1" -} -# end func_convert_path_noop - - -# func_convert_path_msys_to_w32 ARG -# Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic -# conversion to w32 is not available inside the cwrapper. Returns result in -# func_to_host_path_result. -func_convert_path_msys_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from ARG. MSYS - # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; - # and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_msys_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_msys_to_w32 - - -# func_convert_path_cygwin_to_w32 ARG -# Convert path ARG from Cygwin to w32 format. Returns result in -# func_to_host_file_result. -func_convert_path_cygwin_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_cygwin_to_w32 - - -# func_convert_path_nix_to_w32 ARG -# Convert path ARG from *nix to w32 format. Requires a wine environment and -# a working winepath. Returns result in func_to_host_file_result. -func_convert_path_nix_to_w32 () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" - func_convert_path_check : ";" \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" - fi -} -# end func_convert_path_nix_to_w32 - - -# func_convert_path_msys_to_cygwin ARG -# Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. -# Returns result in func_to_host_file_result. -func_convert_path_msys_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # See func_convert_path_msys_to_w32: - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_msys_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_msys_to_cygwin - - -# func_convert_path_nix_to_cygwin ARG -# Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a -# a wine environment, working winepath, and LT_CYGPATH set. Returns result in -# func_to_host_file_result. -func_convert_path_nix_to_cygwin () -{ - $opt_debug - func_to_host_path_result="$1" - if test -n "$1"; then - # Remove leading and trailing path separator characters from - # ARG. msys behavior is inconsistent here, cygpath turns them - # into '.;' and ';.', and winepath ignores them completely. - func_stripname : : "$1" - func_to_host_path_tmp1=$func_stripname_result - func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" - func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" - func_to_host_path_result="$func_cygpath_result" - func_convert_path_check : : \ - "$func_to_host_path_tmp1" "$func_to_host_path_result" - func_convert_path_front_back_pathsep ":*" "*:" : "$1" - fi -} -# end func_convert_path_nix_to_cygwin - - -# func_mode_compile arg... -func_mode_compile () -{ - $opt_debug - # Get the compilation command and the source file. - base_compile= - srcfile="$nonopt" # always keep a non-empty value in "srcfile" - suppress_opt=yes - suppress_output= - arg_mode=normal - libobj= - later= - pie_flag= - - for arg - do - case $arg_mode in - arg ) - # do not "continue". Instead, add this to base_compile - lastarg="$arg" - arg_mode=normal - ;; - - target ) - libobj="$arg" - arg_mode=normal - continue - ;; - - normal ) - # Accept any command-line options. - case $arg in - -o) - test -n "$libobj" && \ - func_fatal_error "you cannot specify \`-o' more than once" - arg_mode=target - continue - ;; - - -pie | -fpie | -fPIE) - func_append pie_flag " $arg" - continue - ;; - - -shared | -static | -prefer-pic | -prefer-non-pic) - func_append later " $arg" - continue - ;; - - -no-suppress) - suppress_opt=no - continue - ;; - - -Xcompiler) - arg_mode=arg # the next one goes into the "base_compile" arg list - continue # The current "srcfile" will either be retained or - ;; # replaced later. I would guess that would be a bug. - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - lastarg= - save_ifs="$IFS"; IFS=',' - for arg in $args; do - IFS="$save_ifs" - func_append_quoted lastarg "$arg" - done - IFS="$save_ifs" - func_stripname ' ' '' "$lastarg" - lastarg=$func_stripname_result - - # Add the arguments to base_compile. - func_append base_compile " $lastarg" - continue - ;; - - *) - # Accept the current argument as the source file. - # The previous "srcfile" becomes the current argument. - # - lastarg="$srcfile" - srcfile="$arg" - ;; - esac # case $arg - ;; - esac # case $arg_mode - - # Aesthetically quote the previous argument. - func_append_quoted base_compile "$lastarg" - done # for arg - - case $arg_mode in - arg) - func_fatal_error "you must specify an argument for -Xcompile" - ;; - target) - func_fatal_error "you must specify a target with \`-o'" - ;; - *) - # Get the name of the library object. - test -z "$libobj" && { - func_basename "$srcfile" - libobj="$func_basename_result" - } - ;; - esac - - # Recognize several different file suffixes. - # If the user specifies -o file.o, it is replaced with file.lo - case $libobj in - *.[cCFSifmso] | \ - *.ada | *.adb | *.ads | *.asm | \ - *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ - *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) - func_xform "$libobj" - libobj=$func_xform_result - ;; - esac - - case $libobj in - *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; - *) - func_fatal_error "cannot determine name of library object from \`$libobj'" - ;; - esac - - func_infer_tag $base_compile - - for arg in $later; do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - continue - ;; - - -static) - build_libtool_libs=no - build_old_libs=yes - continue - ;; - - -prefer-pic) - pic_mode=yes - continue - ;; - - -prefer-non-pic) - pic_mode=no - continue - ;; - esac - done - - func_quote_for_eval "$libobj" - test "X$libobj" != "X$func_quote_for_eval_result" \ - && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ - && func_warning "libobj name \`$libobj' may not contain shell special characters." - func_dirname_and_basename "$obj" "/" "" - objname="$func_basename_result" - xdir="$func_dirname_result" - lobj=${xdir}$objdir/$objname - - test -z "$base_compile" && \ - func_fatal_help "you must specify a compilation command" - - # Delete any leftover library objects. - if test "$build_old_libs" = yes; then - removelist="$obj $lobj $libobj ${libobj}T" - else - removelist="$lobj $libobj ${libobj}T" - fi - - # On Cygwin there's no "real" PIC flag so we must build both object types - case $host_os in - cygwin* | mingw* | pw32* | os2* | cegcc*) - pic_mode=default - ;; - esac - if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then - # non-PIC code in shared libraries is not supported - pic_mode=default - fi - - # Calculate the filename of the output object if compiler does - # not support -o with -c - if test "$compiler_c_o" = no; then - output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.${objext} - lockfile="$output_obj.lock" - else - output_obj= - need_locks=no - lockfile= - fi - - # Lock this critical section if it is needed - # We use this script file to make the link, it avoids creating a new file - if test "$need_locks" = yes; then - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - elif test "$need_locks" = warn; then - if test -f "$lockfile"; then - $ECHO "\ -*** ERROR, $lockfile exists and contains: -`cat $lockfile 2>/dev/null` - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - func_append removelist " $output_obj" - $ECHO "$srcfile" > "$lockfile" - fi - - $opt_dry_run || $RM $removelist - func_append removelist " $lockfile" - trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 - - func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 - srcfile=$func_to_tool_file_result - func_quote_for_eval "$srcfile" - qsrcfile=$func_quote_for_eval_result - - # Only build a PIC object if we are building libtool libraries. - if test "$build_libtool_libs" = yes; then - # Without this assignment, base_compile gets emptied. - fbsd_hideous_sh_bug=$base_compile - - if test "$pic_mode" != no; then - command="$base_compile $qsrcfile $pic_flag" - else - # Don't build PIC code - command="$base_compile $qsrcfile" - fi - - func_mkdir_p "$xdir$objdir" - - if test -z "$output_obj"; then - # Place PIC objects in $objdir - func_append command " -o $lobj" - fi - - func_show_eval_locale "$command" \ - 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed, then go on to compile the next one - if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then - func_show_eval '$MV "$output_obj" "$lobj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - - # Allow error messages only from the first compilation. - if test "$suppress_opt" = yes; then - suppress_output=' >/dev/null 2>&1' - fi - fi - - # Only build a position-dependent object if we build old libraries. - if test "$build_old_libs" = yes; then - if test "$pic_mode" != yes; then - # Don't build PIC code - command="$base_compile $qsrcfile$pie_flag" - else - command="$base_compile $qsrcfile $pic_flag" - fi - if test "$compiler_c_o" = yes; then - func_append command " -o $obj" - fi - - # Suppress compiler output if we already did a PIC compilation. - func_append command "$suppress_output" - func_show_eval_locale "$command" \ - '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' - - if test "$need_locks" = warn && - test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then - $ECHO "\ -*** ERROR, $lockfile contains: -`cat $lockfile 2>/dev/null` - -but it should contain: -$srcfile - -This indicates that another process is trying to use the same -temporary object file, and libtool could not work around it because -your compiler does not support \`-c' and \`-o' together. If you -repeat this compilation, it may succeed, by chance, but you had better -avoid parallel builds (make -j) in this platform, or get a better -compiler." - - $opt_dry_run || $RM $removelist - exit $EXIT_FAILURE - fi - - # Just move the object if needed - if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then - func_show_eval '$MV "$output_obj" "$obj"' \ - 'error=$?; $opt_dry_run || $RM $removelist; exit $error' - fi - fi - - $opt_dry_run || { - func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" - - # Unlock the critical section if it was locked - if test "$need_locks" != no; then - removelist=$lockfile - $RM "$lockfile" - fi - } - - exit $EXIT_SUCCESS -} - -$opt_help || { - test "$opt_mode" = compile && func_mode_compile ${1+"$@"} -} - -func_mode_help () -{ - # We need to display help for each of the modes. - case $opt_mode in - "") - # Generic help is extracted from the usage comments - # at the start of this file. - func_help - ;; - - clean) - $ECHO \ -"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... - -Remove files from the build directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, object or program, all the files associated -with it are deleted. Otherwise, only FILE itself is deleted using RM." - ;; - - compile) - $ECHO \ -"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE - -Compile a source file into a libtool library object. - -This mode accepts the following additional options: - - -o OUTPUT-FILE set the output file name to OUTPUT-FILE - -no-suppress do not suppress compiler output for multiple passes - -prefer-pic try to build PIC objects only - -prefer-non-pic try to build non-PIC objects only - -shared do not build a \`.o' file suitable for static linking - -static only build a \`.o' file suitable for static linking - -Wc,FLAG pass FLAG directly to the compiler - -COMPILE-COMMAND is a command to be used in creating a \`standard' object file -from the given SOURCEFILE. - -The output file name is determined by removing the directory component from -SOURCEFILE, then substituting the C source code suffix \`.c' with the -library object suffix, \`.lo'." - ;; - - execute) - $ECHO \ -"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... - -Automatically set library path, then run a program. - -This mode accepts the following additional options: - - -dlopen FILE add the directory containing FILE to the library path - -This mode sets the library path environment variable according to \`-dlopen' -flags. - -If any of the ARGS are libtool executable wrappers, then they are translated -into their corresponding uninstalled binary, and any of their required library -directories are added to the library path. - -Then, COMMAND is executed, with ARGS as arguments." - ;; - - finish) - $ECHO \ -"Usage: $progname [OPTION]... --mode=finish [LIBDIR]... - -Complete the installation of libtool libraries. - -Each LIBDIR is a directory that contains libtool libraries. - -The commands that this mode executes may require superuser privileges. Use -the \`--dry-run' option if you just want to see what would be executed." - ;; - - install) - $ECHO \ -"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... - -Install executables or libraries. - -INSTALL-COMMAND is the installation command. The first component should be -either the \`install' or \`cp' program. - -The following components of INSTALL-COMMAND are treated specially: - - -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation - -The rest of the components are interpreted as arguments to that command (only -BSD-compatible install options are recognized)." - ;; - - link) - $ECHO \ -"Usage: $progname [OPTION]... --mode=link LINK-COMMAND... - -Link object files or libraries together to form another library, or to -create an executable program. - -LINK-COMMAND is a command using the C compiler that you would use to create -a program from several object files. - -The following components of LINK-COMMAND are treated specially: - - -all-static do not do any dynamic linking at all - -avoid-version do not add a version suffix if possible - -bindir BINDIR specify path to binaries directory (for systems where - libraries must be found in the PATH setting at runtime) - -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime - -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols - -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) - -export-symbols SYMFILE - try to export only the symbols listed in SYMFILE - -export-symbols-regex REGEX - try to export only the symbols matching REGEX - -LLIBDIR search LIBDIR for required installed libraries - -lNAME OUTPUT-FILE requires the installed library libNAME - -module build a library that can dlopened - -no-fast-install disable the fast-install mode - -no-install link a not-installable executable - -no-undefined declare that a library does not refer to external symbols - -o OUTPUT-FILE create OUTPUT-FILE from the specified objects - -objectlist FILE Use a list of object files found in FILE to specify objects - -precious-files-regex REGEX - don't remove output files matching REGEX - -release RELEASE specify package release information - -rpath LIBDIR the created library will eventually be installed in LIBDIR - -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries - -shared only do dynamic linking of libtool libraries - -shrext SUFFIX override the standard shared library file extension - -static do not do any dynamic linking of uninstalled libtool libraries - -static-libtool-libs - do not do any dynamic linking of libtool libraries - -version-info CURRENT[:REVISION[:AGE]] - specify library version info [each variable defaults to 0] - -weak LIBNAME declare that the target provides the LIBNAME interface - -Wc,FLAG - -Xcompiler FLAG pass linker-specific FLAG directly to the compiler - -Wl,FLAG - -Xlinker FLAG pass linker-specific FLAG directly to the linker - -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) - -All other options (arguments beginning with \`-') are ignored. - -Every other argument is treated as a filename. Files ending in \`.la' are -treated as uninstalled libtool libraries, other files are standard or library -object files. - -If the OUTPUT-FILE ends in \`.la', then a libtool library is created, -only library objects (\`.lo' files) may be specified, and \`-rpath' is -required, except when creating a convenience library. - -If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created -using \`ar' and \`ranlib', or on Windows using \`lib'. - -If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file -is created, otherwise an executable program is created." - ;; - - uninstall) - $ECHO \ -"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... - -Remove libraries from an installation directory. - -RM is the name of the program to use to delete files associated with each FILE -(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed -to RM. - -If FILE is a libtool library, all the files associated with it are deleted. -Otherwise, only FILE itself is deleted using RM." - ;; - - *) - func_fatal_help "invalid operation mode \`$opt_mode'" - ;; - esac - - echo - $ECHO "Try \`$progname --help' for more information about other modes." -} - -# Now that we've collected a possible --mode arg, show help if necessary -if $opt_help; then - if test "$opt_help" = :; then - func_mode_help - else - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - func_mode_help - done - } | sed -n '1p; 2,$s/^Usage:/ or: /p' - { - func_help noexit - for opt_mode in compile link execute install finish uninstall clean; do - echo - func_mode_help - done - } | - sed '1d - /^When reporting/,/^Report/{ - H - d - } - $x - /information about other modes/d - /more detailed .*MODE/d - s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' - fi - exit $? -fi - - -# func_mode_execute arg... -func_mode_execute () -{ - $opt_debug - # The first argument is the command name. - cmd="$nonopt" - test -z "$cmd" && \ - func_fatal_help "you must specify a COMMAND" - - # Handle -dlopen flags immediately. - for file in $opt_dlopen; do - test -f "$file" \ - || func_fatal_help "\`$file' is not a file" - - dir= - case $file in - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$lib' is not a valid libtool archive" - - # Read the libtool library. - dlname= - library_names= - func_source "$file" - - # Skip this library if it cannot be dlopened. - if test -z "$dlname"; then - # Warn if it was a shared library. - test -n "$library_names" && \ - func_warning "\`$file' was not linked with \`-export-dynamic'" - continue - fi - - func_dirname "$file" "" "." - dir="$func_dirname_result" - - if test -f "$dir/$objdir/$dlname"; then - func_append dir "/$objdir" - else - if test ! -f "$dir/$dlname"; then - func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" - fi - fi - ;; - - *.lo) - # Just add the directory containing the .lo file. - func_dirname "$file" "" "." - dir="$func_dirname_result" - ;; - - *) - func_warning "\`-dlopen' is ignored for non-libtool libraries and objects" - continue - ;; - esac - - # Get the absolute pathname. - absdir=`cd "$dir" && pwd` - test -n "$absdir" && dir="$absdir" - - # Now add the directory to shlibpath_var. - if eval "test -z \"\$$shlibpath_var\""; then - eval "$shlibpath_var=\"\$dir\"" - else - eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" - fi - done - - # This variable tells wrapper scripts just to set shlibpath_var - # rather than running their programs. - libtool_execute_magic="$magic" - - # Check if any of the arguments is a wrapper script. - args= - for file - do - case $file in - -* | *.la | *.lo ) ;; - *) - # Do a test to see if this is really a libtool program. - if func_ltwrapper_script_p "$file"; then - func_source "$file" - # Transform arg to wrapped name. - file="$progdir/$program" - elif func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - func_source "$func_ltwrapper_scriptname_result" - # Transform arg to wrapped name. - file="$progdir/$program" - fi - ;; - esac - # Quote arguments (to preserve shell metacharacters). - func_append_quoted args "$file" - done - - if test "X$opt_dry_run" = Xfalse; then - if test -n "$shlibpath_var"; then - # Export the shlibpath_var. - eval "export $shlibpath_var" - fi - - # Restore saved environment variables - for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES - do - eval "if test \"\${save_$lt_var+set}\" = set; then - $lt_var=\$save_$lt_var; export $lt_var - else - $lt_unset $lt_var - fi" - done - - # Now prepare to actually exec the command. - exec_cmd="\$cmd$args" - else - # Display what would be done. - if test -n "$shlibpath_var"; then - eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" - echo "export $shlibpath_var" - fi - $ECHO "$cmd$args" - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = execute && func_mode_execute ${1+"$@"} - - -# func_mode_finish arg... -func_mode_finish () -{ - $opt_debug - libs= - libdirs= - admincmds= - - for opt in "$nonopt" ${1+"$@"} - do - if test -d "$opt"; then - func_append libdirs " $opt" - - elif test -f "$opt"; then - if func_lalib_unsafe_p "$opt"; then - func_append libs " $opt" - else - func_warning "\`$opt' is not a valid libtool archive" - fi - - else - func_fatal_error "invalid argument \`$opt'" - fi - done - - if test -n "$libs"; then - if test -n "$lt_sysroot"; then - sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` - sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" - else - sysroot_cmd= - fi - - # Remove sysroot references - if $opt_dry_run; then - for lib in $libs; do - echo "removing references to $lt_sysroot and \`=' prefixes from $lib" - done - else - tmpdir=`func_mktempdir` - for lib in $libs; do - sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ - > $tmpdir/tmp-la - mv -f $tmpdir/tmp-la $lib - done - ${RM}r "$tmpdir" - fi - fi - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - for libdir in $libdirs; do - if test -n "$finish_cmds"; then - # Do each command in the finish commands. - func_execute_cmds "$finish_cmds" 'admincmds="$admincmds -'"$cmd"'"' - fi - if test -n "$finish_eval"; then - # Do the single finish_eval. - eval cmds=\"$finish_eval\" - $opt_dry_run || eval "$cmds" || func_append admincmds " - $cmds" - fi - done - fi - - # Exit here if they wanted silent mode. - $opt_silent && exit $EXIT_SUCCESS - - if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then - echo "----------------------------------------------------------------------" - echo "Libraries have been installed in:" - for libdir in $libdirs; do - $ECHO " $libdir" - done - echo - echo "If you ever happen to want to link against installed libraries" - echo "in a given directory, LIBDIR, you must either use libtool, and" - echo "specify the full pathname of the library, or use the \`-LLIBDIR'" - echo "flag during linking and do at least one of the following:" - if test -n "$shlibpath_var"; then - echo " - add LIBDIR to the \`$shlibpath_var' environment variable" - echo " during execution" - fi - if test -n "$runpath_var"; then - echo " - add LIBDIR to the \`$runpath_var' environment variable" - echo " during linking" - fi - if test -n "$hardcode_libdir_flag_spec"; then - libdir=LIBDIR - eval flag=\"$hardcode_libdir_flag_spec\" - - $ECHO " - use the \`$flag' linker flag" - fi - if test -n "$admincmds"; then - $ECHO " - have your system administrator run these commands:$admincmds" - fi - if test -f /etc/ld.so.conf; then - echo " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'" - fi - echo - - echo "See any operating system documentation about shared libraries for" - case $host in - solaris2.[6789]|solaris2.1[0-9]) - echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" - echo "pages." - ;; - *) - echo "more information, such as the ld(1) and ld.so(8) manual pages." - ;; - esac - echo "----------------------------------------------------------------------" - fi - exit $EXIT_SUCCESS -} - -test "$opt_mode" = finish && func_mode_finish ${1+"$@"} - - -# func_mode_install arg... -func_mode_install () -{ - $opt_debug - # There may be an optional sh(1) argument at the beginning of - # install_prog (especially on Windows NT). - if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh || - # Allow the use of GNU shtool's install command. - case $nonopt in *shtool*) :;; *) false;; esac; then - # Aesthetically quote it. - func_quote_for_eval "$nonopt" - install_prog="$func_quote_for_eval_result " - arg=$1 - shift - else - install_prog= - arg=$nonopt - fi - - # The real first argument should be the name of the installation program. - # Aesthetically quote it. - func_quote_for_eval "$arg" - func_append install_prog "$func_quote_for_eval_result" - install_shared_prog=$install_prog - case " $install_prog " in - *[\\\ /]cp\ *) install_cp=: ;; - *) install_cp=false ;; - esac - - # We need to accept at least all the BSD install flags. - dest= - files= - opts= - prev= - install_type= - isdir=no - stripme= - no_mode=: - for arg - do - arg2= - if test -n "$dest"; then - func_append files " $dest" - dest=$arg - continue - fi - - case $arg in - -d) isdir=yes ;; - -f) - if $install_cp; then :; else - prev=$arg - fi - ;; - -g | -m | -o) - prev=$arg - ;; - -s) - stripme=" -s" - continue - ;; - -*) - ;; - *) - # If the previous option needed an argument, then skip it. - if test -n "$prev"; then - if test "x$prev" = x-m && test -n "$install_override_mode"; then - arg2=$install_override_mode - no_mode=false - fi - prev= - else - dest=$arg - continue - fi - ;; - esac - - # Aesthetically quote the argument. - func_quote_for_eval "$arg" - func_append install_prog " $func_quote_for_eval_result" - if test -n "$arg2"; then - func_quote_for_eval "$arg2" - fi - func_append install_shared_prog " $func_quote_for_eval_result" - done - - test -z "$install_prog" && \ - func_fatal_help "you must specify an install program" - - test -n "$prev" && \ - func_fatal_help "the \`$prev' option requires an argument" - - if test -n "$install_override_mode" && $no_mode; then - if $install_cp; then :; else - func_quote_for_eval "$install_override_mode" - func_append install_shared_prog " -m $func_quote_for_eval_result" - fi - fi - - if test -z "$files"; then - if test -z "$dest"; then - func_fatal_help "no file or destination specified" - else - func_fatal_help "you must specify a destination" - fi - fi - - # Strip any trailing slash from the destination. - func_stripname '' '/' "$dest" - dest=$func_stripname_result - - # Check to see that the destination is a directory. - test -d "$dest" && isdir=yes - if test "$isdir" = yes; then - destdir="$dest" - destname= - else - func_dirname_and_basename "$dest" "" "." - destdir="$func_dirname_result" - destname="$func_basename_result" - - # Not a directory, so check to see that there is only one file specified. - set dummy $files; shift - test "$#" -gt 1 && \ - func_fatal_help "\`$dest' is not a directory" - fi - case $destdir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - for file in $files; do - case $file in - *.lo) ;; - *) - func_fatal_help "\`$destdir' must be an absolute directory name" - ;; - esac - done - ;; - esac - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - staticlibs= - future_libdirs= - current_libdirs= - for file in $files; do - - # Do each installation. - case $file in - *.$libext) - # Do the static libraries later. - func_append staticlibs " $file" - ;; - - *.la) - func_resolve_sysroot "$file" - file=$func_resolve_sysroot_result - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$file" \ - || func_fatal_help "\`$file' is not a valid libtool archive" - - library_names= - old_library= - relink_command= - func_source "$file" - - # Add the libdir to current_libdirs if it is the destination. - if test "X$destdir" = "X$libdir"; then - case "$current_libdirs " in - *" $libdir "*) ;; - *) func_append current_libdirs " $libdir" ;; - esac - else - # Note the libdir as a future libdir. - case "$future_libdirs " in - *" $libdir "*) ;; - *) func_append future_libdirs " $libdir" ;; - esac - fi - - func_dirname "$file" "/" "" - dir="$func_dirname_result" - func_append dir "$objdir" - - if test -n "$relink_command"; then - # Determine the prefix the user has applied to our future dir. - inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` - - # Don't allow the user to place us outside of our expected - # location b/c this prevents finding dependent libraries that - # are installed to the same prefix. - # At present, this check doesn't affect windows .dll's that - # are installed into $libdir/../bin (currently, that works fine) - # but it's something to keep an eye on. - test "$inst_prefix_dir" = "$destdir" && \ - func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir" - - if test -n "$inst_prefix_dir"; then - # Stick the inst_prefix_dir data into the link command. - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` - else - relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` - fi - - func_warning "relinking \`$file'" - func_show_eval "$relink_command" \ - 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"' - fi - - # See the names of the shared library. - set dummy $library_names; shift - if test -n "$1"; then - realname="$1" - shift - - srcname="$realname" - test -n "$relink_command" && srcname="$realname"T - - # Install the shared library and build the symlinks. - func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ - 'exit $?' - tstripme="$stripme" - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - case $realname in - *.dll.a) - tstripme="" - ;; - esac - ;; - esac - if test -n "$tstripme" && test -n "$striplib"; then - func_show_eval "$striplib $destdir/$realname" 'exit $?' - fi - - if test "$#" -gt 0; then - # Delete the old symlinks, and create new ones. - # Try `ln -sf' first, because the `ln' binary might depend on - # the symlink we replace! Solaris /bin/ln does not understand -f, - # so we also need to try rm && ln -s. - for linkname - do - test "$linkname" != "$realname" \ - && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" - done - fi - - # Do each command in the postinstall commands. - lib="$destdir/$realname" - func_execute_cmds "$postinstall_cmds" 'exit $?' - fi - - # Install the pseudo-library for information purposes. - func_basename "$file" - name="$func_basename_result" - instname="$dir/$name"i - func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' - - # Maybe install the static library, too. - test -n "$old_library" && func_append staticlibs " $dir/$old_library" - ;; - - *.lo) - # Install (i.e. copy) a libtool object. - - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # Deduce the name of the destination old-style object file. - case $destfile in - *.lo) - func_lo2o "$destfile" - staticdest=$func_lo2o_result - ;; - *.$objext) - staticdest="$destfile" - destfile= - ;; - *) - func_fatal_help "cannot copy a libtool object to \`$destfile'" - ;; - esac - - # Install the libtool object if requested. - test -n "$destfile" && \ - func_show_eval "$install_prog $file $destfile" 'exit $?' - - # Install the old object if enabled. - if test "$build_old_libs" = yes; then - # Deduce the name of the old-style object file. - func_lo2o "$file" - staticobj=$func_lo2o_result - func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' - fi - exit $EXIT_SUCCESS - ;; - - *) - # Figure out destination file name, if it wasn't already specified. - if test -n "$destname"; then - destfile="$destdir/$destname" - else - func_basename "$file" - destfile="$func_basename_result" - destfile="$destdir/$destfile" - fi - - # If the file is missing, and there is a .exe on the end, strip it - # because it is most likely a libtool script we actually want to - # install - stripped_ext="" - case $file in - *.exe) - if test ! -f "$file"; then - func_stripname '' '.exe' "$file" - file=$func_stripname_result - stripped_ext=".exe" - fi - ;; - esac - - # Do a test to see if this is really a libtool program. - case $host in - *cygwin* | *mingw*) - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - wrapper=$func_ltwrapper_scriptname_result - else - func_stripname '' '.exe' "$file" - wrapper=$func_stripname_result - fi - ;; - *) - wrapper=$file - ;; - esac - if func_ltwrapper_script_p "$wrapper"; then - notinst_deplibs= - relink_command= - - func_source "$wrapper" - - # Check the variables that should have been set. - test -z "$generated_by_libtool_version" && \ - func_fatal_error "invalid libtool wrapper script \`$wrapper'" - - finalize=yes - for lib in $notinst_deplibs; do - # Check to see that each library is installed. - libdir= - if test -f "$lib"; then - func_source "$lib" - fi - libfile="$libdir/"`$ECHO "$lib" | $SED 's%^.*/%%g'` ### testsuite: skip nested quoting test - if test -n "$libdir" && test ! -f "$libfile"; then - func_warning "\`$lib' has not been installed in \`$libdir'" - finalize=no - fi - done - - relink_command= - func_source "$wrapper" - - outputname= - if test "$fast_install" = no && test -n "$relink_command"; then - $opt_dry_run || { - if test "$finalize" = yes; then - tmpdir=`func_mktempdir` - func_basename "$file$stripped_ext" - file="$func_basename_result" - outputname="$tmpdir/$file" - # Replace the output file specification. - relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` - - $opt_silent || { - func_quote_for_expand "$relink_command" - eval "func_echo $func_quote_for_expand_result" - } - if eval "$relink_command"; then : - else - func_error "error: relink \`$file' with the above command before installing it" - $opt_dry_run || ${RM}r "$tmpdir" - continue - fi - file="$outputname" - else - func_warning "cannot relink \`$file'" - fi - } - else - # Install the binary that we compiled earlier. - file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` - fi - fi - - # remove .exe since cygwin /usr/bin/install will append another - # one anyway - case $install_prog,$host in - */usr/bin/install*,*cygwin*) - case $file:$destfile in - *.exe:*.exe) - # this is ok - ;; - *.exe:*) - destfile=$destfile.exe - ;; - *:*.exe) - func_stripname '' '.exe' "$destfile" - destfile=$func_stripname_result - ;; - esac - ;; - esac - func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' - $opt_dry_run || if test -n "$outputname"; then - ${RM}r "$tmpdir" - fi - ;; - esac - done - - for file in $staticlibs; do - func_basename "$file" - name="$func_basename_result" - - # Set up the ranlib parameters. - oldlib="$destdir/$name" - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - - func_show_eval "$install_prog \$file \$oldlib" 'exit $?' - - if test -n "$stripme" && test -n "$old_striplib"; then - func_show_eval "$old_striplib $tool_oldlib" 'exit $?' - fi - - # Do each command in the postinstall commands. - func_execute_cmds "$old_postinstall_cmds" 'exit $?' - done - - test -n "$future_libdirs" && \ - func_warning "remember to run \`$progname --finish$future_libdirs'" - - if test -n "$current_libdirs"; then - # Maybe just do a dry run. - $opt_dry_run && current_libdirs=" -n$current_libdirs" - exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs' - else - exit $EXIT_SUCCESS - fi -} - -test "$opt_mode" = install && func_mode_install ${1+"$@"} - - -# func_generate_dlsyms outputname originator pic_p -# Extract symbols from dlprefiles and create ${outputname}S.o with -# a dlpreopen symbol table. -func_generate_dlsyms () -{ - $opt_debug - my_outputname="$1" - my_originator="$2" - my_pic_p="${3-no}" - my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'` - my_dlsyms= - - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - if test -n "$NM" && test -n "$global_symbol_pipe"; then - my_dlsyms="${my_outputname}S.c" - else - func_error "not configured to extract global symbols from dlpreopened files" - fi - fi - - if test -n "$my_dlsyms"; then - case $my_dlsyms in - "") ;; - *.c) - # Discover the nlist of each of the dlfiles. - nlist="$output_objdir/${my_outputname}.nm" - - func_show_eval "$RM $nlist ${nlist}S ${nlist}T" - - # Parse the name list into a source file. - func_verbose "creating $output_objdir/$my_dlsyms" - - $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ -/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */ -/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */ - -#ifdef __cplusplus -extern \"C\" { -#endif - -#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) -#pragma GCC diagnostic ignored \"-Wstrict-prototypes\" -#endif - -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -/* External symbol declarations for the compiler. */\ -" - - if test "$dlself" = yes; then - func_verbose "generating symbol list for \`$output'" - - $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" - - # Add our own program objects to the symbol list. - progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` - for progfile in $progfiles; do - func_to_tool_file "$progfile" func_convert_file_msys_to_w32 - func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" - $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" - done - - if test -n "$exclude_expsyms"; then - $opt_dry_run || { - eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - if test -n "$export_symbols_regex"; then - $opt_dry_run || { - eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - } - fi - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - export_symbols="$output_objdir/$outputname.exp" - $opt_dry_run || { - $RM $export_symbols - eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' - ;; - esac - } - else - $opt_dry_run || { - eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' - eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' - eval '$MV "$nlist"T "$nlist"' - case $host in - *cygwin* | *mingw* | *cegcc* ) - eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' - eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' - ;; - esac - } - fi - fi - - for dlprefile in $dlprefiles; do - func_verbose "extracting global C symbols from \`$dlprefile'" - func_basename "$dlprefile" - name="$func_basename_result" - case $host in - *cygwin* | *mingw* | *cegcc* ) - # if an import library, we need to obtain dlname - if func_win32_import_lib_p "$dlprefile"; then - func_tr_sh "$dlprefile" - eval "curr_lafile=\$libfile_$func_tr_sh_result" - dlprefile_dlbasename="" - if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then - # Use subshell, to avoid clobbering current variable values - dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` - if test -n "$dlprefile_dlname" ; then - func_basename "$dlprefile_dlname" - dlprefile_dlbasename="$func_basename_result" - else - # no lafile. user explicitly requested -dlpreopen . - $sharedlib_from_linklib_cmd "$dlprefile" - dlprefile_dlbasename=$sharedlib_from_linklib_result - fi - fi - $opt_dry_run || { - if test -n "$dlprefile_dlbasename" ; then - eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' - else - func_warning "Could not compute DLL name from $name" - eval '$ECHO ": $name " >> "$nlist"' - fi - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | - $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" - } - else # not an import lib - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - fi - ;; - *) - $opt_dry_run || { - eval '$ECHO ": $name " >> "$nlist"' - func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 - eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" - } - ;; - esac - done - - $opt_dry_run || { - # Make sure we have at least an empty file. - test -f "$nlist" || : > "$nlist" - - if test -n "$exclude_expsyms"; then - $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T - $MV "$nlist"T "$nlist" - fi - - # Try sorting and uniquifying the output. - if $GREP -v "^: " < "$nlist" | - if sort -k 3 /dev/null 2>&1; then - sort -k 3 - else - sort +2 - fi | - uniq > "$nlist"S; then - : - else - $GREP -v "^: " < "$nlist" > "$nlist"S - fi - - if test -f "$nlist"S; then - eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' - else - echo '/* NONE */' >> "$output_objdir/$my_dlsyms" - fi - - echo >> "$output_objdir/$my_dlsyms" "\ - -/* The mapping between symbol names and symbols. */ -typedef struct { - const char *name; - void *address; -} lt_dlsymlist; -extern LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[]; -LT_DLSYM_CONST lt_dlsymlist -lt_${my_prefix}_LTX_preloaded_symbols[] = -{\ - { \"$my_originator\", (void *) 0 }," - - case $need_lib_prefix in - no) - eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - *) - eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" - ;; - esac - echo >> "$output_objdir/$my_dlsyms" "\ - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt_${my_prefix}_LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif\ -" - } # !$opt_dry_run - - pic_flag_for_symtable= - case "$compile_command " in - *" -static "*) ;; - *) - case $host in - # compiling the symbol table file with pic_flag works around - # a FreeBSD bug that causes programs to crash when -lm is - # linked before any other PIC object. But we must not use - # pic_flag when linking with -static. The problem exists in - # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. - *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) - pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; - *-*-hpux*) - pic_flag_for_symtable=" $pic_flag" ;; - *) - if test "X$my_pic_p" != Xno; then - pic_flag_for_symtable=" $pic_flag" - fi - ;; - esac - ;; - esac - symtab_cflags= - for arg in $LTCFLAGS; do - case $arg in - -pie | -fpie | -fPIE) ;; - *) func_append symtab_cflags " $arg" ;; - esac - done - - # Now compile the dynamic symbol file. - func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' - - # Clean up the generated files. - func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"' - - # Transform the symbol file into the correct name. - symfileobj="$output_objdir/${my_outputname}S.$objext" - case $host in - *cygwin* | *mingw* | *cegcc* ) - if test -f "$output_objdir/$my_outputname.def"; then - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` - else - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - fi - ;; - *) - compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` - ;; - esac - ;; - *) - func_fatal_error "unknown suffix for \`$my_dlsyms'" - ;; - esac - else - # We keep going just in case the user didn't refer to - # lt_preloaded_symbols. The linker will fail if global_symbol_pipe - # really was required. - - # Nullify the symbol file. - compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` - finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` - fi -} - -# func_win32_libid arg -# return the library type of file 'arg' -# -# Need a lot of goo to handle *both* DLLs and import libs -# Has to be a shell function in order to 'eat' the argument -# that is supplied when $file_magic_command is called. -# Despite the name, also deal with 64 bit binaries. -func_win32_libid () -{ - $opt_debug - win32_libid_type="unknown" - win32_fileres=`file -L $1 2>/dev/null` - case $win32_fileres in - *ar\ archive\ import\ library*) # definitely import - win32_libid_type="x86 archive import" - ;; - *ar\ archive*) # could be an import, or static - # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. - if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | - $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then - func_to_tool_file "$1" func_convert_file_msys_to_w32 - win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | - $SED -n -e ' - 1,100{ - / I /{ - s,.*,import, - p - q - } - }'` - case $win32_nmres in - import*) win32_libid_type="x86 archive import";; - *) win32_libid_type="x86 archive static";; - esac - fi - ;; - *DLL*) - win32_libid_type="x86 DLL" - ;; - *executable*) # but shell scripts are "executable" too... - case $win32_fileres in - *MS\ Windows\ PE\ Intel*) - win32_libid_type="x86 DLL" - ;; - esac - ;; - esac - $ECHO "$win32_libid_type" -} - -# func_cygming_dll_for_implib ARG -# -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib () -{ - $opt_debug - sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` -} - -# func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs -# -# The is the core of a fallback implementation of a -# platform-specific function to extract the name of the -# DLL associated with the specified import library LIBNAME. -# -# SECTION_NAME is either .idata$6 or .idata$7, depending -# on the platform and compiler that created the implib. -# -# Echos the name of the DLL associated with the -# specified import library. -func_cygming_dll_for_implib_fallback_core () -{ - $opt_debug - match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` - $OBJDUMP -s --section "$1" "$2" 2>/dev/null | - $SED '/^Contents of section '"$match_literal"':/{ - # Place marker at beginning of archive member dllname section - s/.*/====MARK====/ - p - d - } - # These lines can sometimes be longer than 43 characters, but - # are always uninteresting - /:[ ]*file format pe[i]\{,1\}-/d - /^In archive [^:]*:/d - # Ensure marker is printed - /^====MARK====/p - # Remove all lines with less than 43 characters - /^.\{43\}/!d - # From remaining lines, remove first 43 characters - s/^.\{43\}//' | - $SED -n ' - # Join marker and all lines until next marker into a single line - /^====MARK====/ b para - H - $ b para - b - :para - x - s/\n//g - # Remove the marker - s/^====MARK====// - # Remove trailing dots and whitespace - s/[\. \t]*$// - # Print - /./p' | - # we now have a list, one entry per line, of the stringified - # contents of the appropriate section of all members of the - # archive which possess that section. Heuristic: eliminate - # all those which have a first or second character that is - # a '.' (that is, objdump's representation of an unprintable - # character.) This should work for all archives with less than - # 0x302f exports -- but will fail for DLLs whose name actually - # begins with a literal '.' or a single character followed by - # a '.'. - # - # Of those that remain, print the first one. - $SED -e '/^\./d;/^.\./d;q' -} - -# func_cygming_gnu_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is a GNU/binutils-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_gnu_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` - test -n "$func_cygming_gnu_implib_tmp" -} - -# func_cygming_ms_implib_p ARG -# This predicate returns with zero status (TRUE) if -# ARG is an MS-style import library. Returns -# with nonzero status (FALSE) otherwise. -func_cygming_ms_implib_p () -{ - $opt_debug - func_to_tool_file "$1" func_convert_file_msys_to_w32 - func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` - test -n "$func_cygming_ms_implib_tmp" -} - -# func_cygming_dll_for_implib_fallback ARG -# Platform-specific function to extract the -# name of the DLL associated with the specified -# import library ARG. -# -# This fallback implementation is for use when $DLLTOOL -# does not support the --identify-strict option. -# Invoked by eval'ing the libtool variable -# $sharedlib_from_linklib_cmd -# Result is available in the variable -# $sharedlib_from_linklib_result -func_cygming_dll_for_implib_fallback () -{ - $opt_debug - if func_cygming_gnu_implib_p "$1" ; then - # binutils import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` - elif func_cygming_ms_implib_p "$1" ; then - # ms-generated import library - sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` - else - # unknown - sharedlib_from_linklib_result="" - fi -} - - -# func_extract_an_archive dir oldlib -func_extract_an_archive () -{ - $opt_debug - f_ex_an_ar_dir="$1"; shift - f_ex_an_ar_oldlib="$1" - if test "$lock_old_archive_extraction" = yes; then - lockfile=$f_ex_an_ar_oldlib.lock - until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do - func_echo "Waiting for $lockfile to be removed" - sleep 2 - done - fi - func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ - 'stat=$?; rm -f "$lockfile"; exit $stat' - if test "$lock_old_archive_extraction" = yes; then - $opt_dry_run || rm -f "$lockfile" - fi - if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then - : - else - func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" - fi -} - - -# func_extract_archives gentop oldlib ... -func_extract_archives () -{ - $opt_debug - my_gentop="$1"; shift - my_oldlibs=${1+"$@"} - my_oldobjs="" - my_xlib="" - my_xabs="" - my_xdir="" - - for my_xlib in $my_oldlibs; do - # Extract the objects. - case $my_xlib in - [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;; - *) my_xabs=`pwd`"/$my_xlib" ;; - esac - func_basename "$my_xlib" - my_xlib="$func_basename_result" - my_xlib_u=$my_xlib - while :; do - case " $extracted_archives " in - *" $my_xlib_u "*) - func_arith $extracted_serial + 1 - extracted_serial=$func_arith_result - my_xlib_u=lt$extracted_serial-$my_xlib ;; - *) break ;; - esac - done - extracted_archives="$extracted_archives $my_xlib_u" - my_xdir="$my_gentop/$my_xlib_u" - - func_mkdir_p "$my_xdir" - - case $host in - *-darwin*) - func_verbose "Extracting $my_xabs" - # Do not bother doing anything if just a dry run - $opt_dry_run || { - darwin_orig_dir=`pwd` - cd $my_xdir || exit $? - darwin_archive=$my_xabs - darwin_curdir=`pwd` - darwin_base_archive=`basename "$darwin_archive"` - darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` - if test -n "$darwin_arches"; then - darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` - darwin_arch= - func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" - for darwin_arch in $darwin_arches ; do - func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}" - $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}" - cd "unfat-$$/${darwin_base_archive}-${darwin_arch}" - func_extract_an_archive "`pwd`" "${darwin_base_archive}" - cd "$darwin_curdir" - $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" - done # $darwin_arches - ## Okay now we've a bunch of thin objects, gotta fatten them up :) - darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u` - darwin_file= - darwin_files= - for darwin_file in $darwin_filelist; do - darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` - $LIPO -create -output "$darwin_file" $darwin_files - done # $darwin_filelist - $RM -rf unfat-$$ - cd "$darwin_orig_dir" - else - cd $darwin_orig_dir - func_extract_an_archive "$my_xdir" "$my_xabs" - fi # $darwin_arches - } # !$opt_dry_run - ;; - *) - func_extract_an_archive "$my_xdir" "$my_xabs" - ;; - esac - my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` - done - - func_extract_archives_result="$my_oldobjs" -} - - -# func_emit_wrapper [arg=no] -# -# Emit a libtool wrapper script on stdout. -# Don't directly open a file because we may want to -# incorporate the script contents within a cygwin/mingw -# wrapper executable. Must ONLY be called from within -# func_mode_link because it depends on a number of variables -# set therein. -# -# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR -# variable will take. If 'yes', then the emitted script -# will assume that the directory in which it is stored is -# the $objdir directory. This is a cygwin/mingw-specific -# behavior. -func_emit_wrapper () -{ - func_emit_wrapper_arg1=${1-no} - - $ECHO "\ -#! $SHELL - -# $output - temporary wrapper script for $objdir/$outputname -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# The $output program cannot be directly executed until all the libtool -# libraries that it depends on are installed. -# -# This wrapper script should never be moved out of the build directory. -# If it is, it will not operate correctly. - -# Sed substitution that helps us do robust quoting. It backslashifies -# metacharacters that are still active within double-quoted strings. -sed_quote_subst='$sed_quote_subst' - -# Be Bourne compatible -if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then - emulate sh - NULLCMD=: - # Zsh 3.x and 4.x performs 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 -BIN_SH=xpg4; export BIN_SH # for Tru64 -DUALCASE=1; export DUALCASE # for MKS sh - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -relink_command=\"$relink_command\" - -# This environment variable determines our operation mode. -if test \"\$libtool_install_magic\" = \"$magic\"; then - # install mode needs the following variables: - generated_by_libtool_version='$macro_version' - notinst_deplibs='$notinst_deplibs' -else - # When we are sourced in execute mode, \$file and \$ECHO are already set. - if test \"\$libtool_execute_magic\" != \"$magic\"; then - file=\"\$0\"" - - qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` - $ECHO "\ - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - ECHO=\"$qECHO\" - fi - -# Very basic option parsing. These options are (a) specific to -# the libtool wrapper, (b) are identical between the wrapper -# /script/ and the wrapper /executable/ which is used only on -# windows platforms, and (c) all begin with the string "--lt-" -# (application programs are unlikely to have options which match -# this pattern). -# -# There are only two supported options: --lt-debug and -# --lt-dump-script. There is, deliberately, no --lt-help. -# -# The first argument to this parsing function should be the -# script's $0 value, followed by "$@". -lt_option_debug= -func_parse_lt_options () -{ - lt_script_arg0=\$0 - shift - for lt_opt - do - case \"\$lt_opt\" in - --lt-debug) lt_option_debug=1 ;; - --lt-dump-script) - lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` - test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. - lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` - cat \"\$lt_dump_D/\$lt_dump_F\" - exit 0 - ;; - --lt-*) - \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 - exit 1 - ;; - esac - done - - # Print the debug banner immediately: - if test -n \"\$lt_option_debug\"; then - echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 - fi -} - -# Used when --lt-debug. Prints its arguments to stdout -# (redirection is the responsibility of the caller) -func_lt_dump_args () -{ - lt_dump_args_N=1; - for lt_arg - do - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" - lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` - done -} - -# Core function for launching the target application -func_exec_program_core () -{ -" - case $host in - # Backslashes separate directories on plain windows - *-*-mingw | *-*-os2* | *-cegcc*) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} -" - ;; - - *) - $ECHO "\ - if test -n \"\$lt_option_debug\"; then - \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 - func_lt_dump_args \${1+\"\$@\"} 1>&2 - fi - exec \"\$progdir/\$program\" \${1+\"\$@\"} -" - ;; - esac - $ECHO "\ - \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 - exit 1 -} - -# A function to encapsulate launching the target application -# Strips options in the --lt-* namespace from \$@ and -# launches target application with the remaining arguments. -func_exec_program () -{ - case \" \$* \" in - *\\ --lt-*) - for lt_wr_arg - do - case \$lt_wr_arg in - --lt-*) ;; - *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; - esac - shift - done ;; - esac - func_exec_program_core \${1+\"\$@\"} -} - - # Parse options - func_parse_lt_options \"\$0\" \${1+\"\$@\"} - - # Find the directory that this script lives in. - thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` - test \"x\$thisdir\" = \"x\$file\" && thisdir=. - - # Follow symbolic links until we get to the real thisdir. - file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` - while test -n \"\$file\"; do - destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` - - # If there was a directory component, then change thisdir. - if test \"x\$destdir\" != \"x\$file\"; then - case \"\$destdir\" in - [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; - *) thisdir=\"\$thisdir/\$destdir\" ;; - esac - fi - - file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` - file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` - done - - # Usually 'no', except on cygwin/mingw when embedded into - # the cwrapper. - WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 - if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then - # special case for '.' - if test \"\$thisdir\" = \".\"; then - thisdir=\`pwd\` - fi - # remove .libs from thisdir - case \"\$thisdir\" in - *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; - $objdir ) thisdir=. ;; - esac - fi - - # Try to get the absolute directory name. - absdir=\`cd \"\$thisdir\" && pwd\` - test -n \"\$absdir\" && thisdir=\"\$absdir\" -" - - if test "$fast_install" = yes; then - $ECHO "\ - program=lt-'$outputname'$exeext - progdir=\"\$thisdir/$objdir\" - - if test ! -f \"\$progdir/\$program\" || - { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\ - test \"X\$file\" != \"X\$progdir/\$program\"; }; then - - file=\"\$\$-\$program\" - - if test ! -d \"\$progdir\"; then - $MKDIR \"\$progdir\" - else - $RM \"\$progdir/\$file\" - fi" - - $ECHO "\ - - # relink executable if necessary - if test -n \"\$relink_command\"; then - if relink_command_output=\`eval \$relink_command 2>&1\`; then : - else - $ECHO \"\$relink_command_output\" >&2 - $RM \"\$progdir/\$file\" - exit 1 - fi - fi - - $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || - { $RM \"\$progdir/\$program\"; - $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } - $RM \"\$progdir/\$file\" - fi" - else - $ECHO "\ - program='$outputname' - progdir=\"\$thisdir/$objdir\" -" - fi - - $ECHO "\ - - if test -f \"\$progdir/\$program\"; then" - - # fixup the dll searchpath if we need to. - # - # Fix the DLL searchpath if we need to. Do this before prepending - # to shlibpath, because on Windows, both are PATH and uninstalled - # libraries must come first. - if test -n "$dllsearchpath"; then - $ECHO "\ - # Add the dll search path components to the executable PATH - PATH=$dllsearchpath:\$PATH -" - fi - - # Export our shlibpath_var if we have one. - if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then - $ECHO "\ - # Add our own library path to $shlibpath_var - $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" - - # Some systems cannot cope with colon-terminated $shlibpath_var - # The second colon is a workaround for a bug in BeOS R4 sed - $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` - - export $shlibpath_var -" - fi - - $ECHO "\ - if test \"\$libtool_execute_magic\" != \"$magic\"; then - # Run the actual program with our arguments. - func_exec_program \${1+\"\$@\"} - fi - else - # The program doesn't exist. - \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2 - \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 - \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 - exit 1 - fi -fi\ -" -} - - -# func_emit_cwrapperexe_src -# emit the source code for a wrapper executable on stdout -# Must ONLY be called from within func_mode_link because -# it depends on a number of variable set therein. -func_emit_cwrapperexe_src () -{ - cat < -#include -#ifdef _MSC_VER -# include -# include -# include -#else -# include -# include -# ifdef __CYGWIN__ -# include -# endif -#endif -#include -#include -#include -#include -#include -#include -#include -#include - -/* declarations of non-ANSI functions */ -#if defined(__MINGW32__) -# ifdef __STRICT_ANSI__ -int _putenv (const char *); -# endif -#elif defined(__CYGWIN__) -# ifdef __STRICT_ANSI__ -char *realpath (const char *, char *); -int putenv (char *); -int setenv (const char *, const char *, int); -# endif -/* #elif defined (other platforms) ... */ -#endif - -/* portability defines, excluding path handling macros */ -#if defined(_MSC_VER) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -# define S_IXUSR _S_IEXEC -# ifndef _INTPTR_T_DEFINED -# define _INTPTR_T_DEFINED -# define intptr_t int -# endif -#elif defined(__MINGW32__) -# define setmode _setmode -# define stat _stat -# define chmod _chmod -# define getcwd _getcwd -# define putenv _putenv -#elif defined(__CYGWIN__) -# define HAVE_SETENV -# define FOPEN_WB "wb" -/* #elif defined (other platforms) ... */ -#endif - -#if defined(PATH_MAX) -# define LT_PATHMAX PATH_MAX -#elif defined(MAXPATHLEN) -# define LT_PATHMAX MAXPATHLEN -#else -# define LT_PATHMAX 1024 -#endif - -#ifndef S_IXOTH -# define S_IXOTH 0 -#endif -#ifndef S_IXGRP -# define S_IXGRP 0 -#endif - -/* path handling portability macros */ -#ifndef DIR_SEPARATOR -# define DIR_SEPARATOR '/' -# define PATH_SEPARATOR ':' -#endif - -#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ - defined (__OS2__) -# define HAVE_DOS_BASED_FILE_SYSTEM -# define FOPEN_WB "wb" -# ifndef DIR_SEPARATOR_2 -# define DIR_SEPARATOR_2 '\\' -# endif -# ifndef PATH_SEPARATOR_2 -# define PATH_SEPARATOR_2 ';' -# endif -#endif - -#ifndef DIR_SEPARATOR_2 -# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) -#else /* DIR_SEPARATOR_2 */ -# define IS_DIR_SEPARATOR(ch) \ - (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) -#endif /* DIR_SEPARATOR_2 */ - -#ifndef PATH_SEPARATOR_2 -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) -#else /* PATH_SEPARATOR_2 */ -# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) -#endif /* PATH_SEPARATOR_2 */ - -#ifndef FOPEN_WB -# define FOPEN_WB "w" -#endif -#ifndef _O_BINARY -# define _O_BINARY 0 -#endif - -#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) -#define XFREE(stale) do { \ - if (stale) { free ((void *) stale); stale = 0; } \ -} while (0) - -#if defined(LT_DEBUGWRAPPER) -static int lt_debug = 1; -#else -static int lt_debug = 0; -#endif - -const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ - -void *xmalloc (size_t num); -char *xstrdup (const char *string); -const char *base_name (const char *name); -char *find_executable (const char *wrapper); -char *chase_symlinks (const char *pathspec); -int make_executable (const char *path); -int check_executable (const char *path); -char *strendzap (char *str, const char *pat); -void lt_debugprintf (const char *file, int line, const char *fmt, ...); -void lt_fatal (const char *file, int line, const char *message, ...); -static const char *nonnull (const char *s); -static const char *nonempty (const char *s); -void lt_setenv (const char *name, const char *value); -char *lt_extend_str (const char *orig_value, const char *add, int to_end); -void lt_update_exe_path (const char *name, const char *value); -void lt_update_lib_path (const char *name, const char *value); -char **prepare_spawn (char **argv); -void lt_dump_script (FILE *f); -EOF - - cat <= 0) - && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) - return 1; - else - return 0; -} - -int -make_executable (const char *path) -{ - int rval = 0; - struct stat st; - - lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", - nonempty (path)); - if ((!path) || (!*path)) - return 0; - - if (stat (path, &st) >= 0) - { - rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); - } - return rval; -} - -/* Searches for the full path of the wrapper. Returns - newly allocated full path name if found, NULL otherwise - Does not chase symlinks, even on platforms that support them. -*/ -char * -find_executable (const char *wrapper) -{ - int has_slash = 0; - const char *p; - const char *p_next; - /* static buffer for getcwd */ - char tmp[LT_PATHMAX + 1]; - int tmp_len; - char *concat_name; - - lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", - nonempty (wrapper)); - - if ((wrapper == NULL) || (*wrapper == '\0')) - return NULL; - - /* Absolute path? */ -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - else - { -#endif - if (IS_DIR_SEPARATOR (wrapper[0])) - { - concat_name = xstrdup (wrapper); - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } -#if defined (HAVE_DOS_BASED_FILE_SYSTEM) - } -#endif - - for (p = wrapper; *p; p++) - if (*p == '/') - { - has_slash = 1; - break; - } - if (!has_slash) - { - /* no slashes; search PATH */ - const char *path = getenv ("PATH"); - if (path != NULL) - { - for (p = path; *p; p = p_next) - { - const char *q; - size_t p_len; - for (q = p; *q; q++) - if (IS_PATH_SEPARATOR (*q)) - break; - p_len = q - p; - p_next = (*q == '\0' ? q : q + 1); - if (p_len == 0) - { - /* empty path: current directory */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = - XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - } - else - { - concat_name = - XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, p, p_len); - concat_name[p_len] = '/'; - strcpy (concat_name + p_len + 1, wrapper); - } - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - } - } - /* not found in PATH; assume curdir */ - } - /* Relative path | not found in path: prepend cwd */ - if (getcwd (tmp, LT_PATHMAX) == NULL) - lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", - nonnull (strerror (errno))); - tmp_len = strlen (tmp); - concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); - memcpy (concat_name, tmp, tmp_len); - concat_name[tmp_len] = '/'; - strcpy (concat_name + tmp_len + 1, wrapper); - - if (check_executable (concat_name)) - return concat_name; - XFREE (concat_name); - return NULL; -} - -char * -chase_symlinks (const char *pathspec) -{ -#ifndef S_ISLNK - return xstrdup (pathspec); -#else - char buf[LT_PATHMAX]; - struct stat s; - char *tmp_pathspec = xstrdup (pathspec); - char *p; - int has_symlinks = 0; - while (strlen (tmp_pathspec) && !has_symlinks) - { - lt_debugprintf (__FILE__, __LINE__, - "checking path component for symlinks: %s\n", - tmp_pathspec); - if (lstat (tmp_pathspec, &s) == 0) - { - if (S_ISLNK (s.st_mode) != 0) - { - has_symlinks = 1; - break; - } - - /* search backwards for last DIR_SEPARATOR */ - p = tmp_pathspec + strlen (tmp_pathspec) - 1; - while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - p--; - if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) - { - /* no more DIR_SEPARATORS left */ - break; - } - *p = '\0'; - } - else - { - lt_fatal (__FILE__, __LINE__, - "error accessing file \"%s\": %s", - tmp_pathspec, nonnull (strerror (errno))); - } - } - XFREE (tmp_pathspec); - - if (!has_symlinks) - { - return xstrdup (pathspec); - } - - tmp_pathspec = realpath (pathspec, buf); - if (tmp_pathspec == 0) - { - lt_fatal (__FILE__, __LINE__, - "could not follow symlinks for %s", pathspec); - } - return xstrdup (tmp_pathspec); -#endif -} - -char * -strendzap (char *str, const char *pat) -{ - size_t len, patlen; - - assert (str != NULL); - assert (pat != NULL); - - len = strlen (str); - patlen = strlen (pat); - - if (patlen <= len) - { - str += len - patlen; - if (strcmp (str, pat) == 0) - *str = '\0'; - } - return str; -} - -void -lt_debugprintf (const char *file, int line, const char *fmt, ...) -{ - va_list args; - if (lt_debug) - { - (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); - va_start (args, fmt); - (void) vfprintf (stderr, fmt, args); - va_end (args); - } -} - -static void -lt_error_core (int exit_status, const char *file, - int line, const char *mode, - const char *message, va_list ap) -{ - fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); - vfprintf (stderr, message, ap); - fprintf (stderr, ".\n"); - - if (exit_status >= 0) - exit (exit_status); -} - -void -lt_fatal (const char *file, int line, const char *message, ...) -{ - va_list ap; - va_start (ap, message); - lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); - va_end (ap); -} - -static const char * -nonnull (const char *s) -{ - return s ? s : "(null)"; -} - -static const char * -nonempty (const char *s) -{ - return (s && !*s) ? "(empty)" : nonnull (s); -} - -void -lt_setenv (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_setenv) setting '%s' to '%s'\n", - nonnull (name), nonnull (value)); - { -#ifdef HAVE_SETENV - /* always make a copy, for consistency with !HAVE_SETENV */ - char *str = xstrdup (value); - setenv (name, str, 1); -#else - int len = strlen (name) + 1 + strlen (value) + 1; - char *str = XMALLOC (char, len); - sprintf (str, "%s=%s", name, value); - if (putenv (str) != EXIT_SUCCESS) - { - XFREE (str); - } -#endif - } -} - -char * -lt_extend_str (const char *orig_value, const char *add, int to_end) -{ - char *new_value; - if (orig_value && *orig_value) - { - int orig_value_len = strlen (orig_value); - int add_len = strlen (add); - new_value = XMALLOC (char, add_len + orig_value_len + 1); - if (to_end) - { - strcpy (new_value, orig_value); - strcpy (new_value + orig_value_len, add); - } - else - { - strcpy (new_value, add); - strcpy (new_value + add_len, orig_value); - } - } - else - { - new_value = xstrdup (add); - } - return new_value; -} - -void -lt_update_exe_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - /* some systems can't cope with a ':'-terminated path #' */ - int len = strlen (new_value); - while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1])) - { - new_value[len-1] = '\0'; - } - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -void -lt_update_lib_path (const char *name, const char *value) -{ - lt_debugprintf (__FILE__, __LINE__, - "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", - nonnull (name), nonnull (value)); - - if (name && *name && value && *value) - { - char *new_value = lt_extend_str (getenv (name), value, 0); - lt_setenv (name, new_value); - XFREE (new_value); - } -} - -EOF - case $host_os in - mingw*) - cat <<"EOF" - -/* Prepares an argument vector before calling spawn(). - Note that spawn() does not by itself call the command interpreter - (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : - ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); - GetVersionEx(&v); - v.dwPlatformId == VER_PLATFORM_WIN32_NT; - }) ? "cmd.exe" : "command.com"). - Instead it simply concatenates the arguments, separated by ' ', and calls - CreateProcess(). We must quote the arguments since Win32 CreateProcess() - interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a - special way: - - Space and tab are interpreted as delimiters. They are not treated as - delimiters if they are surrounded by double quotes: "...". - - Unescaped double quotes are removed from the input. Their only effect is - that within double quotes, space and tab are treated like normal - characters. - - Backslashes not followed by double quotes are not special. - - But 2*n+1 backslashes followed by a double quote become - n backslashes followed by a double quote (n >= 0): - \" -> " - \\\" -> \" - \\\\\" -> \\" - */ -#define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -#define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" -char ** -prepare_spawn (char **argv) -{ - size_t argc; - char **new_argv; - size_t i; - - /* Count number of arguments. */ - for (argc = 0; argv[argc] != NULL; argc++) - ; - - /* Allocate new argument vector. */ - new_argv = XMALLOC (char *, argc + 1); - - /* Put quoted arguments into the new argument vector. */ - for (i = 0; i < argc; i++) - { - const char *string = argv[i]; - - if (string[0] == '\0') - new_argv[i] = xstrdup ("\"\""); - else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) - { - int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); - size_t length; - unsigned int backslashes; - const char *s; - char *quoted_string; - char *p; - - length = 0; - backslashes = 0; - if (quote_around) - length++; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - length += backslashes + 1; - length++; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - length += backslashes + 1; - - quoted_string = XMALLOC (char, length + 1); - - p = quoted_string; - backslashes = 0; - if (quote_around) - *p++ = '"'; - for (s = string; *s != '\0'; s++) - { - char c = *s; - if (c == '"') - { - unsigned int j; - for (j = backslashes + 1; j > 0; j--) - *p++ = '\\'; - } - *p++ = c; - if (c == '\\') - backslashes++; - else - backslashes = 0; - } - if (quote_around) - { - unsigned int j; - for (j = backslashes; j > 0; j--) - *p++ = '\\'; - *p++ = '"'; - } - *p = '\0'; - - new_argv[i] = quoted_string; - } - else - new_argv[i] = (char *) string; - } - new_argv[argc] = NULL; - - return new_argv; -} -EOF - ;; - esac - - cat <<"EOF" -void lt_dump_script (FILE* f) -{ -EOF - func_emit_wrapper yes | - $SED -n -e ' -s/^\(.\{79\}\)\(..*\)/\1\ -\2/ -h -s/\([\\"]\)/\\\1/g -s/$/\\n/ -s/\([^\n]*\).*/ fputs ("\1", f);/p -g -D' - cat <<"EOF" -} -EOF -} -# end: func_emit_cwrapperexe_src - -# func_win32_import_lib_p ARG -# True if ARG is an import lib, as indicated by $file_magic_cmd -func_win32_import_lib_p () -{ - $opt_debug - case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in - *import*) : ;; - *) false ;; - esac -} - -# func_mode_link arg... -func_mode_link () -{ - $opt_debug - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - # It is impossible to link a dll without this setting, and - # we shouldn't force the makefile maintainer to figure out - # which system we are compiling for in order to pass an extra - # flag for every libtool invocation. - # allow_undefined=no - - # FIXME: Unfortunately, there are problems with the above when trying - # to make a dll which has undefined symbols, in which case not - # even a static library is built. For now, we need to specify - # -no-undefined on the libtool link line when we can be certain - # that all symbols are satisfied, otherwise we get a static library. - allow_undefined=yes - ;; - *) - allow_undefined=yes - ;; - esac - libtool_args=$nonopt - base_compile="$nonopt $@" - compile_command=$nonopt - finalize_command=$nonopt - - compile_rpath= - finalize_rpath= - compile_shlibpath= - finalize_shlibpath= - convenience= - old_convenience= - deplibs= - old_deplibs= - compiler_flags= - linker_flags= - dllsearchpath= - lib_search_path=`pwd` - inst_prefix_dir= - new_inherited_linker_flags= - - avoid_version=no - bindir= - dlfiles= - dlprefiles= - dlself=no - export_dynamic=no - export_symbols= - export_symbols_regex= - generated= - libobjs= - ltlibs= - module=no - no_install=no - objs= - non_pic_objects= - precious_files_regex= - prefer_static_libs=no - preload=no - prev= - prevarg= - release= - rpath= - xrpath= - perm_rpath= - temp_rpath= - thread_safe=no - vinfo= - vinfo_number=no - weak_libs= - single_module="${wl}-single_module" - func_infer_tag $base_compile - - # We need to know -static, to get the right output filenames. - for arg - do - case $arg in - -shared) - test "$build_libtool_libs" != yes && \ - func_fatal_configuration "can not build a shared library" - build_old_libs=no - break - ;; - -all-static | -static | -static-libtool-libs) - case $arg in - -all-static) - if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then - func_warning "complete static linking is impossible in this configuration" - fi - if test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - -static) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=built - ;; - -static-libtool-libs) - if test -z "$pic_flag" && test -n "$link_static_flag"; then - dlopen_self=$dlopen_self_static - fi - prefer_static_libs=yes - ;; - esac - build_libtool_libs=no - build_old_libs=yes - break - ;; - esac - done - - # See if our shared archives depend on static archives. - test -n "$old_archive_from_new_cmds" && build_old_libs=yes - - # Go through the arguments, transforming them on the way. - while test "$#" -gt 0; do - arg="$1" - shift - func_quote_for_eval "$arg" - qarg=$func_quote_for_eval_unquoted_result - func_append libtool_args " $func_quote_for_eval_result" - - # If the previous option needs an argument, assign it. - if test -n "$prev"; then - case $prev in - output) - func_append compile_command " @OUTPUT@" - func_append finalize_command " @OUTPUT@" - ;; - esac - - case $prev in - bindir) - bindir="$arg" - prev= - continue - ;; - dlfiles|dlprefiles) - if test "$preload" = no; then - # Add the symbol object into the linking commands. - func_append compile_command " @SYMFILE@" - func_append finalize_command " @SYMFILE@" - preload=yes - fi - case $arg in - *.la | *.lo) ;; # We handle these cases below. - force) - if test "$dlself" = no; then - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - self) - if test "$prev" = dlprefiles; then - dlself=yes - elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then - dlself=yes - else - dlself=needless - export_dynamic=yes - fi - prev= - continue - ;; - *) - if test "$prev" = dlfiles; then - func_append dlfiles " $arg" - else - func_append dlprefiles " $arg" - fi - prev= - continue - ;; - esac - ;; - expsyms) - export_symbols="$arg" - test -f "$arg" \ - || func_fatal_error "symbol file \`$arg' does not exist" - prev= - continue - ;; - expsyms_regex) - export_symbols_regex="$arg" - prev= - continue - ;; - framework) - case $host in - *-*-darwin*) - case "$deplibs " in - *" $qarg.ltframework "*) ;; - *) func_append deplibs " $qarg.ltframework" # this is fixed later - ;; - esac - ;; - esac - prev= - continue - ;; - inst_prefix) - inst_prefix_dir="$arg" - prev= - continue - ;; - objectlist) - if test -f "$arg"; then - save_arg=$arg - moreargs= - for fil in `cat "$save_arg"` - do -# func_append moreargs " $fil" - arg=$fil - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - done - else - func_fatal_error "link input file \`$arg' does not exist" - fi - arg=$save_arg - prev= - continue - ;; - precious_regex) - precious_files_regex="$arg" - prev= - continue - ;; - release) - release="-$arg" - prev= - continue - ;; - rpath | xrpath) - # We need an absolute path. - case $arg in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - if test "$prev" = rpath; then - case "$rpath " in - *" $arg "*) ;; - *) func_append rpath " $arg" ;; - esac - else - case "$xrpath " in - *" $arg "*) ;; - *) func_append xrpath " $arg" ;; - esac - fi - prev= - continue - ;; - shrext) - shrext_cmds="$arg" - prev= - continue - ;; - weak) - func_append weak_libs " $arg" - prev= - continue - ;; - xcclinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xcompiler) - func_append compiler_flags " $qarg" - prev= - func_append compile_command " $qarg" - func_append finalize_command " $qarg" - continue - ;; - xlinker) - func_append linker_flags " $qarg" - func_append compiler_flags " $wl$qarg" - prev= - func_append compile_command " $wl$qarg" - func_append finalize_command " $wl$qarg" - continue - ;; - *) - eval "$prev=\"\$arg\"" - prev= - continue - ;; - esac - fi # test -n "$prev" - - prevarg="$arg" - - case $arg in - -all-static) - if test -n "$link_static_flag"; then - # See comment for -static flag below, for more details. - func_append compile_command " $link_static_flag" - func_append finalize_command " $link_static_flag" - fi - continue - ;; - - -allow-undefined) - # FIXME: remove this flag sometime in the future. - func_fatal_error "\`-allow-undefined' must not be used because it is the default" - ;; - - -avoid-version) - avoid_version=yes - continue - ;; - - -bindir) - prev=bindir - continue - ;; - - -dlopen) - prev=dlfiles - continue - ;; - - -dlpreopen) - prev=dlprefiles - continue - ;; - - -export-dynamic) - export_dynamic=yes - continue - ;; - - -export-symbols | -export-symbols-regex) - if test -n "$export_symbols" || test -n "$export_symbols_regex"; then - func_fatal_error "more than one -exported-symbols argument is not allowed" - fi - if test "X$arg" = "X-export-symbols"; then - prev=expsyms - else - prev=expsyms_regex - fi - continue - ;; - - -framework) - prev=framework - continue - ;; - - -inst-prefix-dir) - prev=inst_prefix - continue - ;; - - # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* - # so, if we see these flags be careful not to treat them like -L - -L[A-Z][A-Z]*:*) - case $with_gcc/$host in - no/*-*-irix* | /*-*-irix*) - func_append compile_command " $arg" - func_append finalize_command " $arg" - ;; - esac - continue - ;; - - -L*) - func_stripname "-L" '' "$arg" - if test -z "$func_stripname_result"; then - if test "$#" -gt 0; then - func_fatal_error "require no space between \`-L' and \`$1'" - else - func_fatal_error "need path for \`-L' option" - fi - fi - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - *) - absdir=`cd "$dir" && pwd` - test -z "$absdir" && \ - func_fatal_error "cannot determine absolute directory name of \`$dir'" - dir="$absdir" - ;; - esac - case "$deplibs " in - *" -L$dir "* | *" $arg "*) - # Will only happen for absolute or sysroot arguments - ;; - *) - # Preserve sysroot, but never include relative directories - case $dir in - [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; - *) func_append deplibs " -L$dir" ;; - esac - func_append lib_search_path " $dir" - ;; - esac - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$dir:"*) ;; - ::) dllsearchpath=$dir;; - *) func_append dllsearchpath ":$dir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - continue - ;; - - -l*) - if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) - # These systems don't actually have a C or math library (as such) - continue - ;; - *-*-os2*) - # These systems don't actually have a C library (as such) - test "X$arg" = "X-lc" && continue - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - test "X$arg" = "X-lc" && continue - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C and math libraries are in the System framework - func_append deplibs " System.ltframework" - continue - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - test "X$arg" = "X-lc" && continue - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - test "X$arg" = "X-lc" && continue - ;; - esac - elif test "X$arg" = "X-lc_r"; then - case $host in - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc_r directly, use -pthread flag. - continue - ;; - esac - fi - func_append deplibs " $arg" - continue - ;; - - -module) - module=yes - continue - ;; - - # Tru64 UNIX uses -model [arg] to determine the layout of C++ - # classes, name mangling, and exception handling. - # Darwin uses the -arch flag to determine output architecture. - -model|-arch|-isysroot|--sysroot) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - prev=xcompiler - continue - ;; - - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - func_append compiler_flags " $arg" - func_append compile_command " $arg" - func_append finalize_command " $arg" - case "$new_inherited_linker_flags " in - *" $arg "*) ;; - * ) func_append new_inherited_linker_flags " $arg" ;; - esac - continue - ;; - - -multi_module) - single_module="${wl}-multi_module" - continue - ;; - - -no-fast-install) - fast_install=no - continue - ;; - - -no-install) - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) - # The PATH hackery in wrapper scripts is required on Windows - # and Darwin in order for the loader to find any dlls it needs. - func_warning "\`-no-install' is ignored for $host" - func_warning "assuming \`-no-fast-install' instead" - fast_install=no - ;; - *) no_install=yes ;; - esac - continue - ;; - - -no-undefined) - allow_undefined=no - continue - ;; - - -objectlist) - prev=objectlist - continue - ;; - - -o) prev=output ;; - - -precious-files-regex) - prev=precious_regex - continue - ;; - - -release) - prev=release - continue - ;; - - -rpath) - prev=rpath - continue - ;; - - -R) - prev=xrpath - continue - ;; - - -R*) - func_stripname '-R' '' "$arg" - dir=$func_stripname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) ;; - =*) - func_stripname '=' '' "$dir" - dir=$lt_sysroot$func_stripname_result - ;; - *) - func_fatal_error "only absolute run-paths are allowed" - ;; - esac - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - continue - ;; - - -shared) - # The effects of -shared are defined in a previous loop. - continue - ;; - - -shrext) - prev=shrext - continue - ;; - - -static | -static-libtool-libs) - # The effects of -static are defined in a previous loop. - # We used to do the same as -all-static on platforms that - # didn't have a PIC flag, but the assumption that the effects - # would be equivalent was wrong. It would break on at least - # Digital Unix and AIX. - continue - ;; - - -thread-safe) - thread_safe=yes - continue - ;; - - -version-info) - prev=vinfo - continue - ;; - - -version-number) - prev=vinfo - vinfo_number=yes - continue - ;; - - -weak) - prev=weak - continue - ;; - - -Wc,*) - func_stripname '-Wc,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $func_quote_for_eval_result" - func_append compiler_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Wl,*) - func_stripname '-Wl,' '' "$arg" - args=$func_stripname_result - arg= - save_ifs="$IFS"; IFS=',' - for flag in $args; do - IFS="$save_ifs" - func_quote_for_eval "$flag" - func_append arg " $wl$func_quote_for_eval_result" - func_append compiler_flags " $wl$func_quote_for_eval_result" - func_append linker_flags " $func_quote_for_eval_result" - done - IFS="$save_ifs" - func_stripname ' ' '' "$arg" - arg=$func_stripname_result - ;; - - -Xcompiler) - prev=xcompiler - continue - ;; - - -Xlinker) - prev=xlinker - continue - ;; - - -XCClinker) - prev=xcclinker - continue - ;; - - # -msg_* for osf cc - -msg_*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - # Flags to be passed through unchanged, with rationale: - # -64, -mips[0-9] enable 64-bit mode for the SGI compiler - # -r[0-9][0-9]* specify processor for the SGI compiler - # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler - # +DA*, +DD* enable 64-bit mode for the HP compiler - # -q* compiler args for the IBM compiler - # -m*, -t[45]*, -txscale* architecture-specific flags for GCC - # -F/path path to uninstalled frameworks, gcc on darwin - # -p, -pg, --coverage, -fprofile-* profiling flags for GCC - # @file GCC response files - # -tp=* Portland pgcc target processor selection - # --sysroot=* for sysroot support - # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization - -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ - -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ - -O*|-flto*|-fwhopr*|-fuse-linker-plugin) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - func_append compile_command " $arg" - func_append finalize_command " $arg" - func_append compiler_flags " $arg" - continue - ;; - - # Some other compiler flag. - -* | +*) - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - - *.$objext) - # A standard object. - func_append objs " $arg" - ;; - - *.lo) - # A libtool-controlled object. - - # Check to see that this really is a libtool object. - if func_lalib_unsafe_p "$arg"; then - pic_object= - non_pic_object= - - # Read the .lo file - func_source "$arg" - - if test -z "$pic_object" || - test -z "$non_pic_object" || - test "$pic_object" = none && - test "$non_pic_object" = none; then - func_fatal_error "cannot find name of object for \`$arg'" - fi - - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - if test "$pic_object" != none; then - # Prepend the subdirectory the object is found in. - pic_object="$xdir$pic_object" - - if test "$prev" = dlfiles; then - if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then - func_append dlfiles " $pic_object" - prev= - continue - else - # If libtool objects are unsupported, then we need to preload. - prev=dlprefiles - fi - fi - - # CHECK ME: I think I busted this. -Ossama - if test "$prev" = dlprefiles; then - # Preload the old-style object. - func_append dlprefiles " $pic_object" - prev= - fi - - # A PIC object. - func_append libobjs " $pic_object" - arg="$pic_object" - fi - - # Non-PIC object. - if test "$non_pic_object" != none; then - # Prepend the subdirectory the object is found in. - non_pic_object="$xdir$non_pic_object" - - # A standard non-PIC object - func_append non_pic_objects " $non_pic_object" - if test -z "$pic_object" || test "$pic_object" = none ; then - arg="$non_pic_object" - fi - else - # If the PIC object exists, use it instead. - # $xdir was prepended to $pic_object above. - non_pic_object="$pic_object" - func_append non_pic_objects " $non_pic_object" - fi - else - # Only an error if not doing a dry-run. - if $opt_dry_run; then - # Extract subdirectory from the argument. - func_dirname "$arg" "/" "" - xdir="$func_dirname_result" - - func_lo2o "$arg" - pic_object=$xdir$objdir/$func_lo2o_result - non_pic_object=$xdir$func_lo2o_result - func_append libobjs " $pic_object" - func_append non_pic_objects " $non_pic_object" - else - func_fatal_error "\`$arg' is not a valid libtool object" - fi - fi - ;; - - *.$libext) - # An archive. - func_append deplibs " $arg" - func_append old_deplibs " $arg" - continue - ;; - - *.la) - # A libtool-controlled library. - - func_resolve_sysroot "$arg" - if test "$prev" = dlfiles; then - # This library was specified with -dlopen. - func_append dlfiles " $func_resolve_sysroot_result" - prev= - elif test "$prev" = dlprefiles; then - # The library was specified with -dlpreopen. - func_append dlprefiles " $func_resolve_sysroot_result" - prev= - else - func_append deplibs " $func_resolve_sysroot_result" - fi - continue - ;; - - # Some other compiler argument. - *) - # Unknown arguments in both finalize_command and compile_command need - # to be aesthetically quoted because they are evaled later. - func_quote_for_eval "$arg" - arg="$func_quote_for_eval_result" - ;; - esac # arg - - # Now actually substitute the argument into the commands. - if test -n "$arg"; then - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - done # argument parsing loop - - test -n "$prev" && \ - func_fatal_help "the \`$prevarg' option requires an argument" - - if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then - eval arg=\"$export_dynamic_flag_spec\" - func_append compile_command " $arg" - func_append finalize_command " $arg" - fi - - oldlibs= - # calculate the name of the file, without its directory - func_basename "$output" - outputname="$func_basename_result" - libobjs_save="$libobjs" - - if test -n "$shlibpath_var"; then - # get the directories listed in $shlibpath_var - eval shlib_search_path=\`\$ECHO \"\${$shlibpath_var}\" \| \$SED \'s/:/ /g\'\` - else - shlib_search_path= - fi - eval sys_lib_search_path=\"$sys_lib_search_path_spec\" - eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" - - func_dirname "$output" "/" "" - output_objdir="$func_dirname_result$objdir" - func_to_tool_file "$output_objdir/" - tool_output_objdir=$func_to_tool_file_result - # Create the object directory. - func_mkdir_p "$output_objdir" - - # Determine the type of output - case $output in - "") - func_fatal_help "you must specify an output file" - ;; - *.$libext) linkmode=oldlib ;; - *.lo | *.$objext) linkmode=obj ;; - *.la) linkmode=lib ;; - *) linkmode=prog ;; # Anything else should be a program. - esac - - specialdeplibs= - - libs= - # Find all interdependent deplibs by searching for libraries - # that are linked more than once (e.g. -la -lb -la) - for deplib in $deplibs; do - if $opt_preserve_dup_deps ; then - case "$libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append libs " $deplib" - done - - if test "$linkmode" = lib; then - libs="$predeps $libs $compiler_lib_search_path $postdeps" - - # Compute libraries that are listed more than once in $predeps - # $postdeps and mark them as special (i.e., whose duplicates are - # not to be eliminated). - pre_post_deps= - if $opt_duplicate_compiler_generated_deps; then - for pre_post_dep in $predeps $postdeps; do - case "$pre_post_deps " in - *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; - esac - func_append pre_post_deps " $pre_post_dep" - done - fi - pre_post_deps= - fi - - deplibs= - newdependency_libs= - newlib_search_path= - need_relink=no # whether we're linking any uninstalled libtool libraries - notinst_deplibs= # not-installed libtool libraries - notinst_path= # paths that contain not-installed libtool libraries - - case $linkmode in - lib) - passes="conv dlpreopen link" - for file in $dlfiles $dlprefiles; do - case $file in - *.la) ;; - *) - func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file" - ;; - esac - done - ;; - prog) - compile_deplibs= - finalize_deplibs= - alldeplibs=no - newdlfiles= - newdlprefiles= - passes="conv scan dlopen dlpreopen link" - ;; - *) passes="conv" - ;; - esac - - for pass in $passes; do - # The preopen pass in lib mode reverses $deplibs; put it back here - # so that -L comes before libs that need it for instance... - if test "$linkmode,$pass" = "lib,link"; then - ## FIXME: Find the place where the list is rebuilt in the wrong - ## order, and fix it there properly - tmp_deplibs= - for deplib in $deplibs; do - tmp_deplibs="$deplib $tmp_deplibs" - done - deplibs="$tmp_deplibs" - fi - - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan"; then - libs="$deplibs" - deplibs= - fi - if test "$linkmode" = prog; then - case $pass in - dlopen) libs="$dlfiles" ;; - dlpreopen) libs="$dlprefiles" ;; - link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; - esac - fi - if test "$linkmode,$pass" = "lib,dlpreopen"; then - # Collect and forward deplibs of preopened libtool libs - for lib in $dlprefiles; do - # Ignore non-libtool-libs - dependency_libs= - func_resolve_sysroot "$lib" - case $lib in - *.la) func_source "$func_resolve_sysroot_result" ;; - esac - - # Collect preopened libtool deplibs, except any this library - # has declared as weak libs - for deplib in $dependency_libs; do - func_basename "$deplib" - deplib_base=$func_basename_result - case " $weak_libs " in - *" $deplib_base "*) ;; - *) func_append deplibs " $deplib" ;; - esac - done - done - libs="$dlprefiles" - fi - if test "$pass" = dlopen; then - # Collect dlpreopened libraries - save_deplibs="$deplibs" - deplibs= - fi - - for deplib in $libs; do - lib= - found=no - case $deplib in - -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ - |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append compiler_flags " $deplib" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -l*) - if test "$linkmode" != lib && test "$linkmode" != prog; then - func_warning "\`-l' is ignored for archives/objects" - continue - fi - func_stripname '-l' '' "$deplib" - name=$func_stripname_result - if test "$linkmode" = lib; then - searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" - else - searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" - fi - for searchdir in $searchdirs; do - for search_ext in .la $std_shrext .so .a; do - # Search the libtool library - lib="$searchdir/lib${name}${search_ext}" - if test -f "$lib"; then - if test "$search_ext" = ".la"; then - found=yes - else - found=no - fi - break 2 - fi - done - done - if test "$found" != yes; then - # deplib doesn't seem to be a libtool library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - else # deplib is a libtool library - # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, - # We need to do some special things here, and not later. - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $deplib "*) - if func_lalib_p "$lib"; then - library_names= - old_library= - func_source "$lib" - for l in $old_library $library_names; do - ll="$l" - done - if test "X$ll" = "X$old_library" ; then # only static version available - found=no - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - lib=$ladir/$old_library - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs" - fi - continue - fi - fi - ;; - *) ;; - esac - fi - fi - ;; # -l - *.ltframework) - if test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - deplibs="$deplib $deplibs" - if test "$linkmode" = lib ; then - case "$new_inherited_linker_flags " in - *" $deplib "*) ;; - * ) func_append new_inherited_linker_flags " $deplib" ;; - esac - fi - fi - continue - ;; - -L*) - case $linkmode in - lib) - deplibs="$deplib $deplibs" - test "$pass" = conv && continue - newdependency_libs="$deplib $newdependency_libs" - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - prog) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - if test "$pass" = scan; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - *) - func_warning "\`-L' is ignored for archives/objects" - ;; - esac # linkmode - continue - ;; # -L - -R*) - if test "$pass" = link; then - func_stripname '-R' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - dir=$func_resolve_sysroot_result - # Make sure the xrpath contains only unique directories. - case "$xrpath " in - *" $dir "*) ;; - *) func_append xrpath " $dir" ;; - esac - fi - deplibs="$deplib $deplibs" - continue - ;; - *.la) - func_resolve_sysroot "$deplib" - lib=$func_resolve_sysroot_result - ;; - *.$libext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - continue - fi - case $linkmode in - lib) - # Linking convenience modules into shared libraries is allowed, - # but linking other static libraries is non-portable. - case " $dlpreconveniencelibs " in - *" $deplib "*) ;; - *) - valid_a_lib=no - case $deplibs_check_method in - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ - | $EGREP "$match_pattern_regex" > /dev/null; then - valid_a_lib=yes - fi - ;; - pass_all) - valid_a_lib=yes - ;; - esac - if test "$valid_a_lib" != yes; then - echo - $ECHO "*** Warning: Trying to link with static lib archive $deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because the file extensions .$libext of this argument makes me believe" - echo "*** that it is just a static archive that I should not use here." - else - echo - $ECHO "*** Warning: Linking the shared library $output against the" - $ECHO "*** static library $deplib is not portable!" - deplibs="$deplib $deplibs" - fi - ;; - esac - continue - ;; - prog) - if test "$pass" != link; then - deplibs="$deplib $deplibs" - else - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - fi - continue - ;; - esac # linkmode - ;; # *.$libext - *.lo | *.$objext) - if test "$pass" = conv; then - deplibs="$deplib $deplibs" - elif test "$linkmode" = prog; then - if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then - # If there is no dlopen support or we're linking statically, - # we need to preload. - func_append newdlprefiles " $deplib" - compile_deplibs="$deplib $compile_deplibs" - finalize_deplibs="$deplib $finalize_deplibs" - else - func_append newdlfiles " $deplib" - fi - fi - continue - ;; - %DEPLIBS%) - alldeplibs=yes - continue - ;; - esac # case $deplib - - if test "$found" = yes || test -f "$lib"; then : - else - func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'" - fi - - # Check to see that this really is a libtool archive. - func_lalib_unsafe_p "$lib" \ - || func_fatal_error "\`$lib' is not a valid libtool archive" - - func_dirname "$lib" "" "." - ladir="$func_dirname_result" - - dlname= - dlopen= - dlpreopen= - libdir= - library_names= - old_library= - inherited_linker_flags= - # If the library was installed with an old release of libtool, - # it will not redefine variables installed, or shouldnotlink - installed=yes - shouldnotlink=no - avoidtemprpath= - - - # Read the .la file - func_source "$lib" - - # Convert "-framework foo" to "foo.ltframework" - if test -n "$inherited_linker_flags"; then - tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` - for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do - case " $new_inherited_linker_flags " in - *" $tmp_inherited_linker_flag "*) ;; - *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; - esac - done - fi - dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - if test "$linkmode,$pass" = "lib,link" || - test "$linkmode,$pass" = "prog,scan" || - { test "$linkmode" != prog && test "$linkmode" != lib; }; then - test -n "$dlopen" && func_append dlfiles " $dlopen" - test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" - fi - - if test "$pass" = conv; then - # Only check for convenience libraries - deplibs="$lib $deplibs" - if test -z "$libdir"; then - if test -z "$old_library"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - # It is a libtool convenience library, so add in its objects. - func_append convenience " $ladir/$objdir/$old_library" - func_append old_convenience " $ladir/$objdir/$old_library" - elif test "$linkmode" != prog && test "$linkmode" != lib; then - func_fatal_error "\`$lib' is not a convenience library" - fi - tmp_libs= - for deplib in $dependency_libs; do - deplibs="$deplib $deplibs" - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done - continue - fi # $pass = conv - - - # Get the name of the library we link against. - linklib= - if test -n "$old_library" && - { test "$prefer_static_libs" = yes || - test "$prefer_static_libs,$installed" = "built,no"; }; then - linklib=$old_library - else - for l in $old_library $library_names; do - linklib="$l" - done - fi - if test -z "$linklib"; then - func_fatal_error "cannot find name of link library for \`$lib'" - fi - - # This library was specified with -dlopen. - if test "$pass" = dlopen; then - if test -z "$libdir"; then - func_fatal_error "cannot -dlopen a convenience library: \`$lib'" - fi - if test -z "$dlname" || - test "$dlopen_support" != yes || - test "$build_libtool_libs" = no; then - # If there is no dlname, no dlopen support or we're linking - # statically, we need to preload. We also need to preload any - # dependent libraries so libltdl's deplib preloader doesn't - # bomb out in the load deplibs phase. - func_append dlprefiles " $lib $dependency_libs" - else - func_append newdlfiles " $lib" - fi - continue - fi # $pass = dlopen - - # We need an absolute path. - case $ladir in - [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;; - *) - abs_ladir=`cd "$ladir" && pwd` - if test -z "$abs_ladir"; then - func_warning "cannot determine absolute directory name of \`$ladir'" - func_warning "passing it literally to the linker, although it might fail" - abs_ladir="$ladir" - fi - ;; - esac - func_basename "$lib" - laname="$func_basename_result" - - # Find the relevant object directory and library name. - if test "X$installed" = Xyes; then - if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then - func_warning "library \`$lib' was moved." - dir="$ladir" - absdir="$abs_ladir" - libdir="$abs_ladir" - else - dir="$lt_sysroot$libdir" - absdir="$lt_sysroot$libdir" - fi - test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes - else - if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then - dir="$ladir" - absdir="$abs_ladir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - else - dir="$ladir/$objdir" - absdir="$abs_ladir/$objdir" - # Remove this search path later - func_append notinst_path " $abs_ladir" - fi - fi # $installed = yes - func_stripname 'lib' '.la' "$laname" - name=$func_stripname_result - - # This library was specified with -dlpreopen. - if test "$pass" = dlpreopen; then - if test -z "$libdir" && test "$linkmode" = prog; then - func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'" - fi - case "$host" in - # special handling for platforms with PE-DLLs. - *cygwin* | *mingw* | *cegcc* ) - # Linker will automatically link against shared library if both - # static and shared are present. Therefore, ensure we extract - # symbols from the import library if a shared library is present - # (otherwise, the dlopen module name will be incorrect). We do - # this by putting the import library name into $newdlprefiles. - # We recover the dlopen module name by 'saving' the la file - # name in a special purpose variable, and (later) extracting the - # dlname from the la file. - if test -n "$dlname"; then - func_tr_sh "$dir/$linklib" - eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" - func_append newdlprefiles " $dir/$linklib" - else - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - fi - ;; - * ) - # Prefer using a static library (so that no silly _DYNAMIC symbols - # are required to link). - if test -n "$old_library"; then - func_append newdlprefiles " $dir/$old_library" - # Keep a list of preopened convenience libraries to check - # that they are being used correctly in the link pass. - test -z "$libdir" && \ - func_append dlpreconveniencelibs " $dir/$old_library" - # Otherwise, use the dlname, so that lt_dlopen finds it. - elif test -n "$dlname"; then - func_append newdlprefiles " $dir/$dlname" - else - func_append newdlprefiles " $dir/$linklib" - fi - ;; - esac - fi # $pass = dlpreopen - - if test -z "$libdir"; then - # Link the convenience library - if test "$linkmode" = lib; then - deplibs="$dir/$old_library $deplibs" - elif test "$linkmode,$pass" = "prog,link"; then - compile_deplibs="$dir/$old_library $compile_deplibs" - finalize_deplibs="$dir/$old_library $finalize_deplibs" - else - deplibs="$lib $deplibs" # used for prog,scan pass - fi - continue - fi - - - if test "$linkmode" = prog && test "$pass" != link; then - func_append newlib_search_path " $ladir" - deplibs="$lib $deplibs" - - linkalldeplibs=no - if test "$link_all_deplibs" != no || test -z "$library_names" || - test "$build_libtool_libs" = no; then - linkalldeplibs=yes - fi - - tmp_libs= - for deplib in $dependency_libs; do - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result" - func_append newlib_search_path " $func_resolve_sysroot_result" - ;; - esac - # Need to link against all dependency_libs? - if test "$linkalldeplibs" = yes; then - deplibs="$deplib $deplibs" - else - # Need to hardcode shared library paths - # or/and link against static libraries - newdependency_libs="$deplib $newdependency_libs" - fi - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $deplib "*) func_append specialdeplibs " $deplib" ;; - esac - fi - func_append tmp_libs " $deplib" - done # for deplib - continue - fi # $linkmode = prog... - - if test "$linkmode,$pass" = "prog,link"; then - if test -n "$library_names" && - { { test "$prefer_static_libs" = no || - test "$prefer_static_libs,$installed" = "built,yes"; } || - test -z "$old_library"; }; then - # We need to hardcode the library path - if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then - # Make sure the rpath contains only unique directories. - case "$temp_rpath:" in - *"$absdir:"*) ;; - *) func_append temp_rpath "$absdir:" ;; - esac - fi - - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi # $linkmode,$pass = prog,link... - - if test "$alldeplibs" = yes && - { test "$deplibs_check_method" = pass_all || - { test "$build_libtool_libs" = yes && - test -n "$library_names"; }; }; then - # We only need to search for static libraries - continue - fi - fi - - link_static=no # Whether the deplib will be linked statically - use_static_libs=$prefer_static_libs - if test "$use_static_libs" = built && test "$installed" = yes; then - use_static_libs=no - fi - if test -n "$library_names" && - { test "$use_static_libs" = no || test -z "$old_library"; }; then - case $host in - *cygwin* | *mingw* | *cegcc*) - # No point in relinking DLLs because paths are not encoded - func_append notinst_deplibs " $lib" - need_relink=no - ;; - *) - if test "$installed" = no; then - func_append notinst_deplibs " $lib" - need_relink=yes - fi - ;; - esac - # This is a shared library - - # Warn about portability, can't link against -module's on some - # systems (darwin). Don't bleat about dlopened modules though! - dlopenmodule="" - for dlpremoduletest in $dlprefiles; do - if test "X$dlpremoduletest" = "X$lib"; then - dlopenmodule="$dlpremoduletest" - break - fi - done - if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then - echo - if test "$linkmode" = prog; then - $ECHO "*** Warning: Linking the executable $output against the loadable module" - else - $ECHO "*** Warning: Linking the shared library $output against the loadable module" - fi - $ECHO "*** $linklib is not portable!" - fi - if test "$linkmode" = lib && - test "$hardcode_into_libs" = yes; then - # Hardcode the library path. - # Skip directories that are in the system default run-time - # search path. - case " $sys_lib_dlsearch_path " in - *" $absdir "*) ;; - *) - case "$compile_rpath " in - *" $absdir "*) ;; - *) func_append compile_rpath " $absdir" ;; - esac - ;; - esac - case " $sys_lib_dlsearch_path " in - *" $libdir "*) ;; - *) - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - ;; - esac - fi - - if test -n "$old_archive_from_expsyms_cmds"; then - # figure out the soname - set dummy $library_names - shift - realname="$1" - shift - libname=`eval "\\$ECHO \"$libname_spec\""` - # use dlname if we got it. it's perfectly good, no? - if test -n "$dlname"; then - soname="$dlname" - elif test -n "$soname_spec"; then - # bleh windows - case $host in - *cygwin* | mingw* | *cegcc*) - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - esac - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - - # Make a new name for the extract_expsyms_cmds to use - soroot="$soname" - func_basename "$soroot" - soname="$func_basename_result" - func_stripname 'lib' '.dll' "$soname" - newlib=libimp-$func_stripname_result.a - - # If the library has no export list, then create one now - if test -f "$output_objdir/$soname-def"; then : - else - func_verbose "extracting exported symbol list from \`$soname'" - func_execute_cmds "$extract_expsyms_cmds" 'exit $?' - fi - - # Create $newlib - if test -f "$output_objdir/$newlib"; then :; else - func_verbose "generating import library for \`$soname'" - func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' - fi - # make sure the library variables are pointing to the new library - dir=$output_objdir - linklib=$newlib - fi # test -n "$old_archive_from_expsyms_cmds" - - if test "$linkmode" = prog || test "$opt_mode" != relink; then - add_shlibpath= - add_dir= - add= - lib_linked=yes - case $hardcode_action in - immediate | unsupported) - if test "$hardcode_direct" = no; then - add="$dir/$linklib" - case $host in - *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;; - *-*-sysv4*uw2*) add_dir="-L$dir" ;; - *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ - *-*-unixware7*) add_dir="-L$dir" ;; - *-*-darwin* ) - # if the lib is a (non-dlopened) module then we can not - # link against it, someone is ignoring the earlier warnings - if /usr/bin/file -L $add 2> /dev/null | - $GREP ": [^:]* bundle" >/dev/null ; then - if test "X$dlopenmodule" != "X$lib"; then - $ECHO "*** Warning: lib $linklib is a module, not a shared library" - if test -z "$old_library" ; then - echo - echo "*** And there doesn't seem to be a static archive available" - echo "*** The link will probably fail, sorry" - else - add="$dir/$old_library" - fi - elif test -n "$old_library"; then - add="$dir/$old_library" - fi - fi - esac - elif test "$hardcode_minus_L" = no; then - case $host in - *-*-sunos*) add_shlibpath="$dir" ;; - esac - add_dir="-L$dir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = no; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - relink) - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$dir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$absdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - add_shlibpath="$dir" - add="-l$name" - else - lib_linked=no - fi - ;; - *) lib_linked=no ;; - esac - - if test "$lib_linked" != yes; then - func_fatal_configuration "unsupported hardcode properties" - fi - - if test -n "$add_shlibpath"; then - case :$compile_shlibpath: in - *":$add_shlibpath:"*) ;; - *) func_append compile_shlibpath "$add_shlibpath:" ;; - esac - fi - if test "$linkmode" = prog; then - test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" - test -n "$add" && compile_deplibs="$add $compile_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - if test "$hardcode_direct" != yes && - test "$hardcode_minus_L" != yes && - test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - fi - fi - fi - - if test "$linkmode" = prog || test "$opt_mode" = relink; then - add_shlibpath= - add_dir= - add= - # Finalize command for both is simple: just hardcode it. - if test "$hardcode_direct" = yes && - test "$hardcode_direct_absolute" = no; then - add="$libdir/$linklib" - elif test "$hardcode_minus_L" = yes; then - add_dir="-L$libdir" - add="-l$name" - elif test "$hardcode_shlibpath_var" = yes; then - case :$finalize_shlibpath: in - *":$libdir:"*) ;; - *) func_append finalize_shlibpath "$libdir:" ;; - esac - add="-l$name" - elif test "$hardcode_automatic" = yes; then - if test -n "$inst_prefix_dir" && - test -f "$inst_prefix_dir$libdir/$linklib" ; then - add="$inst_prefix_dir$libdir/$linklib" - else - add="$libdir/$linklib" - fi - else - # We cannot seem to hardcode it, guess we'll fake it. - add_dir="-L$libdir" - # Try looking first in the location we're being installed to. - if test -n "$inst_prefix_dir"; then - case $libdir in - [\\/]*) - func_append add_dir " -L$inst_prefix_dir$libdir" - ;; - esac - fi - add="-l$name" - fi - - if test "$linkmode" = prog; then - test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" - test -n "$add" && finalize_deplibs="$add $finalize_deplibs" - else - test -n "$add_dir" && deplibs="$add_dir $deplibs" - test -n "$add" && deplibs="$add $deplibs" - fi - fi - elif test "$linkmode" = prog; then - # Here we assume that one of hardcode_direct or hardcode_minus_L - # is not unsupported. This is valid on all known static and - # shared platforms. - if test "$hardcode_direct" != unsupported; then - test -n "$old_library" && linklib="$old_library" - compile_deplibs="$dir/$linklib $compile_deplibs" - finalize_deplibs="$dir/$linklib $finalize_deplibs" - else - compile_deplibs="-l$name -L$dir $compile_deplibs" - finalize_deplibs="-l$name -L$dir $finalize_deplibs" - fi - elif test "$build_libtool_libs" = yes; then - # Not a shared library - if test "$deplibs_check_method" != pass_all; then - # We're trying link a shared library against a static one - # but the system doesn't support it. - - # Just print a warning and add the library to dependency_libs so - # that the program can be linked against the static library. - echo - $ECHO "*** Warning: This system can not link to static lib archive $lib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have." - if test "$module" = yes; then - echo "*** But as you try to build a module library, libtool will still create " - echo "*** a static module, that should work as long as the dlopening application" - echo "*** is linked with the -dlopen flag to resolve symbols at runtime." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - else - deplibs="$dir/$old_library $deplibs" - link_static=yes - fi - fi # link shared/static library? - - if test "$linkmode" = lib; then - if test -n "$dependency_libs" && - { test "$hardcode_into_libs" != yes || - test "$build_old_libs" = yes || - test "$link_static" = yes; }; then - # Extract -R from dependency_libs - temp_deplibs= - for libdir in $dependency_libs; do - case $libdir in - -R*) func_stripname '-R' '' "$libdir" - temp_xrpath=$func_stripname_result - case " $xrpath " in - *" $temp_xrpath "*) ;; - *) func_append xrpath " $temp_xrpath";; - esac;; - *) func_append temp_deplibs " $libdir";; - esac - done - dependency_libs="$temp_deplibs" - fi - - func_append newlib_search_path " $absdir" - # Link against this library - test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs" - # ... and its dependency_libs - tmp_libs= - for deplib in $dependency_libs; do - newdependency_libs="$deplib $newdependency_libs" - case $deplib in - -L*) func_stripname '-L' '' "$deplib" - func_resolve_sysroot "$func_stripname_result";; - *) func_resolve_sysroot "$deplib" ;; - esac - if $opt_preserve_dup_deps ; then - case "$tmp_libs " in - *" $func_resolve_sysroot_result "*) - func_append specialdeplibs " $func_resolve_sysroot_result" ;; - esac - fi - func_append tmp_libs " $func_resolve_sysroot_result" - done - - if test "$link_all_deplibs" != no; then - # Add the search paths of all dependency libraries - for deplib in $dependency_libs; do - path= - case $deplib in - -L*) path="$deplib" ;; - *.la) - func_resolve_sysroot "$deplib" - deplib=$func_resolve_sysroot_result - func_dirname "$deplib" "" "." - dir=$func_dirname_result - # We need an absolute path. - case $dir in - [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; - *) - absdir=`cd "$dir" && pwd` - if test -z "$absdir"; then - func_warning "cannot determine absolute directory name of \`$dir'" - absdir="$dir" - fi - ;; - esac - if $GREP "^installed=no" $deplib > /dev/null; then - case $host in - *-*-darwin*) - depdepl= - eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` - if test -n "$deplibrary_names" ; then - for tmp in $deplibrary_names ; do - depdepl=$tmp - done - if test -f "$absdir/$objdir/$depdepl" ; then - depdepl="$absdir/$objdir/$depdepl" - darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - if test -z "$darwin_install_name"; then - darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` - fi - func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" - func_append linker_flags " -dylib_file ${darwin_install_name}:${depdepl}" - path= - fi - fi - ;; - *) - path="-L$absdir/$objdir" - ;; - esac - else - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - test "$absdir" != "$libdir" && \ - func_warning "\`$deplib' seems to be moved" - - path="-L$absdir" - fi - ;; - esac - case " $deplibs " in - *" $path "*) ;; - *) deplibs="$path $deplibs" ;; - esac - done - fi # link_all_deplibs != no - fi # linkmode = lib - done # for deplib in $libs - if test "$pass" = link; then - if test "$linkmode" = "prog"; then - compile_deplibs="$new_inherited_linker_flags $compile_deplibs" - finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" - else - compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - fi - fi - dependency_libs="$newdependency_libs" - if test "$pass" = dlpreopen; then - # Link the dlpreopened libraries before other libraries - for deplib in $save_deplibs; do - deplibs="$deplib $deplibs" - done - fi - if test "$pass" != dlopen; then - if test "$pass" != conv; then - # Make sure lib_search_path contains only unique directories. - lib_search_path= - for dir in $newlib_search_path; do - case "$lib_search_path " in - *" $dir "*) ;; - *) func_append lib_search_path " $dir" ;; - esac - done - newlib_search_path= - fi - - if test "$linkmode,$pass" != "prog,link"; then - vars="deplibs" - else - vars="compile_deplibs finalize_deplibs" - fi - for var in $vars dependency_libs; do - # Add libraries to $var in reverse order - eval tmp_libs=\"\$$var\" - new_libs= - for deplib in $tmp_libs; do - # FIXME: Pedantically, this is the right thing to do, so - # that some nasty dependency loop isn't accidentally - # broken: - #new_libs="$deplib $new_libs" - # Pragmatically, this seems to cause very few problems in - # practice: - case $deplib in - -L*) new_libs="$deplib $new_libs" ;; - -R*) ;; - *) - # And here is the reason: when a library appears more - # than once as an explicit dependence of a library, or - # is implicitly linked in more than once by the - # compiler, it is considered special, and multiple - # occurrences thereof are not removed. Compare this - # with having the same library being listed as a - # dependency of multiple other libraries: in this case, - # we know (pedantically, we assume) the library does not - # need to be listed more than once, so we keep only the - # last copy. This is not always right, but it is rare - # enough that we require users that really mean to play - # such unportable linking tricks to link the library - # using -Wl,-lname, so that libtool does not consider it - # for duplicate removal. - case " $specialdeplibs " in - *" $deplib "*) new_libs="$deplib $new_libs" ;; - *) - case " $new_libs " in - *" $deplib "*) ;; - *) new_libs="$deplib $new_libs" ;; - esac - ;; - esac - ;; - esac - done - tmp_libs= - for deplib in $new_libs; do - case $deplib in - -L*) - case " $tmp_libs " in - *" $deplib "*) ;; - *) func_append tmp_libs " $deplib" ;; - esac - ;; - *) func_append tmp_libs " $deplib" ;; - esac - done - eval $var=\"$tmp_libs\" - done # for var - fi - # Last step: remove runtime libs from dependency_libs - # (they stay in deplibs) - tmp_libs= - for i in $dependency_libs ; do - case " $predeps $postdeps $compiler_lib_search_path " in - *" $i "*) - i="" - ;; - esac - if test -n "$i" ; then - func_append tmp_libs " $i" - fi - done - dependency_libs=$tmp_libs - done # for pass - if test "$linkmode" = prog; then - dlfiles="$newdlfiles" - fi - if test "$linkmode" = prog || test "$linkmode" = lib; then - dlprefiles="$newdlprefiles" - fi - - case $linkmode in - oldlib) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for archives" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for archives" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for archives" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for archives" - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for archives" - - test -n "$release" && \ - func_warning "\`-release' is ignored for archives" - - test -n "$export_symbols$export_symbols_regex" && \ - func_warning "\`-export-symbols' is ignored for archives" - - # Now set the variables for building old libraries. - build_libtool_libs=no - oldlibs="$output" - func_append objs "$old_deplibs" - ;; - - lib) - # Make sure we only generate libraries of the form `libNAME.la'. - case $outputname in - lib*) - func_stripname 'lib' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - ;; - *) - test "$module" = no && \ - func_fatal_help "libtool library \`$output' must begin with \`lib'" - - if test "$need_lib_prefix" != no; then - # Add the "lib" prefix for modules if required - func_stripname '' '.la' "$outputname" - name=$func_stripname_result - eval shared_ext=\"$shrext_cmds\" - eval libname=\"$libname_spec\" - else - func_stripname '' '.la' "$outputname" - libname=$func_stripname_result - fi - ;; - esac - - if test -n "$objs"; then - if test "$deplibs_check_method" != pass_all; then - func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs" - else - echo - $ECHO "*** Warning: Linking the shared library $output against the non-libtool" - $ECHO "*** objects $objs is not portable!" - func_append libobjs " $objs" - fi - fi - - test "$dlself" != no && \ - func_warning "\`-dlopen self' is ignored for libtool libraries" - - set dummy $rpath - shift - test "$#" -gt 1 && \ - func_warning "ignoring multiple \`-rpath's for a libtool library" - - install_libdir="$1" - - oldlibs= - if test -z "$rpath"; then - if test "$build_libtool_libs" = yes; then - # Building a libtool convenience library. - # Some compilers have problems with a `.al' extension so - # convenience libraries should have the same extension an - # archive normally would. - oldlibs="$output_objdir/$libname.$libext $oldlibs" - build_libtool_libs=convenience - build_old_libs=yes - fi - - test -n "$vinfo" && \ - func_warning "\`-version-info/-version-number' is ignored for convenience libraries" - - test -n "$release" && \ - func_warning "\`-release' is ignored for convenience libraries" - else - - # Parse the version information argument. - save_ifs="$IFS"; IFS=':' - set dummy $vinfo 0 0 0 - shift - IFS="$save_ifs" - - test -n "$7" && \ - func_fatal_help "too many parameters to \`-version-info'" - - # convert absolute version numbers to libtool ages - # this retains compatibility with .la files and attempts - # to make the code below a bit more comprehensible - - case $vinfo_number in - yes) - number_major="$1" - number_minor="$2" - number_revision="$3" - # - # There are really only two kinds -- those that - # use the current revision as the major version - # and those that subtract age and use age as - # a minor version. But, then there is irix - # which has an extra 1 added just for fun - # - case $version_type in - # correct linux to gnu/linux during the next big refactor - darwin|linux|osf|windows|none) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_revision" - ;; - freebsd-aout|freebsd-elf|qnx|sunos) - current="$number_major" - revision="$number_minor" - age="0" - ;; - irix|nonstopux) - func_arith $number_major + $number_minor - current=$func_arith_result - age="$number_minor" - revision="$number_minor" - lt_irix_increment=no - ;; - esac - ;; - no) - current="$1" - revision="$2" - age="$3" - ;; - esac - - # Check that each of the things are valid numbers. - case $current in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "CURRENT \`$current' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $revision in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "REVISION \`$revision' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - case $age in - 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; - *) - func_error "AGE \`$age' must be a nonnegative integer" - func_fatal_error "\`$vinfo' is not valid version information" - ;; - esac - - if test "$age" -gt "$current"; then - func_error "AGE \`$age' is greater than the current interface number \`$current'" - func_fatal_error "\`$vinfo' is not valid version information" - fi - - # Calculate the version variables. - major= - versuffix= - verstring= - case $version_type in - none) ;; - - darwin) - # Like Linux, but with the current version available in - # verstring for coding it into the library header - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - # Darwin ld doesn't like 0 for these options... - func_arith $current + 1 - minor_current=$func_arith_result - xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision" - verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" - ;; - - freebsd-aout) - major=".$current" - versuffix=".$current.$revision"; - ;; - - freebsd-elf) - major=".$current" - versuffix=".$current" - ;; - - irix | nonstopux) - if test "X$lt_irix_increment" = "Xno"; then - func_arith $current - $age - else - func_arith $current - $age + 1 - fi - major=$func_arith_result - - case $version_type in - nonstopux) verstring_prefix=nonstopux ;; - *) verstring_prefix=sgi ;; - esac - verstring="$verstring_prefix$major.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$revision - while test "$loop" -ne 0; do - func_arith $revision - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring_prefix$major.$iface:$verstring" - done - - # Before this point, $major must not contain `.'. - major=.$major - versuffix="$major.$revision" - ;; - - linux) # correct to gnu/linux during the next big refactor - func_arith $current - $age - major=.$func_arith_result - versuffix="$major.$age.$revision" - ;; - - osf) - func_arith $current - $age - major=.$func_arith_result - versuffix=".$current.$age.$revision" - verstring="$current.$age.$revision" - - # Add in all the interfaces that we are compatible with. - loop=$age - while test "$loop" -ne 0; do - func_arith $current - $loop - iface=$func_arith_result - func_arith $loop - 1 - loop=$func_arith_result - verstring="$verstring:${iface}.0" - done - - # Make executables depend on our current version. - func_append verstring ":${current}.0" - ;; - - qnx) - major=".$current" - versuffix=".$current" - ;; - - sunos) - major=".$current" - versuffix=".$current.$revision" - ;; - - windows) - # Use '-' rather than '.', since we only want one - # extension on DOS 8.3 filesystems. - func_arith $current - $age - major=$func_arith_result - versuffix="-$major" - ;; - - *) - func_fatal_configuration "unknown library version type \`$version_type'" - ;; - esac - - # Clear the version info if we defaulted, and they specified a release. - if test -z "$vinfo" && test -n "$release"; then - major= - case $version_type in - darwin) - # we can't check for "0.0" in archive_cmds due to quoting - # problems, so we reset it completely - verstring= - ;; - *) - verstring="0.0" - ;; - esac - if test "$need_version" = no; then - versuffix= - else - versuffix=".0.0" - fi - fi - - # Remove version info from name if versioning should be avoided - if test "$avoid_version" = yes && test "$need_version" = no; then - major= - versuffix= - verstring="" - fi - - # Check to see if the archive will have undefined symbols. - if test "$allow_undefined" = yes; then - if test "$allow_undefined_flag" = unsupported; then - func_warning "undefined symbols not allowed in $host shared libraries" - build_libtool_libs=no - build_old_libs=yes - fi - else - # Don't allow undefined symbols. - allow_undefined_flag="$no_undefined_flag" - fi - - fi - - func_generate_dlsyms "$libname" "$libname" "yes" - func_append libobjs " $symfileobj" - test "X$libobjs" = "X " && libobjs= - - if test "$opt_mode" != relink; then - # Remove our outputs, but don't remove object files since they - # may have been created when compiling PIC objects. - removelist= - tempremovelist=`$ECHO "$output_objdir/*"` - for p in $tempremovelist; do - case $p in - *.$objext | *.gcno) - ;; - $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) - if test "X$precious_files_regex" != "X"; then - if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 - then - continue - fi - fi - func_append removelist " $p" - ;; - *) ;; - esac - done - test -n "$removelist" && \ - func_show_eval "${RM}r \$removelist" - fi - - # Now set the variables for building old libraries. - if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then - func_append oldlibs " $output_objdir/$libname.$libext" - - # Transform .lo files to .o files. - oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` - fi - - # Eliminate all temporary directories. - #for path in $notinst_path; do - # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` - # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` - # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` - #done - - if test -n "$xrpath"; then - # If the user specified any rpath flags, then add them. - temp_xrpath= - for libdir in $xrpath; do - func_replace_sysroot "$libdir" - func_append temp_xrpath " -R$func_replace_sysroot_result" - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then - dependency_libs="$temp_xrpath $dependency_libs" - fi - fi - - # Make sure dlfiles contains only unique files that won't be dlpreopened - old_dlfiles="$dlfiles" - dlfiles= - for lib in $old_dlfiles; do - case " $dlprefiles $dlfiles " in - *" $lib "*) ;; - *) func_append dlfiles " $lib" ;; - esac - done - - # Make sure dlprefiles contains only unique files - old_dlprefiles="$dlprefiles" - dlprefiles= - for lib in $old_dlprefiles; do - case "$dlprefiles " in - *" $lib "*) ;; - *) func_append dlprefiles " $lib" ;; - esac - done - - if test "$build_libtool_libs" = yes; then - if test -n "$rpath"; then - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) - # these systems don't actually have a c library (as such)! - ;; - *-*-rhapsody* | *-*-darwin1.[012]) - # Rhapsody C library is in the System framework - func_append deplibs " System.ltframework" - ;; - *-*-netbsd*) - # Don't link with libc until the a.out ld.so is fixed. - ;; - *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) - # Do not include libc due to us having libc/libc_r. - ;; - *-*-sco3.2v5* | *-*-sco5v6*) - # Causes problems with __ctype - ;; - *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) - # Compiler inserts libc in the correct place for threads to work - ;; - *) - # Add libc to deplibs on all other systems if necessary. - if test "$build_libtool_need_lc" = "yes"; then - func_append deplibs " -lc" - fi - ;; - esac - fi - - # Transform deplibs into only deplibs that can be linked in shared. - name_save=$name - libname_save=$libname - release_save=$release - versuffix_save=$versuffix - major_save=$major - # I'm not sure if I'm treating the release correctly. I think - # release should show up in the -l (ie -lgmp5) so we don't want to - # add it in twice. Is that correct? - release="" - versuffix="" - major="" - newdeplibs= - droppeddeps=no - case $deplibs_check_method in - pass_all) - # Don't check for shared/static. Everything works. - # This might be a little naive. We might want to check - # whether the library exists or not. But this is on - # osf3 & osf4 and I'm not really sure... Just - # implementing what was already the behavior. - newdeplibs=$deplibs - ;; - test_compile) - # This code stresses the "libraries are programs" paradigm to its - # limits. Maybe even breaks it. We compile a program, linking it - # against the deplibs as a proxy for the library. Then we can check - # whether they linked in statically or dynamically with ldd. - $opt_dry_run || $RM conftest.c - cat > conftest.c </dev/null` - $nocaseglob - else - potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` - fi - for potent_lib in $potential_libs; do - # Follow soft links. - if ls -lLd "$potent_lib" 2>/dev/null | - $GREP " -> " >/dev/null; then - continue - fi - # The statement above tries to avoid entering an - # endless loop below, in case of cyclic links. - # We might still enter an endless loop, since a link - # loop can be closed while we follow links, - # but so what? - potlib="$potent_lib" - while test -h "$potlib" 2>/dev/null; do - potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'` - case $potliblink in - [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";; - *) potlib=`$ECHO "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; - esac - done - if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | - $SED -e 10q | - $EGREP "$file_magic_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for file magic test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a file magic. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - match_pattern*) - set dummy $deplibs_check_method; shift - match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` - for a_deplib in $deplibs; do - case $a_deplib in - -l*) - func_stripname -l '' "$a_deplib" - name=$func_stripname_result - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - case " $predeps $postdeps " in - *" $a_deplib "*) - func_append newdeplibs " $a_deplib" - a_deplib="" - ;; - esac - fi - if test -n "$a_deplib" ; then - libname=`eval "\\$ECHO \"$libname_spec\""` - for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do - potential_libs=`ls $i/$libname[.-]* 2>/dev/null` - for potent_lib in $potential_libs; do - potlib="$potent_lib" # see symlink-check above in file_magic test - if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ - $EGREP "$match_pattern_regex" > /dev/null; then - func_append newdeplibs " $a_deplib" - a_deplib="" - break 2 - fi - done - done - fi - if test -n "$a_deplib" ; then - droppeddeps=yes - echo - $ECHO "*** Warning: linker path does not have real file for library $a_deplib." - echo "*** I have the capability to make that library automatically link in when" - echo "*** you link to this library. But I can only do this if you have a" - echo "*** shared version of the library, which you do not appear to have" - echo "*** because I did check the linker path looking for a file starting" - if test -z "$potlib" ; then - $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" - else - $ECHO "*** with $libname and none of the candidates passed a file format test" - $ECHO "*** using a regex pattern. Last file checked: $potlib" - fi - fi - ;; - *) - # Add a -L argument. - func_append newdeplibs " $a_deplib" - ;; - esac - done # Gone through all deplibs. - ;; - none | unknown | *) - newdeplibs="" - tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` - if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then - for i in $predeps $postdeps ; do - # can't use Xsed below, because $i might contain '/' - tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s,$i,,"` - done - fi - case $tmp_deplibs in - *[!\ \ ]*) - echo - if test "X$deplibs_check_method" = "Xnone"; then - echo "*** Warning: inter-library dependencies are not supported in this platform." - else - echo "*** Warning: inter-library dependencies are not known to be supported." - fi - echo "*** All declared inter-library dependencies are being dropped." - droppeddeps=yes - ;; - esac - ;; - esac - versuffix=$versuffix_save - major=$major_save - release=$release_save - libname=$libname_save - name=$name_save - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library with the System framework - newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - if test "$droppeddeps" = yes; then - if test "$module" = yes; then - echo - echo "*** Warning: libtool could not satisfy all declared inter-library" - $ECHO "*** dependencies of module $libname. Therefore, libtool will create" - echo "*** a static module, that should work as long as the dlopening" - echo "*** application is linked with the -dlopen flag." - if test -z "$global_symbol_pipe"; then - echo - echo "*** However, this would only work if libtool was able to extract symbol" - echo "*** lists from a program, using \`nm' or equivalent, but libtool could" - echo "*** not find such a program. So, this module is probably useless." - echo "*** \`nm' from GNU binutils and a full rebuild may help." - fi - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - else - echo "*** The inter-library dependencies that have been dropped here will be" - echo "*** automatically added whenever a program is linked with this library" - echo "*** or is declared to -dlopen it." - - if test "$allow_undefined" = no; then - echo - echo "*** Since this library must not contain undefined symbols," - echo "*** because either the platform does not support them or" - echo "*** it was explicitly requested with -no-undefined," - echo "*** libtool will only create a static version of it." - if test "$build_old_libs" = no; then - oldlibs="$output_objdir/$libname.$libext" - build_libtool_libs=module - build_old_libs=yes - else - build_libtool_libs=no - fi - fi - fi - fi - # Done checking deplibs! - deplibs=$newdeplibs - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - case $host in - *-*-darwin*) - newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - deplibs="$new_libs" - - # All the library-specific variables (install_libdir is set above). - library_names= - old_library= - dlname= - - # Test again, we may have decided not to build it any more - if test "$build_libtool_libs" = yes; then - # Remove ${wl} instances when linking with ld. - # FIXME: should test the right _cmds variable. - case $archive_cmds in - *\$LD\ *) wl= ;; - esac - if test "$hardcode_into_libs" = yes; then - # Hardcode the library paths - hardcode_libdirs= - dep_rpath= - rpath="$finalize_rpath" - test "$opt_mode" != relink && rpath="$compile_rpath$rpath" - for libdir in $rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - func_replace_sysroot "$libdir" - libdir=$func_replace_sysroot_result - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append dep_rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" - fi - if test -n "$runpath_var" && test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" - fi - test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" - fi - - shlibpath="$finalize_shlibpath" - test "$opt_mode" != relink && shlibpath="$compile_shlibpath$shlibpath" - if test -n "$shlibpath"; then - eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" - fi - - # Get the real and link names of the library. - eval shared_ext=\"$shrext_cmds\" - eval library_names=\"$library_names_spec\" - set dummy $library_names - shift - realname="$1" - shift - - if test -n "$soname_spec"; then - eval soname=\"$soname_spec\" - else - soname="$realname" - fi - if test -z "$dlname"; then - dlname=$soname - fi - - lib="$output_objdir/$realname" - linknames= - for link - do - func_append linknames " $link" - done - - # Use standard objects if they are pic - test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` - test "X$libobjs" = "X " && libobjs= - - delfiles= - if test -n "$export_symbols" && test -n "$include_expsyms"; then - $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" - export_symbols="$output_objdir/$libname.uexp" - func_append delfiles " $export_symbols" - fi - - orig_export_symbols= - case $host_os in - cygwin* | mingw* | cegcc*) - if test -n "$export_symbols" && test -z "$export_symbols_regex"; then - # exporting using user supplied symfile - if test "x`$SED 1q $export_symbols`" != xEXPORTS; then - # and it's NOT already a .def file. Must figure out - # which of the given symbols are data symbols and tag - # them as such. So, trigger use of export_symbols_cmds. - # export_symbols gets reassigned inside the "prepare - # the list of exported symbols" if statement, so the - # include_expsyms logic still works. - orig_export_symbols="$export_symbols" - export_symbols= - always_export_symbols=yes - fi - fi - ;; - esac - - # Prepare the list of exported symbols - if test -z "$export_symbols"; then - if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - cmds=$export_symbols_cmds - save_ifs="$IFS"; IFS='~' - for cmd1 in $cmds; do - IFS="$save_ifs" - # Take the normal branch if the nm_file_list_spec branch - # doesn't work or if tool conversion is not needed. - case $nm_file_list_spec~$to_tool_file_cmd in - *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) - try_normal_branch=yes - eval cmd=\"$cmd1\" - func_len " $cmd" - len=$func_len_result - ;; - *) - try_normal_branch=no - ;; - esac - if test "$try_normal_branch" = yes \ - && { test "$len" -lt "$max_cmd_len" \ - || test "$max_cmd_len" -le -1; } - then - func_show_eval "$cmd" 'exit $?' - skipped_export=false - elif test -n "$nm_file_list_spec"; then - func_basename "$output" - output_la=$func_basename_result - save_libobjs=$libobjs - save_output=$output - output=${output_objdir}/${output_la}.nm - func_to_tool_file "$output" - libobjs=$nm_file_list_spec$func_to_tool_file_result - func_append delfiles " $output" - func_verbose "creating $NM input file list: $output" - for obj in $save_libobjs; do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > "$output" - eval cmd=\"$cmd1\" - func_show_eval "$cmd" 'exit $?' - output=$save_output - libobjs=$save_libobjs - skipped_export=false - else - # The command line is too long to execute in one step. - func_verbose "using reloadable object file for export list..." - skipped_export=: - # Break out early, otherwise skipped_export may be - # set to false by a later but shorter cmd. - break - fi - done - IFS="$save_ifs" - if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - fi - - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - - tmp_deplibs= - for test_deplib in $deplibs; do - case " $convenience " in - *" $test_deplib "*) ;; - *) - func_append tmp_deplibs " $test_deplib" - ;; - esac - done - deplibs="$tmp_deplibs" - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec" && - test "$compiler_needs_object" = yes && - test -z "$libobjs"; then - # extract the archives, so we have objects to list. - # TODO: could optimize this to just extract one archive. - whole_archive_flag_spec= - fi - if test -n "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - else - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - fi - - if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then - eval flag=\"$thread_safe_flag_spec\" - func_append linker_flags " $flag" - fi - - # Make a backup of the uninstalled library when relinking - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? - fi - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - eval test_cmds=\"$module_expsym_cmds\" - cmds=$module_expsym_cmds - else - eval test_cmds=\"$module_cmds\" - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - eval test_cmds=\"$archive_expsym_cmds\" - cmds=$archive_expsym_cmds - else - eval test_cmds=\"$archive_cmds\" - cmds=$archive_cmds - fi - fi - - if test "X$skipped_export" != "X:" && - func_len " $test_cmds" && - len=$func_len_result && - test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - : - else - # The command line is too long to link in one step, link piecewise - # or, if using GNU ld and skipped_export is not :, use a linker - # script. - - # Save the value of $output and $libobjs because we want to - # use them later. If we have whole_archive_flag_spec, we - # want to use save_libobjs as it was before - # whole_archive_flag_spec was expanded, because we can't - # assume the linker understands whole_archive_flag_spec. - # This may have to be revisited, in case too many - # convenience libraries get linked in and end up exceeding - # the spec. - if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then - save_libobjs=$libobjs - fi - save_output=$output - func_basename "$output" - output_la=$func_basename_result - - # Clear the reloadable object creation command queue and - # initialize k to one. - test_cmds= - concat_cmds= - objlist= - last_robj= - k=1 - - if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then - output=${output_objdir}/${output_la}.lnkscript - func_verbose "creating GNU ld script: $output" - echo 'INPUT (' > $output - for obj in $save_libobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - echo ')' >> $output - func_append delfiles " $output" - func_to_tool_file "$output" - output=$func_to_tool_file_result - elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then - output=${output_objdir}/${output_la}.lnk - func_verbose "creating linker input file list: $output" - : > $output - set x $save_libobjs - shift - firstobj= - if test "$compiler_needs_object" = yes; then - firstobj="$1 " - shift - fi - for obj - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" >> $output - done - func_append delfiles " $output" - func_to_tool_file "$output" - output=$firstobj\"$file_list_spec$func_to_tool_file_result\" - else - if test -n "$save_libobjs"; then - func_verbose "creating reloadable object files..." - output=$output_objdir/$output_la-${k}.$objext - eval test_cmds=\"$reload_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - - # Loop over the list of objects to be linked. - for obj in $save_libobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - if test "X$objlist" = X || - test "$len" -lt "$max_cmd_len"; then - func_append objlist " $obj" - else - # The command $test_cmds is almost too long, add a - # command to the queue. - if test "$k" -eq 1 ; then - # The first file doesn't have a previous command to add. - reload_objs=$objlist - eval concat_cmds=\"$reload_cmds\" - else - # All subsequent reloadable object files will link in - # the last one created. - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" - fi - last_robj=$output_objdir/$output_la-${k}.$objext - func_arith $k + 1 - k=$func_arith_result - output=$output_objdir/$output_la-${k}.$objext - objlist=" $obj" - func_len " $last_robj" - func_arith $len0 + $func_len_result - len=$func_arith_result - fi - done - # Handle the remaining objects by creating one last - # reloadable object file. All subsequent reloadable object - # files will link in the last one created. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - reload_objs="$objlist $last_robj" - eval concat_cmds=\"\${concat_cmds}$reload_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" - fi - func_append delfiles " $output" - - else - output= - fi - - if ${skipped_export-false}; then - func_verbose "generating symbol list for \`$libname.la'" - export_symbols="$output_objdir/$libname.exp" - $opt_dry_run || $RM $export_symbols - libobjs=$output - # Append the command to create the export file. - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" - if test -n "$last_robj"; then - eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" - fi - fi - - test -n "$save_libobjs" && - func_verbose "creating a temporary reloadable object file: $output" - - # Loop through the commands generated above and execute them. - save_ifs="$IFS"; IFS='~' - for cmd in $concat_cmds; do - IFS="$save_ifs" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - if test -n "$export_symbols_regex" && ${skipped_export-false}; then - func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' - func_show_eval '$MV "${export_symbols}T" "$export_symbols"' - fi - fi - - if ${skipped_export-false}; then - if test -n "$export_symbols" && test -n "$include_expsyms"; then - tmp_export_symbols="$export_symbols" - test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols" - $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' - fi - - if test -n "$orig_export_symbols"; then - # The given exports_symbols file has to be filtered, so filter it. - func_verbose "filter symbol list for \`$libname.la' to tag DATA exports" - # FIXME: $output_objdir/$libname.filter potentially contains lots of - # 's' commands which not all seds can handle. GNU sed should be fine - # though. Also, the filter scales superlinearly with the number of - # global variables. join(1) would be nice here, but unfortunately - # isn't a blessed tool. - $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter - func_append delfiles " $export_symbols $output_objdir/$libname.filter" - export_symbols=$output_objdir/$libname.def - $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols - fi - fi - - libobjs=$output - # Restore the value of output. - output=$save_output - - if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then - eval libobjs=\"\$libobjs $whole_archive_flag_spec\" - test "X$libobjs" = "X " && libobjs= - fi - # Expand the library linking commands again to reset the - # value of $libobjs for piecewise linking. - - # Do each of the archive commands. - if test "$module" = yes && test -n "$module_cmds" ; then - if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then - cmds=$module_expsym_cmds - else - cmds=$module_cmds - fi - else - if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then - cmds=$archive_expsym_cmds - else - cmds=$archive_cmds - fi - fi - fi - - if test -n "$delfiles"; then - # Append the command to remove temporary files to $cmds. - eval cmds=\"\$cmds~\$RM $delfiles\" - fi - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append libobjs " $func_extract_archives_result" - test "X$libobjs" = "X " && libobjs= - fi - - save_ifs="$IFS"; IFS='~' - for cmd in $cmds; do - IFS="$save_ifs" - eval cmd=\"$cmd\" - $opt_silent || { - func_quote_for_expand "$cmd" - eval "func_echo $func_quote_for_expand_result" - } - $opt_dry_run || eval "$cmd" || { - lt_exit=$? - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - ( cd "$output_objdir" && \ - $RM "${realname}T" && \ - $MV "${realname}U" "$realname" ) - fi - - exit $lt_exit - } - done - IFS="$save_ifs" - - # Restore the uninstalled library and exit - if test "$opt_mode" = relink; then - $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? - - if test -n "$convenience"; then - if test -z "$whole_archive_flag_spec"; then - func_show_eval '${RM}r "$gentop"' - fi - fi - - exit $EXIT_SUCCESS - fi - - # Create links to the real library. - for linkname in $linknames; do - if test "$realname" != "$linkname"; then - func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' - fi - done - - # If -module or -export-dynamic was specified, set the dlname. - if test "$module" = yes || test "$export_dynamic" = yes; then - # On all known operating systems, these are identical. - dlname="$soname" - fi - fi - ;; - - obj) - if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then - func_warning "\`-dlopen' is ignored for objects" - fi - - case " $deplibs" in - *\ -l* | *\ -L*) - func_warning "\`-l' and \`-L' are ignored for objects" ;; - esac - - test -n "$rpath" && \ - func_warning "\`-rpath' is ignored for objects" - - test -n "$xrpath" && \ - func_warning "\`-R' is ignored for objects" - - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for objects" - - test -n "$release" && \ - func_warning "\`-release' is ignored for objects" - - case $output in - *.lo) - test -n "$objs$old_deplibs" && \ - func_fatal_error "cannot build library object \`$output' from non-libtool objects" - - libobj=$output - func_lo2o "$libobj" - obj=$func_lo2o_result - ;; - *) - libobj= - obj="$output" - ;; - esac - - # Delete the old objects. - $opt_dry_run || $RM $obj $libobj - - # Objects from convenience libraries. This assumes - # single-version convenience libraries. Whenever we create - # different ones for PIC/non-PIC, this we'll have to duplicate - # the extraction. - reload_conv_objs= - gentop= - # reload_cmds runs $LD directly, so let us get rid of - # -Wl from whole_archive_flag_spec and hope we can get by with - # turning comma into space.. - wl= - - if test -n "$convenience"; then - if test -n "$whole_archive_flag_spec"; then - eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" - reload_conv_objs=$reload_objs\ `$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` - else - gentop="$output_objdir/${obj}x" - func_append generated " $gentop" - - func_extract_archives $gentop $convenience - reload_conv_objs="$reload_objs $func_extract_archives_result" - fi - fi - - # If we're not building shared, we need to use non_pic_objs - test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" - - # Create the old-style object. - reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test - - output="$obj" - func_execute_cmds "$reload_cmds" 'exit $?' - - # Exit if we aren't doing a library object file. - if test -z "$libobj"; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - fi - - if test "$build_libtool_libs" != yes; then - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - # Create an invalid libtool object if no PIC, so that we don't - # accidentally link it into a program. - # $show "echo timestamp > $libobj" - # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? - exit $EXIT_SUCCESS - fi - - if test -n "$pic_flag" || test "$pic_mode" != default; then - # Only do commands if we really have different PIC objects. - reload_objs="$libobjs $reload_conv_objs" - output="$libobj" - func_execute_cmds "$reload_cmds" 'exit $?' - fi - - if test -n "$gentop"; then - func_show_eval '${RM}r "$gentop"' - fi - - exit $EXIT_SUCCESS - ;; - - prog) - case $host in - *cygwin*) func_stripname '' '.exe' "$output" - output=$func_stripname_result.exe;; - esac - test -n "$vinfo" && \ - func_warning "\`-version-info' is ignored for programs" - - test -n "$release" && \ - func_warning "\`-release' is ignored for programs" - - test "$preload" = yes \ - && test "$dlopen_support" = unknown \ - && test "$dlopen_self" = unknown \ - && test "$dlopen_self_static" = unknown && \ - func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support." - - case $host in - *-*-rhapsody* | *-*-darwin1.[012]) - # On Rhapsody replace the C library is the System framework - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` - ;; - esac - - case $host in - *-*-darwin*) - # Don't allow lazy linking, it breaks C++ global constructors - # But is supposedly fixed on 10.4 or later (yay!). - if test "$tagname" = CXX ; then - case ${MACOSX_DEPLOYMENT_TARGET-10.0} in - 10.[0123]) - func_append compile_command " ${wl}-bind_at_load" - func_append finalize_command " ${wl}-bind_at_load" - ;; - esac - fi - # Time to change all our "foo.ltframework" stuff back to "-framework foo" - compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` - ;; - esac - - - # move library search paths that coincide with paths to not yet - # installed libraries to the beginning of the library search list - new_libs= - for path in $notinst_path; do - case " $new_libs " in - *" -L$path/$objdir "*) ;; - *) - case " $compile_deplibs " in - *" -L$path/$objdir "*) - func_append new_libs " -L$path/$objdir" ;; - esac - ;; - esac - done - for deplib in $compile_deplibs; do - case $deplib in - -L*) - case " $new_libs " in - *" $deplib "*) ;; - *) func_append new_libs " $deplib" ;; - esac - ;; - *) func_append new_libs " $deplib" ;; - esac - done - compile_deplibs="$new_libs" - - - func_append compile_command " $compile_deplibs" - func_append finalize_command " $finalize_deplibs" - - if test -n "$rpath$xrpath"; then - # If the user specified any rpath flags, then add them. - for libdir in $rpath $xrpath; do - # This is the magic to use -rpath. - case "$finalize_rpath " in - *" $libdir "*) ;; - *) func_append finalize_rpath " $libdir" ;; - esac - done - fi - - # Now hardcode the library paths - rpath= - hardcode_libdirs= - for libdir in $compile_rpath $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$perm_rpath " in - *" $libdir "*) ;; - *) func_append perm_rpath " $libdir" ;; - esac - fi - case $host in - *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) - testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'` - case :$dllsearchpath: in - *":$libdir:"*) ;; - ::) dllsearchpath=$libdir;; - *) func_append dllsearchpath ":$libdir";; - esac - case :$dllsearchpath: in - *":$testbindir:"*) ;; - ::) dllsearchpath=$testbindir;; - *) func_append dllsearchpath ":$testbindir";; - esac - ;; - esac - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - compile_rpath="$rpath" - - rpath= - hardcode_libdirs= - for libdir in $finalize_rpath; do - if test -n "$hardcode_libdir_flag_spec"; then - if test -n "$hardcode_libdir_separator"; then - if test -z "$hardcode_libdirs"; then - hardcode_libdirs="$libdir" - else - # Just accumulate the unique libdirs. - case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in - *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) - ;; - *) - func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" - ;; - esac - fi - else - eval flag=\"$hardcode_libdir_flag_spec\" - func_append rpath " $flag" - fi - elif test -n "$runpath_var"; then - case "$finalize_perm_rpath " in - *" $libdir "*) ;; - *) func_append finalize_perm_rpath " $libdir" ;; - esac - fi - done - # Substitute the hardcoded libdirs into the rpath. - if test -n "$hardcode_libdir_separator" && - test -n "$hardcode_libdirs"; then - libdir="$hardcode_libdirs" - eval rpath=\" $hardcode_libdir_flag_spec\" - fi - finalize_rpath="$rpath" - - if test -n "$libobjs" && test "$build_old_libs" = yes; then - # Transform all the library objects into standard objects. - compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` - fi - - func_generate_dlsyms "$outputname" "@PROGRAM@" "no" - - # template prelinking step - if test -n "$prelink_cmds"; then - func_execute_cmds "$prelink_cmds" 'exit $?' - fi - - wrappers_required=yes - case $host in - *cegcc* | *mingw32ce*) - # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. - wrappers_required=no - ;; - *cygwin* | *mingw* ) - if test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - *) - if test "$need_relink" = no || test "$build_libtool_libs" != yes; then - wrappers_required=no - fi - ;; - esac - if test "$wrappers_required" = no; then - # Replace the output file specification. - compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - link_command="$compile_command$compile_rpath" - - # We have no uninstalled library dependencies, so finalize right now. - exit_status=0 - func_show_eval "$link_command" 'exit_status=$?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Delete the generated files. - if test -f "$output_objdir/${outputname}S.${objext}"; then - func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"' - fi - - exit $exit_status - fi - - if test -n "$compile_shlibpath$finalize_shlibpath"; then - compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" - fi - if test -n "$finalize_shlibpath"; then - finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" - fi - - compile_var= - finalize_var= - if test -n "$runpath_var"; then - if test -n "$perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $perm_rpath; do - func_append rpath "$dir:" - done - compile_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - if test -n "$finalize_perm_rpath"; then - # We should set the runpath_var. - rpath= - for dir in $finalize_perm_rpath; do - func_append rpath "$dir:" - done - finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " - fi - fi - - if test "$no_install" = yes; then - # We don't need to create a wrapper script. - link_command="$compile_var$compile_command$compile_rpath" - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` - # Delete the old output file. - $opt_dry_run || $RM $output - # Link the executable and exit - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - exit $EXIT_SUCCESS - fi - - if test "$hardcode_action" = relink; then - # Fast installation is not supported - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - - func_warning "this platform does not like uninstalled shared libraries" - func_warning "\`$output' will be relinked during installation" - else - if test "$fast_install" != no; then - link_command="$finalize_var$compile_command$finalize_rpath" - if test "$fast_install" = yes; then - relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` - else - # fast_install is set to needless - relink_command= - fi - else - link_command="$compile_var$compile_command$compile_rpath" - relink_command="$finalize_var$finalize_command$finalize_rpath" - fi - fi - - # Replace the output file specification. - link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` - - # Delete the old output files. - $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname - - func_show_eval "$link_command" 'exit $?' - - if test -n "$postlink_cmds"; then - func_to_tool_file "$output_objdir/$outputname" - postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` - func_execute_cmds "$postlink_cmds" 'exit $?' - fi - - # Now create the wrapper script. - func_verbose "creating $output" - - # Quote the relink command for shipping. - if test -n "$relink_command"; then - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - relink_command="(cd `pwd`; $relink_command)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - fi - - # Only actually do things if not in dry run mode. - $opt_dry_run || { - # win32 will think the script is a binary if it has - # a .exe suffix, so we strip it off here. - case $output in - *.exe) func_stripname '' '.exe' "$output" - output=$func_stripname_result ;; - esac - # test for cygwin because mv fails w/o .exe extensions - case $host in - *cygwin*) - exeext=.exe - func_stripname '' '.exe' "$outputname" - outputname=$func_stripname_result ;; - *) exeext= ;; - esac - case $host in - *cygwin* | *mingw* ) - func_dirname_and_basename "$output" "" "." - output_name=$func_basename_result - output_path=$func_dirname_result - cwrappersource="$output_path/$objdir/lt-$output_name.c" - cwrapper="$output_path/$output_name.exe" - $RM $cwrappersource $cwrapper - trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 - - func_emit_cwrapperexe_src > $cwrappersource - - # The wrapper executable is built using the $host compiler, - # because it contains $host paths and files. If cross- - # compiling, it, like the target executable, must be - # executed on the $host or under an emulation environment. - $opt_dry_run || { - $LTCC $LTCFLAGS -o $cwrapper $cwrappersource - $STRIP $cwrapper - } - - # Now, create the wrapper script for func_source use: - func_ltwrapper_scriptname $cwrapper - $RM $func_ltwrapper_scriptname_result - trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 - $opt_dry_run || { - # note: this script will not be executed, so do not chmod. - if test "x$build" = "x$host" ; then - $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result - else - func_emit_wrapper no > $func_ltwrapper_scriptname_result - fi - } - ;; - * ) - $RM $output - trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 - - func_emit_wrapper no > $output - chmod +x $output - ;; - esac - } - exit $EXIT_SUCCESS - ;; - esac - - # See if we need to build an old-fashioned archive. - for oldlib in $oldlibs; do - - if test "$build_libtool_libs" = convenience; then - oldobjs="$libobjs_save $symfileobj" - addlibs="$convenience" - build_libtool_libs=no - else - if test "$build_libtool_libs" = module; then - oldobjs="$libobjs_save" - build_libtool_libs=no - else - oldobjs="$old_deplibs $non_pic_objects" - if test "$preload" = yes && test -f "$symfileobj"; then - func_append oldobjs " $symfileobj" - fi - fi - addlibs="$old_convenience" - fi - - if test -n "$addlibs"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $addlibs - func_append oldobjs " $func_extract_archives_result" - fi - - # Do each command in the archive commands. - if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then - cmds=$old_archive_from_new_cmds - else - - # Add any objects from preloaded convenience libraries - if test -n "$dlprefiles"; then - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - - func_extract_archives $gentop $dlprefiles - func_append oldobjs " $func_extract_archives_result" - fi - - # POSIX demands no paths to be encoded in archives. We have - # to avoid creating archives with duplicate basenames if we - # might have to extract them afterwards, e.g., when creating a - # static archive out of a convenience library, or when linking - # the entirety of a libtool archive into another (currently - # not supported by libtool). - if (for obj in $oldobjs - do - func_basename "$obj" - $ECHO "$func_basename_result" - done | sort | sort -uc >/dev/null 2>&1); then - : - else - echo "copying selected object files to avoid basename conflicts..." - gentop="$output_objdir/${outputname}x" - func_append generated " $gentop" - func_mkdir_p "$gentop" - save_oldobjs=$oldobjs - oldobjs= - counter=1 - for obj in $save_oldobjs - do - func_basename "$obj" - objbase="$func_basename_result" - case " $oldobjs " in - " ") oldobjs=$obj ;; - *[\ /]"$objbase "*) - while :; do - # Make sure we don't pick an alternate name that also - # overlaps. - newobj=lt$counter-$objbase - func_arith $counter + 1 - counter=$func_arith_result - case " $oldobjs " in - *[\ /]"$newobj "*) ;; - *) if test ! -f "$gentop/$newobj"; then break; fi ;; - esac - done - func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" - func_append oldobjs " $gentop/$newobj" - ;; - *) func_append oldobjs " $obj" ;; - esac - done - fi - func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 - tool_oldlib=$func_to_tool_file_result - eval cmds=\"$old_archive_cmds\" - - func_len " $cmds" - len=$func_len_result - if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then - cmds=$old_archive_cmds - elif test -n "$archiver_list_spec"; then - func_verbose "using command file archive linking..." - for obj in $oldobjs - do - func_to_tool_file "$obj" - $ECHO "$func_to_tool_file_result" - done > $output_objdir/$libname.libcmd - func_to_tool_file "$output_objdir/$libname.libcmd" - oldobjs=" $archiver_list_spec$func_to_tool_file_result" - cmds=$old_archive_cmds - else - # the command line is too long to link in one step, link in parts - func_verbose "using piecewise archive linking..." - save_RANLIB=$RANLIB - RANLIB=: - objlist= - concat_cmds= - save_oldobjs=$oldobjs - oldobjs= - # Is there a better way of finding the last object in the list? - for obj in $save_oldobjs - do - last_oldobj=$obj - done - eval test_cmds=\"$old_archive_cmds\" - func_len " $test_cmds" - len0=$func_len_result - len=$len0 - for obj in $save_oldobjs - do - func_len " $obj" - func_arith $len + $func_len_result - len=$func_arith_result - func_append objlist " $obj" - if test "$len" -lt "$max_cmd_len"; then - : - else - # the above command should be used before it gets too long - oldobjs=$objlist - if test "$obj" = "$last_oldobj" ; then - RANLIB=$save_RANLIB - fi - test -z "$concat_cmds" || concat_cmds=$concat_cmds~ - eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\" - objlist= - len=$len0 - fi - done - RANLIB=$save_RANLIB - oldobjs=$objlist - if test "X$oldobjs" = "X" ; then - eval cmds=\"\$concat_cmds\" - else - eval cmds=\"\$concat_cmds~\$old_archive_cmds\" - fi - fi - fi - func_execute_cmds "$cmds" 'exit $?' - done - - test -n "$generated" && \ - func_show_eval "${RM}r$generated" - - # Now create the libtool archive. - case $output in - *.la) - old_library= - test "$build_old_libs" = yes && old_library="$libname.$libext" - func_verbose "creating $output" - - # Preserve any variables that may affect compiler behavior - for var in $variables_saved_for_relink; do - if eval test -z \"\${$var+set}\"; then - relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" - elif eval var_value=\$$var; test -z "$var_value"; then - relink_command="$var=; export $var; $relink_command" - else - func_quote_for_eval "$var_value" - relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" - fi - done - # Quote the link command for shipping. - relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" - relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` - if test "$hardcode_automatic" = yes ; then - relink_command= - fi - - # Only create the output if not a dry run. - $opt_dry_run || { - for installed in no yes; do - if test "$installed" = yes; then - if test -z "$install_libdir"; then - break - fi - output="$output_objdir/$outputname"i - # Replace all uninstalled libtool libraries with the installed ones - newdependency_libs= - for deplib in $dependency_libs; do - case $deplib in - *.la) - func_basename "$deplib" - name="$func_basename_result" - func_resolve_sysroot "$deplib" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` - test -z "$libdir" && \ - func_fatal_error "\`$deplib' is not a valid libtool archive" - func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" - ;; - -L*) - func_stripname -L '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -L$func_replace_sysroot_result" - ;; - -R*) - func_stripname -R '' "$deplib" - func_replace_sysroot "$func_stripname_result" - func_append newdependency_libs " -R$func_replace_sysroot_result" - ;; - *) func_append newdependency_libs " $deplib" ;; - esac - done - dependency_libs="$newdependency_libs" - newdlfiles= - - for lib in $dlfiles; do - case $lib in - *.la) - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" - ;; - *) func_append newdlfiles " $lib" ;; - esac - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - *.la) - # Only pass preopened files to the pseudo-archive (for - # eventual linking with the app. that links it) if we - # didn't already link the preopened objects directly into - # the library: - func_basename "$lib" - name="$func_basename_result" - eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` - test -z "$libdir" && \ - func_fatal_error "\`$lib' is not a valid libtool archive" - func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" - ;; - esac - done - dlprefiles="$newdlprefiles" - else - newdlfiles= - for lib in $dlfiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlfiles " $abs" - done - dlfiles="$newdlfiles" - newdlprefiles= - for lib in $dlprefiles; do - case $lib in - [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; - *) abs=`pwd`"/$lib" ;; - esac - func_append newdlprefiles " $abs" - done - dlprefiles="$newdlprefiles" - fi - $RM $output - # place dlname in correct position for cygwin - # In fact, it would be nice if we could use this code for all target - # systems that can't hard-code library paths into their executables - # and that have no shared library path variable independent of PATH, - # but it turns out we can't easily determine that from inspecting - # libtool variables, so we have to hard-code the OSs to which it - # applies here; at the moment, that means platforms that use the PE - # object format with DLL files. See the long comment at the top of - # tests/bindir.at for full details. - tdlname=$dlname - case $host,$output,$installed,$module,$dlname in - *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) - # If a -bindir argument was supplied, place the dll there. - if test "x$bindir" != x ; - then - func_relative_path "$install_libdir" "$bindir" - tdlname=$func_relative_path_result$dlname - else - # Otherwise fall back on heuristic. - tdlname=../bin/$dlname - fi - ;; - esac - $ECHO > $output "\ -# $outputname - a libtool library file -# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION -# -# Please DO NOT delete this file! -# It is necessary for linking the library. - -# The name that we can dlopen(3). -dlname='$tdlname' - -# Names of this library. -library_names='$library_names' - -# The name of the static archive. -old_library='$old_library' - -# Linker flags that can not go in dependency_libs. -inherited_linker_flags='$new_inherited_linker_flags' - -# Libraries that this one depends upon. -dependency_libs='$dependency_libs' - -# Names of additional weak libraries provided by this library -weak_library_names='$weak_libs' - -# Version information for $libname. -current=$current -age=$age -revision=$revision - -# Is this an already installed library? -installed=$installed - -# Should we warn about portability when linking against -modules? -shouldnotlink=$module - -# Files to dlopen/dlpreopen -dlopen='$dlfiles' -dlpreopen='$dlprefiles' - -# Directory that this library needs to be installed in: -libdir='$install_libdir'" - if test "$installed" = no && test "$need_relink" = yes; then - $ECHO >> $output "\ -relink_command=\"$relink_command\"" - fi - done - } - - # Do a symbolic link so that the libtool archive can be found in - # LD_LIBRARY_PATH before the program is installed. - func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' - ;; - esac - exit $EXIT_SUCCESS -} - -{ test "$opt_mode" = link || test "$opt_mode" = relink; } && - func_mode_link ${1+"$@"} - - -# func_mode_uninstall arg... -func_mode_uninstall () -{ - $opt_debug - RM="$nonopt" - files= - rmforce= - exit_status=0 - - # This variable tells wrapper scripts just to set variables rather - # than running their programs. - libtool_install_magic="$magic" - - for arg - do - case $arg in - -f) func_append RM " $arg"; rmforce=yes ;; - -*) func_append RM " $arg" ;; - *) func_append files " $arg" ;; - esac - done - - test -z "$RM" && \ - func_fatal_help "you must specify an RM program" - - rmdirs= - - for file in $files; do - func_dirname "$file" "" "." - dir="$func_dirname_result" - if test "X$dir" = X.; then - odir="$objdir" - else - odir="$dir/$objdir" - fi - func_basename "$file" - name="$func_basename_result" - test "$opt_mode" = uninstall && odir="$dir" - - # Remember odir for removal later, being careful to avoid duplicates - if test "$opt_mode" = clean; then - case " $rmdirs " in - *" $odir "*) ;; - *) func_append rmdirs " $odir" ;; - esac - fi - - # Don't error if the file doesn't exist and rm -f was used. - if { test -L "$file"; } >/dev/null 2>&1 || - { test -h "$file"; } >/dev/null 2>&1 || - test -f "$file"; then - : - elif test -d "$file"; then - exit_status=1 - continue - elif test "$rmforce" = yes; then - continue - fi - - rmfiles="$file" - - case $name in - *.la) - # Possibly a libtool archive, so verify it. - if func_lalib_p "$file"; then - func_source $dir/$name - - # Delete the libtool libraries and symlinks. - for n in $library_names; do - func_append rmfiles " $odir/$n" - done - test -n "$old_library" && func_append rmfiles " $odir/$old_library" - - case "$opt_mode" in - clean) - case " $library_names " in - *" $dlname "*) ;; - *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; - esac - test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" - ;; - uninstall) - if test -n "$library_names"; then - # Do each command in the postuninstall commands. - func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - - if test -n "$old_library"; then - # Do each command in the old_postuninstall commands. - func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1' - fi - # FIXME: should reinstall the best remaining shared library. - ;; - esac - fi - ;; - - *.lo) - # Possibly a libtool object, so verify it. - if func_lalib_p "$file"; then - - # Read the .lo file - func_source $dir/$name - - # Add PIC object to the list of files to remove. - if test -n "$pic_object" && - test "$pic_object" != none; then - func_append rmfiles " $dir/$pic_object" - fi - - # Add non-PIC object to the list of files to remove. - if test -n "$non_pic_object" && - test "$non_pic_object" != none; then - func_append rmfiles " $dir/$non_pic_object" - fi - fi - ;; - - *) - if test "$opt_mode" = clean ; then - noexename=$name - case $file in - *.exe) - func_stripname '' '.exe' "$file" - file=$func_stripname_result - func_stripname '' '.exe' "$name" - noexename=$func_stripname_result - # $file with .exe has already been added to rmfiles, - # add $file without .exe - func_append rmfiles " $file" - ;; - esac - # Do a test to see if this is a libtool program. - if func_ltwrapper_p "$file"; then - if func_ltwrapper_executable_p "$file"; then - func_ltwrapper_scriptname "$file" - relink_command= - func_source $func_ltwrapper_scriptname_result - func_append rmfiles " $func_ltwrapper_scriptname_result" - else - relink_command= - func_source $dir/$noexename - fi - - # note $name still contains .exe if it was in $file originally - # as does the version of $file that was added into $rmfiles - func_append rmfiles " $odir/$name $odir/${name}S.${objext}" - if test "$fast_install" = yes && test -n "$relink_command"; then - func_append rmfiles " $odir/lt-$name" - fi - if test "X$noexename" != "X$name" ; then - func_append rmfiles " $odir/lt-${noexename}.c" - fi - fi - fi - ;; - esac - func_show_eval "$RM $rmfiles" 'exit_status=1' - done - - # Try to remove the ${objdir}s in the directories where we deleted files - for dir in $rmdirs; do - if test -d "$dir"; then - func_show_eval "rmdir $dir >/dev/null 2>&1" - fi - done - - exit $exit_status -} - -{ test "$opt_mode" = uninstall || test "$opt_mode" = clean; } && - func_mode_uninstall ${1+"$@"} - -test -z "$opt_mode" && { - help="$generic_help" - func_fatal_help "you must specify a MODE" -} - -test -z "$exec_cmd" && \ - func_fatal_help "invalid operation mode \`$opt_mode'" - -if test -n "$exec_cmd"; then - eval exec "$exec_cmd" - exit $EXIT_FAILURE -fi - -exit $exit_status - - -# The TAGs below are defined such that we never get into a situation -# in which we disable both kinds of libraries. Given conflicting -# choices, we go for a static library, that is the most portable, -# since we can't tell whether shared libraries were disabled because -# the user asked for that or because the platform doesn't support -# them. This is particularly important on AIX, because we don't -# support having both static and shared libraries enabled at the same -# time on that platform, so we default to a shared-only configuration. -# If a disable-shared tag is given, we'll fallback to a static-only -# configuration. But we'll never go from static-only to shared-only. - -# ### BEGIN LIBTOOL TAG CONFIG: disable-shared -build_libtool_libs=no -build_old_libs=yes -# ### END LIBTOOL TAG CONFIG: disable-shared - -# ### BEGIN LIBTOOL TAG CONFIG: disable-static -build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` -# ### END LIBTOOL TAG CONFIG: disable-static - -# Local Variables: -# mode:shell-script -# sh-indentation:2 -# End: -# vi:sw=2 - diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/missing b/java/leveldbjni/leveldbjni/src/main/native-package/autotools/missing deleted file mode 100755 index 9a5564823d..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/autotools/missing +++ /dev/null @@ -1,330 +0,0 @@ -#! /bin/sh -# Common stub for a few missing GNU programs while installing. - -scriptversion=2012-01-06.18; # UTC - -# Copyright (C) 1996-2012 Free Software Foundation, Inc. -# Originally 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 - -run=: -sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' -sed_minuso='s/.* -o \([^ ]*\).*/\1/p' - -# In the cases where this matters, 'missing' is being run in the -# srcdir already. -if test -f configure.ac; then - configure_ac=configure.ac -else - configure_ac=configure.in -fi - -msg="missing on your system" - -case $1 in ---run) - # Try to run requested program, and just exit if it succeeds. - run= - shift - "$@" && exit 0 - # Exit code 63 means version mismatch. This often happens - # when the user try to use an ancient version of a tool on - # a file that requires a minimum version. In this case we - # we should proceed has if the program had been absent, or - # if --run hadn't been passed. - if test $? = 63; then - run=: - msg="probably too old" - fi - ;; - - -h|--h|--he|--hel|--help) - echo "\ -$0 [OPTION]... PROGRAM [ARGUMENT]... - -Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an -error status if there is no known handling for PROGRAM. - -Options: - -h, --help display this help and exit - -v, --version output version information and exit - --run try to run the given command, and emulate it if it fails - -Supported PROGRAM values: - aclocal touch file 'aclocal.m4' - autoconf touch file 'configure' - autoheader touch file 'config.h.in' - autom4te touch the output file, or create a stub one - automake touch all 'Makefile.in' files - bison create 'y.tab.[ch]', if possible, from existing .[ch] - flex create 'lex.yy.c', if possible, from existing .c - help2man touch the output file - lex create 'lex.yy.c', if possible, from existing .c - makeinfo touch the output file - yacc create 'y.tab.[ch]', if possible, from existing .[ch] - -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 - -# normalize program name to check for. -program=`echo "$1" | sed ' - s/^gnu-//; t - s/^gnu//; t - s/^g//; t'` - -# Now exit if we have it, but it failed. Also exit now if we -# don't have it and --version was passed (most likely to detect -# the program). This is about non-GNU programs, so use $1 not -# $program. -case $1 in - lex*|yacc*) - # Not GNU programs, they don't have --version. - ;; - - *) - if test -z "$run" && ($1 --version) > /dev/null 2>&1; then - # We have it, but it failed. - exit 1 - elif test "x$2" = "x--version" || test "x$2" = "x--help"; then - # Could not run --version or --help. This is probably someone - # running '$TOOL --version' or '$TOOL --help' to check whether - # $TOOL exists and not knowing $TOOL uses missing. - exit 1 - fi - ;; -esac - -# If it does not exist, or fails to run (possibly an outdated version), -# try to emulate it. -case $program in - aclocal*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified 'acinclude.m4' or '${configure_ac}'. You might want - to install the Automake and Perl packages. Grab them from - any GNU archive site." - touch aclocal.m4 - ;; - - autoconf*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified '${configure_ac}'. You might want to install the - Autoconf and GNU m4 packages. Grab them from any GNU - archive site." - touch configure - ;; - - autoheader*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified 'acconfig.h' or '${configure_ac}'. You might want - to install the Autoconf and GNU m4 packages. Grab them - from any GNU archive site." - files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` - test -z "$files" && files="config.h" - touch_files= - for f in $files; do - case $f in - *:*) touch_files="$touch_files "`echo "$f" | - sed -e 's/^[^:]*://' -e 's/:.*//'`;; - *) touch_files="$touch_files $f.in";; - esac - done - touch $touch_files - ;; - - automake*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'. - You might want to install the Automake and Perl packages. - Grab them from any GNU archive site." - find . -type f -name Makefile.am -print | - sed 's/\.am$/.in/' | - while read f; do touch "$f"; done - ;; - - autom4te*) - echo 1>&2 "\ -WARNING: '$1' is needed, but is $msg. - You might have modified some files without having the - proper tools for further handling them. - You can get '$1' as part of Autoconf from any GNU - archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo "#! /bin/sh" - echo "# Created by GNU Automake missing as a replacement of" - echo "# $ $@" - echo "exit 0" - chmod +x $file - exit 1 - fi - ;; - - bison*|yacc*) - echo 1>&2 "\ -WARNING: '$1' $msg. You should only need it if - you modified a '.y' file. You may need the Bison package - in order for those modifications to take effect. You can get - Bison from any GNU archive site." - rm -f y.tab.c y.tab.h - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.y) - SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.c - fi - SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" y.tab.h - fi - ;; - esac - fi - if test ! -f y.tab.h; then - echo >y.tab.h - fi - if test ! -f y.tab.c; then - echo 'main() { return 0; }' >y.tab.c - fi - ;; - - lex*|flex*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified a '.l' file. You may need the Flex package - in order for those modifications to take effect. You can get - Flex from any GNU archive site." - rm -f lex.yy.c - if test $# -ne 1; then - eval LASTARG=\${$#} - case $LASTARG in - *.l) - SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` - if test -f "$SRCFILE"; then - cp "$SRCFILE" lex.yy.c - fi - ;; - esac - fi - if test ! -f lex.yy.c; then - echo 'main() { return 0; }' >lex.yy.c - fi - ;; - - help2man*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified a dependency of a manual page. You may need the - Help2man package in order for those modifications to take - effect. You can get Help2man from any GNU archive site." - - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -f "$file"; then - touch $file - else - test -z "$file" || exec >$file - echo ".ab help2man is required to generate this page" - exit $? - fi - ;; - - makeinfo*) - echo 1>&2 "\ -WARNING: '$1' is $msg. You should only need it if - you modified a '.texi' or '.texinfo' file, or any other file - indirectly affecting the aspect of the manual. The spurious - call might also be the consequence of using a buggy 'make' (AIX, - DU, IRIX). You might want to install the Texinfo package or - the GNU make package. Grab either from any GNU archive site." - # The file to touch is that specified with -o ... - file=`echo "$*" | sed -n "$sed_output"` - test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` - if test -z "$file"; then - # ... or it is the one specified with @setfilename ... - infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` - file=`sed -n ' - /^@setfilename/{ - s/.* \([^ ]*\) *$/\1/ - p - q - }' $infile` - # ... or it is derived from the source name (dir/f.texi becomes f.info) - test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info - fi - # If the file does not exist, the user really needs makeinfo; - # let's fail without touching anything. - test -f $file || exit 1 - touch $file - ;; - - *) - echo 1>&2 "\ -WARNING: '$1' is needed, and is $msg. - You might have modified some files without having the - proper tools for further handling them. Check the 'README' file, - it often tells you about the needed prerequisites for installing - this package. You may also peek at any GNU archive site, in case - some other package would contain this missing '$1' program." - exit 1 - ;; -esac - -exit 0 - -# 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: "UTC" -# time-stamp-end: "; # UTC" -# End: diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/configure b/java/leveldbjni/leveldbjni/src/main/native-package/configure deleted file mode 100755 index 733b6cdbca..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/configure +++ /dev/null @@ -1,18037 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for leveldbjni 99-master-SNAPSHOT. -# -# -# 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 -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ - || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script 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'" - -SHELL=${CONFIG_SHELL-/bin/sh} - - -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='leveldbjni' -PACKAGE_TARNAME='leveldbjni' -PACKAGE_VERSION='99-master-SNAPSHOT' -PACKAGE_STRING='leveldbjni 99-master-SNAPSHOT' -PACKAGE_BUGREPORT='' -PACKAGE_URL='' - -ac_unique_file="src/leveldbjni.cpp" -# 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 -am__untar -am__tar -AMTAR -am__leading_dot -SET_MAKE -MKDIR_P -INSTALL_STRIP_PROGRAM -install_sh -MAKEINFO -AUTOHEADER -AUTOMAKE -AUTOCONF -ACLOCAL -VERSION -PACKAGE -CYGPATH_W -am__isrc -OSX_VERSION -OSX_SDKS_DIR -JNI_EXTRA_LDFLAGS -JNI_EXTRA_CFLAGS -JNI_JDK -CXXCPP -CPP -OTOOL64 -OTOOL -LIPO -NMEDIT -DSYMUTIL -MANIFEST_TOOL -AWK -RANLIB -STRIP -ac_ct_AR -AR -DLLTOOL -OBJDUMP -LN_S -NM -ac_ct_DUMPBIN -DUMPBIN -LD -FGREP -EGREP -GREP -SED -ac_ct_CC -CFLAGS -CC -LIBTOOL -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -OBJEXT -EXEEXT -ac_ct_CXX -CPPFLAGS -LDFLAGS -CXXFLAGS -CXX -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -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' -ac_subst_files='' -ac_user_opts=' -enable_option_checking -enable_static -enable_shared -with_pic -enable_fast_install -with_gnu_ld -with_sysroot -enable_libtool_lock -with_jni_jdk -with_leveldb -with_snappy -with_osxsdk -with_universal -' - ac_precious_vars='build_alias -host_alias -target_alias -CXX -CXXFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCC -CC -CFLAGS -CPP -CXXCPP' - - -# 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 leveldbjni 99-master-SNAPSHOT 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/leveldbjni] - --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] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - case $ac_init_help in - short | recursive ) echo "Configuration of leveldbjni 99-master-SNAPSHOT:";; - 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-static[=PKGS] build static libraries [default=no] - --enable-shared[=PKGS] build shared libraries [default=yes] - --enable-fast-install[=PKGS] - optimize for fast installation [default=yes] - --disable-libtool-lock avoid locking (might break parallel builds) - -Optional Packages: - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use - both] - --with-gnu-ld assume the C compiler uses GNU ld [default=no] - --with-sysroot=DIR Search for dependent libraries within DIR - (or the compiler's sysroot if not specified). - --with-jni-jdk=PATH Location of the Java Development Kit. Defaults to - your JAVA_HOME setting and falls back to where it is - typically installed on your OS - --with-leveldb[=PATH] Directory where leveldb was built. Example: - --with-leveldb=/opt/leveldb - --with-snappy[=PATH] Directory where snappy was built. Example: - --with-snappy=/opt/snappy - --with-osxsdk[=VERSION] OS X SDK version to build against. Example: - --with-osxsdk=10.6 - --with-universal[=ARCH] Build a universal binary. Set to a space separated - architecture list. Pick from: i386, x86_64, ppc, - and/or ppc64. [default="i386 x86_64"] - -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 - CPP C preprocessor - CXXCPP 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 the package provider. -_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 -leveldbjni configure 99-master-SNAPSHOT -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_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 - -# 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_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_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - 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. */ -/* Define $2 to an innocuous variant, in case declares $2. - For example, HP-UX 11i declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include -#else -# include -#endif - -#undef $2 - -/* 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 $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext 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_func - -# ac_fn_cxx_try_cpp LINENO -# ------------------------ -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_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_cxx_preproc_warn_flag$ac_cxx_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_cxx_try_cpp - -# ac_fn_cxx_try_link LINENO -# ------------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_cxx_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_cxx_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_cxx_try_link - -# ac_fn_cxx_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_cxx_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_cxx_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_cxx_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_cxx_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;} - ;; -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_cxx_check_header_mongrel -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 leveldbjni $as_me 99-master-SNAPSHOT, 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 - - -ac_aux_dir= -for ac_dir in autotools "$srcdir"/autotools; 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 autotools \"$srcdir\"/autotools" "$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. - - - - -ac_config_headers="$ac_config_headers src/config.h" - -# 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 - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - -## ----------------------------------------------- -## Application Checks -## ----------------------------------------------- -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=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 - -# 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' - -case `pwd` in - *\ * | *\ *) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 -$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; -esac - - - -macro_version='2.4.2' -macro_revision='1.3337' - - - - - - - - - - - - - -ltmain="$ac_aux_dir/ltmain.sh" - -# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\(["`$\\]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\(["`\\]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' - -ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 -$as_echo_n "checking how to print strings... " >&6; } -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "" -} - -case "$ECHO" in - printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 -$as_echo "printf" >&6; } ;; - print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 -$as_echo "print -r" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 -$as_echo "cat" >&6; } ;; -esac - - - - - - - - - - - - - - -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 - -{ $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 - -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" - - - - - - - - - - - -{ $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 fgrep" >&5 -$as_echo_n "checking for fgrep... " >&6; } -if ${ac_cv_path_FGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 - then ac_cv_path_FGREP="$GREP -F" - else - if test -z "$FGREP"; then - ac_path_FGREP_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 fgrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_FGREP" || continue -# Check for GNU ac_path_FGREP and select it if it is found. - # Check for GNU $ac_path_FGREP -case `"$ac_path_FGREP" --version 2>&1` in -*GNU*) - ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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 'FGREP' >> "conftest.nl" - "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_FGREP="$ac_path_FGREP" - ac_path_FGREP_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_FGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_FGREP"; then - as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_FGREP=$FGREP -fi - - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 -$as_echo "$ac_cv_path_FGREP" >&6; } - FGREP="$ac_cv_path_FGREP" - - -test -z "$GREP" && GREP=grep - - - - - - - - - - - - - - - - - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 -$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } -if ${lt_cv_path_NM+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 -$as_echo "$lt_cv_path_NM" >&6; } -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - if test -n "$ac_tool_prefix"; then - for ac_prog in dumpbin "link -dump" - 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_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DUMPBIN"; then - ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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 -DUMPBIN=$ac_cv_prog_DUMPBIN -if test -n "$DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 -$as_echo "$DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$DUMPBIN" && break - done -fi -if test -z "$DUMPBIN"; then - ac_ct_DUMPBIN=$DUMPBIN - for ac_prog in dumpbin "link -dump" -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_DUMPBIN+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DUMPBIN"; then - ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN -if test -n "$ac_ct_DUMPBIN"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 -$as_echo "$ac_ct_DUMPBIN" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_DUMPBIN" && break -done - - if test "x$ac_ct_DUMPBIN" = x; then - DUMPBIN=":" - 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 - DUMPBIN=$ac_ct_DUMPBIN - fi -fi - - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 -$as_echo_n "checking the name lister ($NM) interface... " >&6; } -if ${lt_cv_nm_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&5 - (eval echo "\"\$as_me:$LINENO: output\"" >&5) - cat conftest.out >&5 - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 -$as_echo "$lt_cv_nm_interface" >&6; } - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 -$as_echo_n "checking whether ln -s works... " >&6; } -LN_S=$as_ln_s -if test "$LN_S" = "ln -s"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 -$as_echo "no, using $LN_S" >&6; } -fi - -# find the maximum length of command line arguments -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 -$as_echo_n "checking the maximum length of command line arguments... " >&6; } -if ${lt_cv_sys_max_cmd_len+:} false; then : - $as_echo_n "(cached) " >&6 -else - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac - -fi - -if test -n $lt_cv_sys_max_cmd_len ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 -$as_echo "$lt_cv_sys_max_cmd_len" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 -$as_echo "none" >&6; } -fi -max_cmd_len=$lt_cv_sys_max_cmd_len - - - - - - -: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 -$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 -$as_echo "$xsi_shell" >&6; } - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 -$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } -lt_shell_append=no -( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 -$as_echo "$lt_shell_append" >&6; } - - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi - - - - - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 -$as_echo_n "checking how to convert $build file names to $host format... " >&6; } -if ${lt_cv_to_host_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac - -fi - -to_host_file_cmd=$lt_cv_to_host_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 -$as_echo "$lt_cv_to_host_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 -$as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } -if ${lt_cv_to_tool_file_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - #assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac - -fi - -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 -$as_echo "$lt_cv_to_tool_file_cmd" >&6; } - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 -$as_echo_n "checking for $LD option to reload object files... " >&6; } -if ${lt_cv_ld_reload_flag+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_reload_flag='-r' -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 -$as_echo "$lt_cv_ld_reload_flag" >&6; } -reload_flag=$lt_cv_ld_reload_flag -case $reload_flag in -"" | " "*) ;; -*) reload_flag=" $reload_flag" ;; -esac -reload_cmds='$LD$reload_flag -o $output$reload_objs' -case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - if test "$GCC" != yes; then - reload_cmds=false - fi - ;; - darwin*) - if test "$GCC" = yes; then - reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' - else - reload_cmds='$LD$reload_flag -o $output$reload_objs' - fi - ;; -esac - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. -set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OBJDUMP"; then - ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" - $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 -OBJDUMP=$ac_cv_prog_OBJDUMP -if test -n "$OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 -$as_echo "$OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OBJDUMP"; then - ac_ct_OBJDUMP=$OBJDUMP - # Extract the first word of "objdump", so it can be a program name with args. -set dummy objdump; 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_OBJDUMP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OBJDUMP"; then - ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" - $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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP -if test -n "$ac_ct_OBJDUMP"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 -$as_echo "$ac_ct_OBJDUMP" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OBJDUMP" = x; then - OBJDUMP="false" - 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 - OBJDUMP=$ac_ct_OBJDUMP - fi -else - OBJDUMP="$ac_cv_prog_OBJDUMP" -fi - -test -z "$OBJDUMP" && OBJDUMP=objdump - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 -$as_echo_n "checking how to recognize dependent libraries... " >&6; } -if ${lt_cv_deplibs_check_method+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_file_magic_cmd='$MAGIC_CMD' -lt_cv_file_magic_test_file= -lt_cv_deplibs_check_method='unknown' -# Need to set the preceding variable on all platforms that support -# interlibrary dependencies. -# 'none' -- dependencies not supported. -# `unknown' -- same as none, but documents that we really don't know. -# 'pass_all' -- all dependencies passed with no checks. -# 'test_compile' -- check by making test program. -# 'file_magic [[regex]]' -- check by looking for files in library path -# which responds to the $file_magic_cmd with a given extended regex. -# If you have `file' or equivalent on your system and you're not sure -# whether `pass_all' will *always* work, you probably want this one. - -case $host_os in -aix[4-9]*) - lt_cv_deplibs_check_method=pass_all - ;; - -beos*) - lt_cv_deplibs_check_method=pass_all - ;; - -bsdi[45]*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' - lt_cv_file_magic_cmd='/usr/bin/file -L' - lt_cv_file_magic_test_file=/shlib/libc.so - ;; - -cygwin*) - # func_win32_libid is a shell function defined in ltmain.sh - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - ;; - -mingw* | pw32*) - # Base MSYS/MinGW do not provide the 'file' command needed by - # func_win32_libid shell function, so use a weaker test based on 'objdump', - # unless we find 'file', for example because we are cross-compiling. - # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. - if ( test "$lt_cv_nm_interface" = "BSD nm" && file / ) >/dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[3-9]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 -$as_echo "$lt_cv_deplibs_check_method" >&6; } - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - - - - - - - - - - - - - - - - - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. -set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DLLTOOL"; then - ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool" - $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 -DLLTOOL=$ac_cv_prog_DLLTOOL -if test -n "$DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 -$as_echo "$DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DLLTOOL"; then - ac_ct_DLLTOOL=$DLLTOOL - # Extract the first word of "dlltool", so it can be a program name with args. -set dummy dlltool; 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_DLLTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DLLTOOL"; then - ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool" - $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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL -if test -n "$ac_ct_DLLTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 -$as_echo "$ac_ct_DLLTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DLLTOOL" = x; then - DLLTOOL="false" - 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 - DLLTOOL=$ac_ct_DLLTOOL - fi -else - DLLTOOL="$ac_cv_prog_DLLTOOL" -fi - -test -z "$DLLTOOL" && DLLTOOL=dlltool - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 -$as_echo_n "checking how to associate runtime and link libraries... " >&6; } -if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 -$as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - - - - - - - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar - 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_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # 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_AR="$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 -AR=$ac_cv_prog_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 - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar -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_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - 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 - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} -: ${AR_FLAGS=cru} - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 -$as_echo_n "checking for archiver @FILE support... " >&6; } -if ${lt_cv_ar_at_file+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ar_at_file=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 - (eval $lt_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 -$as_echo "$lt_cv_ar_at_file" >&6; } - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi - - - - - - - -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 - -test -z "$STRIP" && STRIP=: - - - - - - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; 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_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # 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_RANLIB="${ac_tool_prefix}ranlib" - $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 -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; 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_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # 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_RANLIB="ranlib" - $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_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - 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 - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - -test -z "$RANLIB" && RANLIB=: - - - - - - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac - - - - - - - - - - - - - - - - - - - - - -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 - - - - - - - - - - - - - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - -# Check for command to grab the raw symbol name followed by C symbol from nm. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 -$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } -if ${lt_cv_sys_global_symbol_pipe+:} false; then : - $as_echo_n "(cached) " >&6 -else - -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[BCDEGRST]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([_A-Za-z][_A-Za-z0-9]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[BCDT]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[ABCDGISTW]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[ABCDEGRST]' - fi - ;; -irix* | nonstopux*) - symcode='[BCDEGRST]' - ;; -osf*) - symcode='[BCDEGQRST]' - ;; -solaris*) - symcode='[BDRT]' - ;; -sco3.2v5*) - symcode='[DT]' - ;; -sysv4.2uw2*) - symcode='[DT]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[ABDT]' - ;; -sysv4) - symcode='[DFNSTU]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[ABCDGIRSTW]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\)[ ]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK '"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Now try to grab the symbols. - nlist=conftest.nm - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 - (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT_DLSYM_CONST -#else -# define LT_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&5 - fi - else - echo "cannot find nm_test_var in $nlist" >&5 - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 - fi - else - echo "$progname: failed program was:" >&5 - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done - -fi - -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 -$as_echo "failed" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 -$as_echo "ok" >&6; } -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 -$as_echo_n "checking for sysroot... " >&6; } - -# Check whether --with-sysroot was given. -if test "${with_sysroot+set}" = set; then : - withval=$with_sysroot; -else - with_sysroot=no -fi - - -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 -$as_echo "${with_sysroot}" >&6; } - as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 - ;; -esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 -$as_echo "${lt_sysroot:-no}" >&6; } - - - - - -# Check whether --enable-libtool-lock was given. -if test "${enable_libtool_lock+set}" = set; then : - enableval=$enable_libtool_lock; -fi - -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '#line '$LINENO' "configure"' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 -$as_echo_n "checking whether the C compiler needs -belf... " >&6; } -if ${lt_cv_cc_needs_belf+:} false; then : - $as_echo_n "(cached) " >&6 -else - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_cc_needs_belf=yes -else - lt_cv_cc_needs_belf=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext 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: $lt_cv_cc_needs_belf" >&5 -$as_echo "$lt_cv_cc_needs_belf" >&6; } - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. -set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$MANIFEST_TOOL"; then - ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt" - $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 -MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL -if test -n "$MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 -$as_echo "$MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_MANIFEST_TOOL"; then - ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL - # Extract the first word of "mt", so it can be a program name with args. -set dummy mt; 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_MANIFEST_TOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_MANIFEST_TOOL"; then - ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt" - $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL -if test -n "$ac_ct_MANIFEST_TOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 -$as_echo "$ac_ct_MANIFEST_TOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_MANIFEST_TOOL" = x; then - MANIFEST_TOOL=":" - 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 - MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL - fi -else - MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" -fi - -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 -$as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } -if ${lt_cv_path_mainfest_tool+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&5 - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 -$as_echo "$lt_cv_path_mainfest_tool" >&6; } -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi - - - - - - - case $host_os in - rhapsody* | darwin*) - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. -set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$DSYMUTIL"; then - ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" - $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 -DSYMUTIL=$ac_cv_prog_DSYMUTIL -if test -n "$DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 -$as_echo "$DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_DSYMUTIL"; then - ac_ct_DSYMUTIL=$DSYMUTIL - # Extract the first word of "dsymutil", so it can be a program name with args. -set dummy dsymutil; 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_DSYMUTIL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_DSYMUTIL"; then - ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" - $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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL -if test -n "$ac_ct_DSYMUTIL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 -$as_echo "$ac_ct_DSYMUTIL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_DSYMUTIL" = x; then - DSYMUTIL=":" - 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 - DSYMUTIL=$ac_ct_DSYMUTIL - fi -else - DSYMUTIL="$ac_cv_prog_DSYMUTIL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. -set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$NMEDIT"; then - ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" - $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 -NMEDIT=$ac_cv_prog_NMEDIT -if test -n "$NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 -$as_echo "$NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_NMEDIT"; then - ac_ct_NMEDIT=$NMEDIT - # Extract the first word of "nmedit", so it can be a program name with args. -set dummy nmedit; 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_NMEDIT+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_NMEDIT"; then - ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" - $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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT -if test -n "$ac_ct_NMEDIT"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 -$as_echo "$ac_ct_NMEDIT" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_NMEDIT" = x; then - NMEDIT=":" - 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 - NMEDIT=$ac_ct_NMEDIT - fi -else - NMEDIT="$ac_cv_prog_NMEDIT" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. -set dummy ${ac_tool_prefix}lipo; 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_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$LIPO"; then - ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" - $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 -LIPO=$ac_cv_prog_LIPO -if test -n "$LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 -$as_echo "$LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_LIPO"; then - ac_ct_LIPO=$LIPO - # Extract the first word of "lipo", so it can be a program name with args. -set dummy lipo; 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_LIPO+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_LIPO"; then - ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" - $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_LIPO=$ac_cv_prog_ac_ct_LIPO -if test -n "$ac_ct_LIPO"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 -$as_echo "$ac_ct_LIPO" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_LIPO" = x; then - LIPO=":" - 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 - LIPO=$ac_ct_LIPO - fi -else - LIPO="$ac_cv_prog_LIPO" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool; 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_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL"; then - ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" - $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 -OTOOL=$ac_cv_prog_OTOOL -if test -n "$OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 -$as_echo "$OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL"; then - ac_ct_OTOOL=$OTOOL - # Extract the first word of "otool", so it can be a program name with args. -set dummy otool; 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_OTOOL+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL"; then - ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" - $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_OTOOL=$ac_cv_prog_ac_ct_OTOOL -if test -n "$ac_ct_OTOOL"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 -$as_echo "$ac_ct_OTOOL" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL" = x; then - OTOOL=":" - 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 - OTOOL=$ac_ct_OTOOL - fi -else - OTOOL="$ac_cv_prog_OTOOL" -fi - - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. -set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$OTOOL64"; then - ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" - $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 -OTOOL64=$ac_cv_prog_OTOOL64 -if test -n "$OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 -$as_echo "$OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_OTOOL64"; then - ac_ct_OTOOL64=$OTOOL64 - # Extract the first word of "otool64", so it can be a program name with args. -set dummy otool64; 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_OTOOL64+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_OTOOL64"; then - ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" - $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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 -if test -n "$ac_ct_OTOOL64"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 -$as_echo "$ac_ct_OTOOL64" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_OTOOL64" = x; then - OTOOL64=":" - 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 - OTOOL64=$ac_ct_OTOOL64 - fi -else - OTOOL64="$ac_cv_prog_OTOOL64" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 -$as_echo_n "checking for -single_module linker flag... " >&6; } -if ${lt_cv_apple_cc_single_mod+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&5 - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&5 - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 -$as_echo "$lt_cv_apple_cc_single_mod" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 -$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } -if ${lt_cv_ld_exported_symbols_list+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_ld_exported_symbols_list=yes -else - lt_cv_ld_exported_symbols_list=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 -$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 -$as_echo_n "checking for -force_load linker flag... " >&6; } -if ${lt_cv_ld_force_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 - echo "$AR cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 - echo "$RANLIB libconftest.a" >&5 - $RANLIB libconftest.a 2>&5 - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&5 - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&5 - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 -$as_echo "$lt_cv_ld_force_load" >&6; } - case $host_os in - rhapsody* | darwin1.[012]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[91]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[012]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac - -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 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 - - -for ac_header in dlfcn.h -do : - ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default -" -if test "x$ac_cv_header_dlfcn_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_DLFCN_H 1 -_ACEOF - -fi - -done - - - - -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf - - - - - -# Set options -# Check whether --enable-static was given. -if test "${enable_static+set}" = set; then : - enableval=$enable_static; p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_static=no -fi - - - - - - - - - - - enable_dlopen=no - - - enable_win32_dll=no - - - # Check whether --enable-shared was given. -if test "${enable_shared+set}" = set; then : - enableval=$enable_shared; p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_shared=yes -fi - - - - - - - - - - - -# Check whether --with-pic was given. -if test "${with_pic+set}" = set; then : - withval=$with_pic; lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - pic_mode=default -fi - - -test -z "$pic_mode" && pic_mode=default - - - - - - - - # Check whether --enable-fast-install was given. -if test "${enable_fast_install+set}" = set; then : - enableval=$enable_fast_install; p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac -else - enable_fast_install=yes -fi - - - - - - - - - - - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -test -z "$LN_S" && LN_S="ln -s" - - - - - - - - - - - - - - -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 -$as_echo_n "checking for objdir... " >&6; } -if ${lt_cv_objdir+:} false; then : - $as_echo_n "(cached) " >&6 -else - rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 -$as_echo "$lt_cv_objdir" >&6; } -objdir=$lt_cv_objdir - - - - - -cat >>confdefs.h <<_ACEOF -#define LT_OBJDIR "$lt_cv_objdir/" -_ACEOF - - - - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 -$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/${ac_tool_prefix}file; then - lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - - - -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 -$as_echo_n "checking for file... " >&6; } -if ${lt_cv_path_MAGIC_CMD+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $MAGIC_CMD in -[\\/*] | ?:[\\/]*) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/file; then - lt_cv_path_MAGIC_CMD="$ac_dir/file" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac -fi - -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 -$as_echo "$MAGIC_CMD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - else - MAGIC_CMD=: - fi -fi - - fi - ;; -esac - -# Use C for the default configuration in the libtool script - -lt_save_CC="$CC" -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 - - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -objext=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - -lt_prog_compiler_no_builtin_flag= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; - *) - lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 -$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } -if ${lt_cv_prog_compiler_rtti_exceptions+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_rtti_exceptions=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="-fno-rtti -fno-exceptions" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_rtti_exceptions=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 -$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } - -if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then - lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" -else - : -fi - -fi - - - - - - - lt_prog_compiler_wl= -lt_prog_compiler_pic= -lt_prog_compiler_static= - - - if test "$GCC" = yes; then - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_static='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - ;; - - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - lt_prog_compiler_can_build_shared=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic=-Kconform_pic - fi - ;; - - *) - lt_prog_compiler_pic='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - lt_prog_compiler_wl='-Xlinker ' - if test -n "$lt_prog_compiler_pic"; then - lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - lt_prog_compiler_wl='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static='-Bstatic' - else - lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic='-DDLL_EXPORT' - ;; - - hpux9* | hpux10* | hpux11*) - lt_prog_compiler_wl='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - lt_prog_compiler_static='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - lt_prog_compiler_wl='-Wl,' - # PIC (with -KPIC) is the default. - lt_prog_compiler_static='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='--shared' - lt_prog_compiler_static='--static' - ;; - nagfor*) - # NAG Fortran compiler - lt_prog_compiler_wl='-Wl,-Wl,,' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - ccc*) - lt_prog_compiler_wl='-Wl,' - # All Alpha code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-qpic' - lt_prog_compiler_static='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='' - ;; - *Sun\ F* | *Sun*Fortran*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - lt_prog_compiler_wl='-Wl,' - ;; - *Intel*\ [CF]*Compiler*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fPIC' - lt_prog_compiler_static='-static' - ;; - *Portland\ Group*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-fpic' - lt_prog_compiler_static='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - lt_prog_compiler_wl='-Wl,' - # All OSF/1 code is PIC. - lt_prog_compiler_static='-non_shared' - ;; - - rdos*) - lt_prog_compiler_static='-non_shared' - ;; - - solaris*) - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - lt_prog_compiler_wl='-Qoption ld ';; - *) - lt_prog_compiler_wl='-Wl,';; - esac - ;; - - sunos4*) - lt_prog_compiler_wl='-Qoption ld ' - lt_prog_compiler_pic='-PIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - lt_prog_compiler_pic='-Kconform_pic' - lt_prog_compiler_static='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_pic='-KPIC' - lt_prog_compiler_static='-Bstatic' - ;; - - unicos*) - lt_prog_compiler_wl='-Wl,' - lt_prog_compiler_can_build_shared=no - ;; - - uts4*) - lt_prog_compiler_pic='-pic' - lt_prog_compiler_static='-Bstatic' - ;; - - *) - lt_prog_compiler_can_build_shared=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic= - ;; - *) - lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic=$lt_prog_compiler_pic -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 -$as_echo "$lt_cv_prog_compiler_pic" >&6; } -lt_prog_compiler_pic=$lt_cv_prog_compiler_pic - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } -if ${lt_cv_prog_compiler_pic_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works" = xyes; then - case $lt_prog_compiler_pic in - "" | " "*) ;; - *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; - esac -else - lt_prog_compiler_pic= - lt_prog_compiler_can_build_shared=no -fi - -fi - - - - - - - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works=yes - fi - else - lt_cv_prog_compiler_static_works=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 -$as_echo "$lt_cv_prog_compiler_static_works" >&6; } - -if test x"$lt_cv_prog_compiler_static_works" = xyes; then - : -else - lt_prog_compiler_static= -fi - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 -$as_echo "$lt_cv_prog_compiler_c_o" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - runpath_var= - allow_undefined_flag= - always_export_symbols=no - archive_cmds= - archive_expsym_cmds= - compiler_needs_object=no - enable_shared_with_static_runtimes=no - export_dynamic_flag_spec= - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - hardcode_automatic=no - hardcode_direct=no - hardcode_direct_absolute=no - hardcode_libdir_flag_spec= - hardcode_libdir_separator= - hardcode_minus_L=no - hardcode_shlibpath_var=unsupported - inherit_rpath=no - link_all_deplibs=unknown - module_cmds= - module_expsym_cmds= - old_archive_from_new_cmds= - old_archive_from_expsyms_cmds= - thread_safe_flag_spec= - whole_archive_flag_spec= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - include_expsyms= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - ld_shlibs=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; - *\ \(GNU\ Binutils\)\ [3-9]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[3-9]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec='-L$libdir' - export_dynamic_flag_spec='${wl}--export-all-symbols' - allow_undefined_flag=unsupported - always_export_symbols=no - enable_shared_with_static_runtimes=yes - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs=no - fi - ;; - - haiku*) - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs=yes - ;; - - interix[3-9]*) - hardcode_direct=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - whole_archive_flag_spec= - tmp_sharedflag='--shared' ;; - xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - ld_shlibs=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) - ld_shlibs=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - ;; - - sunos4*) - archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - ld_shlibs=no - fi - ;; - esac - - if test "$ld_shlibs" = no; then - runpath_var= - hardcode_libdir_flag_spec= - export_dynamic_flag_spec= - whole_archive_flag_spec= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - allow_undefined_flag=unsupported - always_export_symbols=yes - archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - hardcode_minus_L=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - hardcode_direct=unsupported - fi - ;; - - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds='' - hardcode_direct=yes - hardcode_direct_absolute=yes - hardcode_libdir_separator=':' - link_all_deplibs=yes - file_list_spec='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L=yes - hardcode_libdir_flag_spec='-L$libdir' - hardcode_libdir_separator= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - always_export_symbols=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag="-z nodefs" - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath_+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath_"; then - lt_cv_aix_libpath_="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath_ -fi - - hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag=' ${wl}-bernotok' - allow_undefined_flag=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec='$convenience' - fi - archive_cmds_need_lc=yes - # This is similar to how AIX traditionally builds its shared libraries. - archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds='' - ;; - m68k) - archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - ;; - esac - ;; - - bsdi[45]*) - export_dynamic_flag_spec=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - always_export_symbols=yes - file_list_spec='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, )='true' - enable_shared_with_static_runtimes=yes - exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - old_postinstall_cmds='chmod 644 $oldlib' - postlink_cmds='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - hardcode_libdir_flag_spec=' ' - allow_undefined_flag=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - old_archive_from_new_cmds='true' - # FIXME: Should let the user specify the lib program. - old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' - enable_shared_with_static_runtimes=yes - ;; - esac - ;; - - darwin* | rhapsody*) - - - archive_cmds_need_lc=no - hardcode_direct=no - hardcode_automatic=yes - hardcode_shlibpath_var=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec='' - fi - link_all_deplibs=yes - allow_undefined_flag="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - - else - ld_shlibs=no - fi - - ;; - - dgux*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - hpux9*) - if test "$GCC" = yes; then - archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - export_dynamic_flag_spec='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 -$as_echo_n "checking if $CC understands -b... " >&6; } -if ${lt_cv_prog_compiler__b+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler__b=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -b" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler__b=yes - fi - else - lt_cv_prog_compiler__b=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 -$as_echo "$lt_cv_prog_compiler__b" >&6; } - -if test x"$lt_cv_prog_compiler__b" = xyes; then - archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' -else - archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' -fi - - ;; - esac - fi - if test "$with_gnu_ld" = no; then - hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' - hardcode_libdir_separator=: - - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct=no - hardcode_shlibpath_var=no - ;; - *) - hardcode_direct=yes - hardcode_direct_absolute=yes - export_dynamic_flag_spec='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - hardcode_minus_L=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 -$as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } -if ${lt_cv_irix_exported_symbol+:} false; then : - $as_echo_n "(cached) " >&6 -else - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int foo (void) { return 0; } -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - lt_cv_irix_exported_symbol=yes -else - lt_cv_irix_exported_symbol=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS="$save_LDFLAGS" -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 -$as_echo "$lt_cv_irix_exported_symbol" >&6; } - if test "$lt_cv_irix_exported_symbol" = yes; then - archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - inherit_rpath=yes - link_all_deplibs=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_direct=yes - hardcode_shlibpath_var=no - ;; - - newsos6) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - hardcode_shlibpath_var=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct=yes - hardcode_shlibpath_var=no - hardcode_direct_absolute=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - export_dynamic_flag_spec='${wl}-E' - else - case $host_os in - openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) - archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-R$libdir' - ;; - *) - archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - hardcode_libdir_flag_spec='${wl}-rpath,$libdir' - ;; - esac - fi - else - ld_shlibs=no - fi - ;; - - os2*) - hardcode_libdir_flag_spec='-L$libdir' - hardcode_minus_L=yes - allow_undefined_flag=unsupported - archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - archive_cmds_need_lc='no' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' - else - allow_undefined_flag=' -expect_unresolved \*' - archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - hardcode_libdir_flag_spec='-rpath $libdir' - fi - archive_cmds_need_lc='no' - hardcode_libdir_separator=: - ;; - - solaris*) - no_undefined_flag=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - archive_cmds='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - hardcode_libdir_flag_spec='-R$libdir' - hardcode_shlibpath_var=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - whole_archive_flag_spec='-z allextract$convenience -z defaultextract' - fi - ;; - esac - link_all_deplibs=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - hardcode_libdir_flag_spec='-L$libdir' - hardcode_direct=yes - hardcode_minus_L=yes - hardcode_shlibpath_var=no - ;; - - sysv4) - case $host_vendor in - sni) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' - reload_cmds='$CC -r -o $output$reload_objs' - hardcode_direct=no - ;; - motorola) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_direct=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - hardcode_shlibpath_var=no - ;; - - sysv4.3*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - export_dynamic_flag_spec='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_shlibpath_var=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - ld_shlibs=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag='${wl}-z,text' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag='${wl}-z,text' - allow_undefined_flag='${wl}-z,nodefs' - archive_cmds_need_lc=no - hardcode_shlibpath_var=no - hardcode_libdir_flag_spec='${wl}-R,$libdir' - hardcode_libdir_separator=':' - link_all_deplibs=yes - export_dynamic_flag_spec='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - hardcode_libdir_flag_spec='-L$libdir' - hardcode_shlibpath_var=no - ;; - - *) - ld_shlibs=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - export_dynamic_flag_spec='${wl}-Blargedynsym' - ;; - esac - fi - fi - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 -$as_echo "$ld_shlibs" >&6; } -test "$ld_shlibs" = no && can_build_shared=no - -with_gnu_ld=$with_gnu_ld - - - - - - - - - - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl - pic_flag=$lt_prog_compiler_pic - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag - allow_undefined_flag= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc=no - else - lt_cv_archive_cmds_need_lc=yes - fi - allow_undefined_flag=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc" >&6; } - archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[lt_foo]++; } - if (lt_freq[lt_foo] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([A-Za-z]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action= -if test -n "$hardcode_libdir_flag_spec" || - test -n "$runpath_var" || - test "X$hardcode_automatic" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && - test "$hardcode_minus_L" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 -$as_echo "$hardcode_action" >&6; } - -if test "$hardcode_action" = relink || - test "$inherit_rpath" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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 dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - -fi - - ;; - - *) - ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" -if test "x$ac_cv_func_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 -$as_echo_n "checking for shl_load in -ldld... " >&6; } -if ${ac_cv_lib_dld_shl_load+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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 shl_load (); -int -main () -{ -return shl_load (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_shl_load=yes -else - ac_cv_lib_dld_shl_load=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 -$as_echo "$ac_cv_lib_dld_shl_load" >&6; } -if test "x$ac_cv_lib_dld_shl_load" = xyes; then : - lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" -else - ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" -if test "x$ac_cv_func_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 -$as_echo_n "checking for dlopen in -ldl... " >&6; } -if ${ac_cv_lib_dl_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldl $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 dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dl_dlopen=yes -else - ac_cv_lib_dl_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 -$as_echo "$ac_cv_lib_dl_dlopen" >&6; } -if test "x$ac_cv_lib_dl_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 -$as_echo_n "checking for dlopen in -lsvld... " >&6; } -if ${ac_cv_lib_svld_dlopen+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lsvld $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 dlopen (); -int -main () -{ -return dlopen (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_svld_dlopen=yes -else - ac_cv_lib_svld_dlopen=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 -$as_echo "$ac_cv_lib_svld_dlopen" >&6; } -if test "x$ac_cv_lib_svld_dlopen" = xyes; then : - lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 -$as_echo_n "checking for dld_link in -ldld... " >&6; } -if ${ac_cv_lib_dld_dld_link+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_check_lib_save_LIBS=$LIBS -LIBS="-ldld $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 dld_link (); -int -main () -{ -return dld_link (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_dld_dld_link=yes -else - ac_cv_lib_dld_dld_link=no -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 -$as_echo "$ac_cv_lib_dld_dld_link" >&6; } -if test "x$ac_cv_lib_dld_dld_link" = xyes; then : - lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" -fi - - -fi - - -fi - - -fi - - -fi - - -fi - - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 -$as_echo_n "checking whether a program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 -$as_echo "$lt_cv_dlopen_self" >&6; } - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 -$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } -if ${lt_cv_dlopen_self_static+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "$cross_compiling" = yes; then : - lt_cv_dlopen_self_static=cross -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -} -_LT_EOF - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 - (eval $ac_link) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&5 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; - x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; - esac - else : - # compilation failed - lt_cv_dlopen_self_static=no - fi -fi -rm -fr conftest* - - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 -$as_echo "$lt_cv_dlopen_self_static" >&6; } - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi - - - - - - - - - - - - - - - - - -striplib= -old_striplib= -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 -$as_echo_n "checking whether stripping libraries is possible... " >&6; } -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - fi - ;; - *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - ;; - esac -fi - - - - - - - - - - - - - # Report which library types will actually be built - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 -$as_echo_n "checking if libtool supports shared libraries... " >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 -$as_echo "$can_build_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 -$as_echo_n "checking whether to build shared libraries... " >&6; } - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[4-9]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 -$as_echo "$enable_shared" >&6; } - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 -$as_echo_n "checking whether to build static libraries... " >&6; } - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 -$as_echo "$enable_static" >&6; } - - - - -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 - -CC="$lt_save_CC" - - if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - 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 -{ $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; } -if test -z "$CXXCPP"; then - if ${ac_cv_prog_CXXCPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CXXCPP needs to be expanded - for CXXCPP in "$CXX -E" "/lib/cpp" - do - ac_preproc_ok=false -for ac_cxx_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_cxx_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_cxx_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_CXXCPP=$CXXCPP - -fi - CXXCPP=$ac_cv_prog_CXXCPP -else - ac_cv_prog_CXXCPP=$CXXCPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 -$as_echo "$CXXCPP" >&6; } -ac_preproc_ok=false -for ac_cxx_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_cxx_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_cxx_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 \"$CXXCPP\" 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 - -else - _lt_caught_CXX_error=yes -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 - -archive_cmds_need_lc_CXX=no -allow_undefined_flag_CXX= -always_export_symbols_CXX=no -archive_expsym_cmds_CXX= -compiler_needs_object_CXX=no -export_dynamic_flag_spec_CXX= -hardcode_direct_CXX=no -hardcode_direct_absolute_CXX=no -hardcode_libdir_flag_spec_CXX= -hardcode_libdir_separator_CXX= -hardcode_minus_L_CXX=no -hardcode_shlibpath_var_CXX=unsupported -hardcode_automatic_CXX=no -inherit_rpath_CXX=no -module_cmds_CXX= -module_expsym_cmds_CXX= -link_all_deplibs_CXX=unknown -old_archive_cmds_CXX=$old_archive_cmds -reload_flag_CXX=$reload_flag -reload_cmds_CXX=$reload_cmds -no_undefined_flag_CXX= -whole_archive_flag_spec_CXX= -enable_shared_with_static_runtimes_CXX=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -objext_CXX=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - - - - - - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC - - - # save warnings/boilerplate of simple test code - ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* - - ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* - - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - compiler_CXX=$CC - for cc_temp in $compiler""; do - case $cc_temp in - compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; - distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` - - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' - else - lt_prog_compiler_no_builtin_flag_CXX= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - - -# Check whether --with-gnu-ld was given. -if test "${with_gnu_ld+set}" = set; then : - withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes -else - with_gnu_ld=no -fi - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 -$as_echo_n "checking for ld used by $CC... " >&6; } - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [\\/]* | ?:[\\/]*) - re_direlt='/[^/][^/]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 -$as_echo_n "checking for GNU ld... " >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 -$as_echo_n "checking for non-GNU ld... " >&6; } -fi -if ${lt_cv_path_LD+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &5 -$as_echo "$LD" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi -test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 -$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } -if ${lt_cv_prog_gnu_ld+:} false; then : - $as_echo_n "(cached) " >&6 -else - # I'd rather use --version here, but apparently some GNU lds only accept -v. -case `$LD -v 2>&1 &5 -$as_echo "$lt_cv_prog_gnu_ld" >&6; } -with_gnu_ld=$lt_cv_prog_gnu_ld - - - - - - - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - archive_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - whole_archive_flag_spec_CXX= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - ld_shlibs_CXX=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aix[4-9]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - archive_cmds_CXX='' - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - file_list_spec_CXX='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[012]|aix4.[012].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - hardcode_direct_CXX=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - hardcode_minus_L_CXX=yes - hardcode_libdir_flag_spec_CXX='-L$libdir' - hardcode_libdir_separator_CXX= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - export_dynamic_flag_spec_CXX='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - always_export_symbols_CXX=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - allow_undefined_flag_CXX='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - - archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' - allow_undefined_flag_CXX="-z nodefs" - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - if ${lt_cv_aix_libpath__CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - - lt_aix_libpath_sed=' - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }' - lt_cv_aix_libpath__CXX=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - if test -z "$lt_cv_aix_libpath__CXX"; then - lt_cv_aix_libpath__CXX="/usr/lib:/lib" - fi - -fi - - aix_libpath=$lt_cv_aix_libpath__CXX -fi - - hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - no_undefined_flag_CXX=' ${wl}-bernotok' - allow_undefined_flag_CXX=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - whole_archive_flag_spec_CXX='$convenience' - fi - archive_cmds_need_lc_CXX=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - allow_undefined_flag_CXX=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - ld_shlibs_CXX=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - hardcode_libdir_flag_spec_CXX=' ' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=yes - file_list_spec_CXX='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - archive_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, CXX)='true' - enable_shared_with_static_runtimes_CXX=yes - # Don't use ranlib - old_postinstall_cmds_CXX='chmod 644 $oldlib' - postlink_cmds_CXX='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, - # as there is no search path for DLLs. - hardcode_libdir_flag_spec_CXX='-L$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-all-symbols' - allow_undefined_flag_CXX=unsupported - always_export_symbols_CXX=no - enable_shared_with_static_runtimes_CXX=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - ld_shlibs_CXX=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - - - archive_cmds_need_lc_CXX=no - hardcode_direct_CXX=no - hardcode_automatic_CXX=yes - hardcode_shlibpath_var_CXX=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - whole_archive_flag_spec_CXX='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - - else - whole_archive_flag_spec_CXX='' - fi - link_all_deplibs_CXX=yes - allow_undefined_flag_CXX="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - if test "$lt_cv_apple_cc_single_mod" != "yes"; then - archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi - - else - ld_shlibs_CXX=no - fi - - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - ld_shlibs_CXX=no - ;; - - freebsd-elf*) - archive_cmds_need_lc_CXX=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - ld_shlibs_CXX=yes - ;; - - gnu*) - ;; - - haiku*) - archive_cmds_CXX='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - link_all_deplibs_CXX=yes - ;; - - hpux9*) - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - export_dynamic_flag_spec_CXX='${wl}-E' - hardcode_direct_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - export_dynamic_flag_spec_CXX='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - ;; - *) - hardcode_direct_CXX=yes - hardcode_direct_absolute_CXX=yes - hardcode_minus_L_CXX=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - interix[3-9]*) - hardcode_direct_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - link_all_deplibs_CXX=yes - ;; - esac - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - inherit_rpath_CXX=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - archive_cmds_need_lc_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [1-5].* | *pgcpp\ [1-5].*) - prelink_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - old_archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - archive_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - export_dynamic_flag_spec_CXX='${wl}--export-dynamic' - archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - hardcode_libdir_flag_spec_CXX='-R$libdir' - whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - compiler_needs_object_CXX=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - ld_shlibs_CXX=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - ld_shlibs_CXX=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - hardcode_direct_CXX=yes - hardcode_shlibpath_var_CXX=no - hardcode_direct_absolute_CXX=yes - archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - export_dynamic_flag_spec_CXX='${wl}-E' - whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - ld_shlibs_CXX=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' - hardcode_libdir_separator_CXX=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - cxx*) - case $host in - osf3*) - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - ;; - *) - allow_undefined_flag_CXX=' -expect_unresolved \*' - archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - hardcode_libdir_flag_spec_CXX='-rpath $libdir' - ;; - esac - - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' - hardcode_libdir_separator_CXX=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - archive_cmds_need_lc_CXX=yes - no_undefined_flag_CXX=' -zdefs' - archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - hardcode_libdir_flag_spec_CXX='-R$libdir' - hardcode_shlibpath_var_CXX=no - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' - ;; - esac - link_all_deplibs_CXX=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - no_undefined_flag_CXX=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - archive_cmds_CXX='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' - case $host_os in - solaris2.[0-5] | solaris2.[0-5].*) ;; - *) - whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) - no_undefined_flag_CXX='${wl}-z,text' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - no_undefined_flag_CXX='${wl}-z,text' - allow_undefined_flag_CXX='${wl}-z,nodefs' - archive_cmds_need_lc_CXX=no - hardcode_shlibpath_var_CXX=no - hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' - hardcode_libdir_separator_CXX=':' - link_all_deplibs_CXX=yes - export_dynamic_flag_spec_CXX='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - old_archive_cmds_CXX='$CC -Tprelink_objects $oldobjs~ - '"$old_archive_cmds_CXX" - reload_cmds_CXX='$CC -Tprelink_objects $reload_objs~ - '"$reload_cmds_CXX" - ;; - *) - archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - - *) - # FIXME: insert proper C++ library support - ld_shlibs_CXX=no - ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } - test "$ld_shlibs_CXX" = no && can_build_shared=no - - GCC_CXX="$GXX" - LD_CXX="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - # Dependencies to place before and after the object being linked: -predep_objects_CXX= -postdep_objects_CXX= -predeps_CXX= -postdeps_CXX= -compiler_lib_search_path_CXX= - -cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF - - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$compiler_lib_search_path_CXX"; then - compiler_lib_search_path_CXX="${prev}${p}" - else - compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$postdeps_CXX"; then - postdeps_CXX="${prev}${p}" - else - postdeps_CXX="${postdeps_CXX} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$predep_objects_CXX"; then - predep_objects_CXX="$p" - else - predep_objects_CXX="$predep_objects_CXX $p" - fi - else - if test -z "$postdep_objects_CXX"; then - postdep_objects_CXX="$p" - else - postdep_objects_CXX="$postdep_objects_CXX $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling CXX test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -case $host_os in -interix[3-9]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - predep_objects_CXX= - postdep_objects_CXX= - postdeps_CXX= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - postdeps_CXX='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac - - -case " $postdeps_CXX " in -*" -lc "*) archive_cmds_need_lc_CXX=no ;; -esac - compiler_lib_search_dirs_CXX= -if test -n "${compiler_lib_search_path_CXX}"; then - compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - lt_prog_compiler_wl_CXX= -lt_prog_compiler_pic_CXX= -lt_prog_compiler_static_CXX= - - - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - lt_prog_compiler_pic_CXX='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - lt_prog_compiler_pic_CXX='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - lt_prog_compiler_pic_CXX= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - lt_prog_compiler_static_CXX= - ;; - interix[3-9]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - lt_prog_compiler_pic_CXX=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - *) - lt_prog_compiler_pic_CXX='-fPIC' - ;; - esac - else - case $host_os in - aix[4-9]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - lt_prog_compiler_static_CXX='-Bstatic' - else - lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - lt_prog_compiler_pic_CXX='-DDLL_EXPORT' - ;; - dgux*) - case $cc_basename in - ec++*) - lt_prog_compiler_pic_CXX='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - lt_prog_compiler_pic_CXX='+Z' - fi - ;; - aCC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - lt_prog_compiler_pic_CXX='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_static_CXX='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - lt_prog_compiler_wl_CXX='--backend -Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fPIC' - lt_prog_compiler_static_CXX='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-fpic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - xlc* | xlC* | bgxl[cC]* | mpixl[cC]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-qpic' - lt_prog_compiler_static_CXX='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - lt_prog_compiler_pic_CXX='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - lt_prog_compiler_pic_CXX='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - lt_prog_compiler_wl_CXX='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - lt_prog_compiler_pic_CXX='-pic' - ;; - cxx*) - # Digital/Compaq C++ - lt_prog_compiler_wl_CXX='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - lt_prog_compiler_pic_CXX= - lt_prog_compiler_static_CXX='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - lt_prog_compiler_wl_CXX='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - lt_prog_compiler_pic_CXX='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - lt_prog_compiler_pic_CXX='-pic' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - lcc*) - # Lucid - lt_prog_compiler_pic_CXX='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - lt_prog_compiler_wl_CXX='-Wl,' - lt_prog_compiler_pic_CXX='-KPIC' - lt_prog_compiler_static_CXX='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - lt_prog_compiler_pic_CXX='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - lt_prog_compiler_can_build_shared_CXX=no - ;; - esac - fi - -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - lt_prog_compiler_pic_CXX= - ;; - *) - lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX -DPIC" - ;; -esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 -$as_echo_n "checking for $compiler option to produce PIC... " >&6; } -if ${lt_cv_prog_compiler_pic_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_CXX=$lt_prog_compiler_pic_CXX -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_CXX" >&6; } -lt_prog_compiler_pic_CXX=$lt_cv_prog_compiler_pic_CXX - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$lt_prog_compiler_pic_CXX"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 -$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } -if ${lt_cv_prog_compiler_pic_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_pic_works_CXX=no - ac_outfile=conftest.$ac_objext - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$lt_prog_compiler_pic_CXX -DPIC" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_pic_works_CXX=yes - fi - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then - case $lt_prog_compiler_pic_CXX in - "" | " "*) ;; - *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; - esac -else - lt_prog_compiler_pic_CXX= - lt_prog_compiler_can_build_shared_CXX=no -fi - -fi - - - - - -# -# Check to make sure the static flag actually works. -# -wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 -$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } -if ${lt_cv_prog_compiler_static_works_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_static_works_CXX=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $lt_tmp_static_flag" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&5 - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - lt_cv_prog_compiler_static_works_CXX=yes - fi - else - lt_cv_prog_compiler_static_works_CXX=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } - -if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then - : -else - lt_prog_compiler_static_CXX= -fi - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 -$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } -if ${lt_cv_prog_compiler_c_o_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_prog_compiler_c_o_CXX=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&5 - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - lt_cv_prog_compiler_c_o_CXX=yes - fi - fi - chmod u+w . 2>&5 - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 -$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } - - - - -hard_links="nottested" -if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 -$as_echo_n "checking if we can lock with hard links... " >&6; } - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 -$as_echo "$hard_links" >&6; } - if test "$hard_links" = no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 -$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} - need_locks=warn - fi -else - need_locks=no -fi - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 -$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } - - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' - case $host_os in - aix[4-9]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - export_symbols_cmds_CXX="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' - exclude_expsyms_CXX='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' - ;; - esac - ;; - *) - export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 -$as_echo "$ld_shlibs_CXX" >&6; } -test "$ld_shlibs_CXX" = no && can_build_shared=no - -with_gnu_ld_CXX=$with_gnu_ld - - - - - - -# -# Do we need to explicitly link libc? -# -case "x$archive_cmds_need_lc_CXX" in -x|xyes) - # Assume -lc should be added - archive_cmds_need_lc_CXX=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $archive_cmds_CXX in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 -$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } -if ${lt_cv_archive_cmds_need_lc_CXX+:} false; then : - $as_echo_n "(cached) " >&6 -else - $RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$lt_prog_compiler_wl_CXX - pic_flag=$lt_prog_compiler_pic_CXX - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$allow_undefined_flag_CXX - allow_undefined_flag_CXX= - if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 - (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - then - lt_cv_archive_cmds_need_lc_CXX=no - else - lt_cv_archive_cmds_need_lc_CXX=yes - fi - allow_undefined_flag_CXX=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc_CXX" >&5 -$as_echo "$lt_cv_archive_cmds_need_lc_CXX" >&6; } - archive_cmds_need_lc_CXX=$lt_cv_archive_cmds_need_lc_CXX - ;; - esac - fi - ;; -esac - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 -$as_echo_n "checking dynamic linker characteristics... " >&6; } - -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[4-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[01] | aix4.[01].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[45]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' - - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[23].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[01]* | freebsdelf3.[01]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ - freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[3-9]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - if ${lt_cv_shlibpath_overrides_runpath+:} false; then : - $as_echo_n "(cached) " >&6 -else - lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ - LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_cxx_try_link "$LINENO"; then : - if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : - lt_cv_shlibpath_overrides_runpath=yes -fi -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - -fi - - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[89] | openbsd2.[89].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 -$as_echo "$dynamic_linker" >&6; } -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 -$as_echo_n "checking how to hardcode library paths into programs... " >&6; } -hardcode_action_CXX= -if test -n "$hardcode_libdir_flag_spec_CXX" || - test -n "$runpath_var_CXX" || - test "X$hardcode_automatic_CXX" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$hardcode_direct_CXX" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && - test "$hardcode_minus_L_CXX" != no; then - # Linking always hardcodes the temporary library directory. - hardcode_action_CXX=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - hardcode_action_CXX=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - hardcode_action_CXX=unsupported -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 -$as_echo "$hardcode_action_CXX" >&6; } - -if test "$hardcode_action_CXX" = relink || - test "$inherit_rpath_CXX" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi - - - - - - - - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -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_config_commands="$ac_config_commands libtool" - - - - -# Only expand once: - - -# expand $ac_aux_dir to an absolute path -am_aux_dir=`cd $ac_aux_dir && pwd` - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - 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_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # 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_AR="$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 -AR=$ac_cv_prog_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 - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -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_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # 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_AR="$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_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - 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 - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - am_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # 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__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac - - -## ----------------------------------------------- -## API Checks -## ----------------------------------------------- - - - -# Check whether --with-jni-jdk was given. -if test "${with_jni_jdk+set}" = set; then : - withval=$with_jni_jdk; - if test "$withval" = "no" || test "$withval" = "yes"; then - as_fn_error $? "--with-jni-jdk: PATH to JDK not supplied" "$LINENO" 5 - fi - - - __JNI_JDK_HOME="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if '$__JNI_JDK_HOME' is a JDK" >&5 -$as_echo_n "checking if '$__JNI_JDK_HOME' is a JDK... " >&6; } - # OSX had to be a little different. - case "$host_os" in - darwin*) __JNI_INCLUDE="$__JNI_JDK_HOME/Headers";; - *) __JNI_INCLUDE="$__JNI_JDK_HOME/include";; - esac - - if test -r "$__JNI_INCLUDE/jni.h"; then : - - - # Also include the os specific include dirs in the JNI_CFLAGS - __JNI_CFLAGS="-I$__JNI_INCLUDE" - case "$host_os" in - bsdi*) __JNI_INCLUDE_EXTRAS="bsdos";; - linux*) __JNI_INCLUDE_EXTRAS="linux genunix";; - osf*) __JNI_INCLUDE_EXTRAS="alpha";; - solaris*) __JNI_INCLUDE_EXTRAS="solaris";; - mingw*) __JNI_INCLUDE_EXTRAS="win32";; - cygwin*) __JNI_INCLUDE_EXTRAS="win32";; - *) __JNI_INCLUDE_EXTRAS="genunix";; - esac - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $__JNI_CFLAGS" - JNI_VERSION="1_2" - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - #ifndef JNI_VERSION_$JNI_VERSION - # error JNI version $JNI_VERSION is not supported. - #endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - - JNI_JDK=$"$__JNI_JDK_HOME" - JNI_EXTRA_CFLAGS="$__JNI_CFLAGS" - - - case $host_os in - darwin*) - JNI_EXTRA_LDFLAGS="-shrext .jnilib -dynamiclib" ;; - esac - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "JDK not found. Invalid --with-jni-jdk PATH" "$LINENO" 5 - -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 - - CPPFLAGS="$saved_CPPFLAGS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "JDK not found. Invalid --with-jni-jdk PATH" "$LINENO" 5 - -fi - - -else - - - if test -n "$JAVA_HOME" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: JAVA_HOME was set, checking to see if it's a JDK we can use..." >&5 -$as_echo "$as_me: JAVA_HOME was set, checking to see if it's a JDK we can use..." >&6;} - - - __JNI_JDK_HOME="$JAVA_HOME" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if '$__JNI_JDK_HOME' is a JDK" >&5 -$as_echo_n "checking if '$__JNI_JDK_HOME' is a JDK... " >&6; } - # OSX had to be a little different. - case "$host_os" in - darwin*) __JNI_INCLUDE="$__JNI_JDK_HOME/Headers";; - *) __JNI_INCLUDE="$__JNI_JDK_HOME/include";; - esac - - if test -r "$__JNI_INCLUDE/jni.h"; then : - - - # Also include the os specific include dirs in the JNI_CFLAGS - __JNI_CFLAGS="-I$__JNI_INCLUDE" - case "$host_os" in - bsdi*) __JNI_INCLUDE_EXTRAS="bsdos";; - linux*) __JNI_INCLUDE_EXTRAS="linux genunix";; - osf*) __JNI_INCLUDE_EXTRAS="alpha";; - solaris*) __JNI_INCLUDE_EXTRAS="solaris";; - mingw*) __JNI_INCLUDE_EXTRAS="win32";; - cygwin*) __JNI_INCLUDE_EXTRAS="win32";; - *) __JNI_INCLUDE_EXTRAS="genunix";; - esac - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $__JNI_CFLAGS" - JNI_VERSION="1_2" - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - #ifndef JNI_VERSION_$JNI_VERSION - # error JNI version $JNI_VERSION is not supported. - #endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - - JNI_JDK=$"$__JNI_JDK_HOME" - JNI_EXTRA_CFLAGS="$__JNI_CFLAGS" - - - case $host_os in - darwin*) - JNI_EXTRA_LDFLAGS="-shrext .jnilib -dynamiclib" ;; - esac - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -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_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 - - CPPFLAGS="$saved_CPPFLAGS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - fi - - __JNI_GUESS=`which javac` - if test -z "$JNI_JDK" && test -n "$__JNI_GUESS"; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: javac was on your path, checking to see if it's part of a JDK we can use..." >&5 -$as_echo "$as_me: javac was on your path, checking to see if it's part of a JDK we can use..." >&6;} - # transitively resolve the symbolic links to javac - while file -h "$__JNI_GUESS" 2>/dev/null | grep " symbolic link to " >/dev/null; do - __JNI_LINK=$( file -h $__JNI_GUESS | sed 's/.*symbolic link to //' | sed "s/'$//" | sed 's/^`//' ) - __JNI_GUESS=$(cd $(dirname $__JNI_GUESS); cd $(dirname $__JNI_LINK); echo "$(pwd)/$(basename $__JNI_LINK)") - done - # move 2 dirs up to the home dir... - __JNI_GUESS=$(dirname $(dirname $__JNI_GUESS)) - - - __JNI_JDK_HOME="$__JNI_GUESS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if '$__JNI_JDK_HOME' is a JDK" >&5 -$as_echo_n "checking if '$__JNI_JDK_HOME' is a JDK... " >&6; } - # OSX had to be a little different. - case "$host_os" in - darwin*) __JNI_INCLUDE="$__JNI_JDK_HOME/Headers";; - *) __JNI_INCLUDE="$__JNI_JDK_HOME/include";; - esac - - if test -r "$__JNI_INCLUDE/jni.h"; then : - - - # Also include the os specific include dirs in the JNI_CFLAGS - __JNI_CFLAGS="-I$__JNI_INCLUDE" - case "$host_os" in - bsdi*) __JNI_INCLUDE_EXTRAS="bsdos";; - linux*) __JNI_INCLUDE_EXTRAS="linux genunix";; - osf*) __JNI_INCLUDE_EXTRAS="alpha";; - solaris*) __JNI_INCLUDE_EXTRAS="solaris";; - mingw*) __JNI_INCLUDE_EXTRAS="win32";; - cygwin*) __JNI_INCLUDE_EXTRAS="win32";; - *) __JNI_INCLUDE_EXTRAS="genunix";; - esac - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $__JNI_CFLAGS" - JNI_VERSION="1_2" - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - #ifndef JNI_VERSION_$JNI_VERSION - # error JNI version $JNI_VERSION is not supported. - #endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - - JNI_JDK=$"$__JNI_JDK_HOME" - JNI_EXTRA_CFLAGS="$__JNI_CFLAGS" - - - case $host_os in - darwin*) - JNI_EXTRA_LDFLAGS="-shrext .jnilib -dynamiclib" ;; - esac - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -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_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 - - CPPFLAGS="$saved_CPPFLAGS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - - -fi - - -fi - - if test -z "$JNI_JDK"; then : - - case "$host_os" in - darwin*) __JNI_GUESS="/System/Library/Frameworks/JavaVM.framework";; - *) __JNI_GUESS="/usr";; - esac - { $as_echo "$as_me:${as_lineno-$LINENO}: Taking a guess as to where your OS installs the JDK by default..." >&5 -$as_echo "$as_me: Taking a guess as to where your OS installs the JDK by default..." >&6;} - - - __JNI_JDK_HOME="$__JNI_GUESS" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking if '$__JNI_JDK_HOME' is a JDK" >&5 -$as_echo_n "checking if '$__JNI_JDK_HOME' is a JDK... " >&6; } - # OSX had to be a little different. - case "$host_os" in - darwin*) __JNI_INCLUDE="$__JNI_JDK_HOME/Headers";; - *) __JNI_INCLUDE="$__JNI_JDK_HOME/include";; - esac - - if test -r "$__JNI_INCLUDE/jni.h"; then : - - - # Also include the os specific include dirs in the JNI_CFLAGS - __JNI_CFLAGS="-I$__JNI_INCLUDE" - case "$host_os" in - bsdi*) __JNI_INCLUDE_EXTRAS="bsdos";; - linux*) __JNI_INCLUDE_EXTRAS="linux genunix";; - osf*) __JNI_INCLUDE_EXTRAS="alpha";; - solaris*) __JNI_INCLUDE_EXTRAS="solaris";; - mingw*) __JNI_INCLUDE_EXTRAS="win32";; - cygwin*) __JNI_INCLUDE_EXTRAS="win32";; - *) __JNI_INCLUDE_EXTRAS="genunix";; - esac - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $__JNI_CFLAGS" - JNI_VERSION="1_2" - 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 - - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ - - #ifndef JNI_VERSION_$JNI_VERSION - # error JNI version $JNI_VERSION is not supported. - #endif - - ; - return 0; -} - -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - - - JNI_JDK=$"$__JNI_JDK_HOME" - JNI_EXTRA_CFLAGS="$__JNI_CFLAGS" - - - case $host_os in - darwin*) - JNI_EXTRA_LDFLAGS="-shrext .jnilib -dynamiclib" ;; - esac - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "JDK not found. Please use the --with-jni-jdk option" "$LINENO" 5 - -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 - - CPPFLAGS="$saved_CPPFLAGS" - -else - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - as_fn_error $? "JDK not found. Please use the --with-jni-jdk option" "$LINENO" 5 - -fi - - -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 - - - ac_fn_cxx_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" -if test "x$ac_cv_header_pthread_h" = xyes; then : - -$as_echo "#define HAVE_PTHREAD_H 1" >>confdefs.h - -fi - - - - -# Check whether --with-leveldb was given. -if test "${with_leveldb+set}" = set; then : - withval=$with_leveldb; - CFLAGS="$CFLAGS -I${withval}/include" - CXXFLAGS="$CXXFLAGS -I${withval}/include" - - LDFLAGS="$LDFLAGS -lleveldb -L${withval}" - - -fi - - - ac_fn_cxx_check_header_mongrel "$LINENO" "leveldb/db.h" "ac_cv_header_leveldb_db_h" "$ac_includes_default" -if test "x$ac_cv_header_leveldb_db_h" = xyes; then : - -else - as_fn_error $? "cannot find headers for leveldb" "$LINENO" 5 -fi - - - - -# Check whether --with-snappy was given. -if test "${with_snappy+set}" = set; then : - withval=$with_snappy; - LDFLAGS="$LDFLAGS -lsnappy -L${withval}" - - -fi - - - ac_fn_cxx_check_header_mongrel "$LINENO" "sys/errno.h" "ac_cv_header_sys_errno_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_errno_h" = xyes; then : - -$as_echo "#define HAVE_SYS_ERRNO_H 1" >>confdefs.h - -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 - - - - - - case "$host_os" in - darwin*) - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking OS X SDK version" >&5 -$as_echo_n "checking OS X SDK version... " >&6; } - -# Check whether --with-osxsdk was given. -if test "${with_osxsdk+set}" = set; then : - withval=$with_osxsdk; - OSX_UNIVERSAL="$withval" - -else - - OSX_SDKS_DIR="" - OSX_VERSION="" - for v in 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 10.12; do - for location in "/Developer/SDKs" "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" ; do - if test -z "${OSX_VERSION}" && test -d "${location}/MacOSX${v}.sdk" ; then - OSX_SDKS_DIR="${location}" - OSX_VERSION="${v}" - fi - done - done - -fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OSX_VERSION" >&5 -$as_echo "$OSX_VERSION" >&6; } - - - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build universal binaries" >&5 -$as_echo_n "checking whether to build universal binaries... " >&6; } - -# Check whether --with-universal was given. -if test "${with_universal+set}" = set; then : - withval=$with_universal; - if test "$withval" = "no"; then : - - OSX_UNIVERSAL="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -elif test "$withval" = "yes"; then : - - OSX_UNIVERSAL="i386 x86_64" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, archs: $OSX_UNIVERSAL" >&5 -$as_echo "yes, archs: $OSX_UNIVERSAL" >&6; } - -else - - OSX_UNIVERSAL="$withval" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, archs: $OSX_UNIVERSAL" >&5 -$as_echo "yes, archs: $OSX_UNIVERSAL" >&6; } - -fi - -else - - OSX_UNIVERSAL="" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } - -fi - - - if test -n "$OSX_UNIVERSAL"; then : - - for i in $OSX_UNIVERSAL ; do - CFLAGS="-arch $i $CFLAGS" - CXXFLAGS="-arch $i $CXXFLAGS" - LDFLAGS="-arch $i $LDFLAGS" - done - - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - - CFLAGS="-isysroot ${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $CFLAGS" - CXXFLAGS="-isysroot ${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $CXXFLAGS" - LDFLAGS="-syslibroot,${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $LDFLAGS" - - - - -fi - ;; - esac - - -CFLAGS="$CFLAGS $JNI_EXTRA_CFLAGS" - -CXXFLAGS="$CXXFLAGS $JNI_EXTRA_CFLAGS" - -LDFLAGS="$LDFLAGS $JNI_EXTRA_LDFLAGS -release 99-master-SNAPSHOT" - - -## ----------------------------------------------------- -## Generate the files -## ----------------------------------------------------- -am__api_version='1.12' - -{ $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"` - -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 --run true"; then - am_missing_run="$MISSING --run " -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}" != 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; } - -{ $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 - -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='leveldbjni' - VERSION='99-master-SNAPSHOT' - - -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"} - -# We need awk for the "check" target. 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}' - -am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' - - - - - -ac_config_files="$ac_config_files Makefile" - -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}' - -DEFS=-DHAVE_CONFIG_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 - - -: "${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 leveldbjni $as_me 99-master-SNAPSHOT, 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 - -case $ac_config_headers in *" -"*) set x $ac_config_headers; shift; ac_config_headers=$*;; -esac - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_headers="$ac_config_headers" -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 - --header=FILE[:TEMPLATE] - instantiate the configuration header FILE - -Configuration files: -$config_files - -Configuration headers: -$config_headers - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -leveldbjni config.status 99-master-SNAPSHOT -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;; - --header | --heade | --head | --hea ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append CONFIG_HEADERS " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h) - # Conflict between --help and --header - as_fn_error $? "ambiguous option: \`$1' -Try \`$0 --help' for more information.";; - --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 -# - - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' -macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' -enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' -enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' -pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' -enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' -SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' -ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' -PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' -host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' -host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' -host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' -build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' -build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' -build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' -SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' -Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' -GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' -EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' -FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' -LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' -NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' -LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' -max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' -ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' -exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' -lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' -lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' -lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' -lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' -lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' -reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' -reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' -OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' -deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' -file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' -file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' -want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' -DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' -sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' -AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' -AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' -archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' -STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' -RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' -old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' -old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' -lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' -CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' -CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' -compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' -GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' -nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' -lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' -objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' -MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' -need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' -MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' -DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' -NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' -LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' -OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' -OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' -libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' -shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' -extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' -compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' -archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' -module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' -with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' -no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' -hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' -hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' -inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' -link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' -always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' -exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' -include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' -prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' -postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' -file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' -variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' -need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' -need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' -version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' -runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' -shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' -libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' -library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' -soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' -install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' -postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' -postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' -finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' -finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' -hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' -sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' -sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' -hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' -enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' -enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' -old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' -striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs='`$ECHO "$compiler_lib_search_dirs" | $SED "$delay_single_quote_subst"`' -predep_objects='`$ECHO "$predep_objects" | $SED "$delay_single_quote_subst"`' -postdep_objects='`$ECHO "$postdep_objects" | $SED "$delay_single_quote_subst"`' -predeps='`$ECHO "$predeps" | $SED "$delay_single_quote_subst"`' -postdeps='`$ECHO "$postdeps" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path='`$ECHO "$compiler_lib_search_path" | $SED "$delay_single_quote_subst"`' -LD_CXX='`$ECHO "$LD_CXX" | $SED "$delay_single_quote_subst"`' -reload_flag_CXX='`$ECHO "$reload_flag_CXX" | $SED "$delay_single_quote_subst"`' -reload_cmds_CXX='`$ECHO "$reload_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_cmds_CXX='`$ECHO "$old_archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -compiler_CXX='`$ECHO "$compiler_CXX" | $SED "$delay_single_quote_subst"`' -GCC_CXX='`$ECHO "$GCC_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "$lt_prog_compiler_no_builtin_flag_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_pic_CXX='`$ECHO "$lt_prog_compiler_pic_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_wl_CXX='`$ECHO "$lt_prog_compiler_wl_CXX" | $SED "$delay_single_quote_subst"`' -lt_prog_compiler_static_CXX='`$ECHO "$lt_prog_compiler_static_CXX" | $SED "$delay_single_quote_subst"`' -lt_cv_prog_compiler_c_o_CXX='`$ECHO "$lt_cv_prog_compiler_c_o_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_need_lc_CXX='`$ECHO "$archive_cmds_need_lc_CXX" | $SED "$delay_single_quote_subst"`' -enable_shared_with_static_runtimes_CXX='`$ECHO "$enable_shared_with_static_runtimes_CXX" | $SED "$delay_single_quote_subst"`' -export_dynamic_flag_spec_CXX='`$ECHO "$export_dynamic_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -whole_archive_flag_spec_CXX='`$ECHO "$whole_archive_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -compiler_needs_object_CXX='`$ECHO "$compiler_needs_object_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_new_cmds_CXX='`$ECHO "$old_archive_from_new_cmds_CXX" | $SED "$delay_single_quote_subst"`' -old_archive_from_expsyms_cmds_CXX='`$ECHO "$old_archive_from_expsyms_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_cmds_CXX='`$ECHO "$archive_cmds_CXX" | $SED "$delay_single_quote_subst"`' -archive_expsym_cmds_CXX='`$ECHO "$archive_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_cmds_CXX='`$ECHO "$module_cmds_CXX" | $SED "$delay_single_quote_subst"`' -module_expsym_cmds_CXX='`$ECHO "$module_expsym_cmds_CXX" | $SED "$delay_single_quote_subst"`' -with_gnu_ld_CXX='`$ECHO "$with_gnu_ld_CXX" | $SED "$delay_single_quote_subst"`' -allow_undefined_flag_CXX='`$ECHO "$allow_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -no_undefined_flag_CXX='`$ECHO "$no_undefined_flag_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_flag_spec_CXX='`$ECHO "$hardcode_libdir_flag_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_libdir_separator_CXX='`$ECHO "$hardcode_libdir_separator_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_CXX='`$ECHO "$hardcode_direct_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_direct_absolute_CXX='`$ECHO "$hardcode_direct_absolute_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_minus_L_CXX='`$ECHO "$hardcode_minus_L_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_shlibpath_var_CXX='`$ECHO "$hardcode_shlibpath_var_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_automatic_CXX='`$ECHO "$hardcode_automatic_CXX" | $SED "$delay_single_quote_subst"`' -inherit_rpath_CXX='`$ECHO "$inherit_rpath_CXX" | $SED "$delay_single_quote_subst"`' -link_all_deplibs_CXX='`$ECHO "$link_all_deplibs_CXX" | $SED "$delay_single_quote_subst"`' -always_export_symbols_CXX='`$ECHO "$always_export_symbols_CXX" | $SED "$delay_single_quote_subst"`' -export_symbols_cmds_CXX='`$ECHO "$export_symbols_cmds_CXX" | $SED "$delay_single_quote_subst"`' -exclude_expsyms_CXX='`$ECHO "$exclude_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -include_expsyms_CXX='`$ECHO "$include_expsyms_CXX" | $SED "$delay_single_quote_subst"`' -prelink_cmds_CXX='`$ECHO "$prelink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -postlink_cmds_CXX='`$ECHO "$postlink_cmds_CXX" | $SED "$delay_single_quote_subst"`' -file_list_spec_CXX='`$ECHO "$file_list_spec_CXX" | $SED "$delay_single_quote_subst"`' -hardcode_action_CXX='`$ECHO "$hardcode_action_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_dirs_CXX='`$ECHO "$compiler_lib_search_dirs_CXX" | $SED "$delay_single_quote_subst"`' -predep_objects_CXX='`$ECHO "$predep_objects_CXX" | $SED "$delay_single_quote_subst"`' -postdep_objects_CXX='`$ECHO "$postdep_objects_CXX" | $SED "$delay_single_quote_subst"`' -predeps_CXX='`$ECHO "$predeps_CXX" | $SED "$delay_single_quote_subst"`' -postdeps_CXX='`$ECHO "$postdeps_CXX" | $SED "$delay_single_quote_subst"`' -compiler_lib_search_path_CXX='`$ECHO "$compiler_lib_search_path_CXX" | $SED "$delay_single_quote_subst"`' - -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in SHELL \ -ECHO \ -PATH_SEPARATOR \ -SED \ -GREP \ -EGREP \ -FGREP \ -LD \ -NM \ -LN_S \ -lt_SP2NL \ -lt_NL2SP \ -reload_flag \ -OBJDUMP \ -deplibs_check_method \ -file_magic_cmd \ -file_magic_glob \ -want_nocaseglob \ -DLLTOOL \ -sharedlib_from_linklib_cmd \ -AR \ -AR_FLAGS \ -archiver_list_spec \ -STRIP \ -RANLIB \ -CC \ -CFLAGS \ -compiler \ -lt_cv_sys_global_symbol_pipe \ -lt_cv_sys_global_symbol_to_cdecl \ -lt_cv_sys_global_symbol_to_c_name_address \ -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ -nm_file_list_spec \ -lt_prog_compiler_no_builtin_flag \ -lt_prog_compiler_pic \ -lt_prog_compiler_wl \ -lt_prog_compiler_static \ -lt_cv_prog_compiler_c_o \ -need_locks \ -MANIFEST_TOOL \ -DSYMUTIL \ -NMEDIT \ -LIPO \ -OTOOL \ -OTOOL64 \ -shrext_cmds \ -export_dynamic_flag_spec \ -whole_archive_flag_spec \ -compiler_needs_object \ -with_gnu_ld \ -allow_undefined_flag \ -no_undefined_flag \ -hardcode_libdir_flag_spec \ -hardcode_libdir_separator \ -exclude_expsyms \ -include_expsyms \ -file_list_spec \ -variables_saved_for_relink \ -libname_spec \ -library_names_spec \ -soname_spec \ -install_override_mode \ -finish_eval \ -old_striplib \ -striplib \ -compiler_lib_search_dirs \ -predep_objects \ -postdep_objects \ -predeps \ -postdeps \ -compiler_lib_search_path \ -LD_CXX \ -reload_flag_CXX \ -compiler_CXX \ -lt_prog_compiler_no_builtin_flag_CXX \ -lt_prog_compiler_pic_CXX \ -lt_prog_compiler_wl_CXX \ -lt_prog_compiler_static_CXX \ -lt_cv_prog_compiler_c_o_CXX \ -export_dynamic_flag_spec_CXX \ -whole_archive_flag_spec_CXX \ -compiler_needs_object_CXX \ -with_gnu_ld_CXX \ -allow_undefined_flag_CXX \ -no_undefined_flag_CXX \ -hardcode_libdir_flag_spec_CXX \ -hardcode_libdir_separator_CXX \ -exclude_expsyms_CXX \ -include_expsyms_CXX \ -file_list_spec_CXX \ -compiler_lib_search_dirs_CXX \ -predep_objects_CXX \ -postdep_objects_CXX \ -predeps_CXX \ -postdeps_CXX \ -compiler_lib_search_path_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in reload_cmds \ -old_postinstall_cmds \ -old_postuninstall_cmds \ -old_archive_cmds \ -extract_expsyms_cmds \ -old_archive_from_new_cmds \ -old_archive_from_expsyms_cmds \ -archive_cmds \ -archive_expsym_cmds \ -module_cmds \ -module_expsym_cmds \ -export_symbols_cmds \ -prelink_cmds \ -postlink_cmds \ -postinstall_cmds \ -postuninstall_cmds \ -finish_cmds \ -sys_lib_search_path_spec \ -sys_lib_dlsearch_path_spec \ -reload_cmds_CXX \ -old_archive_cmds_CXX \ -old_archive_from_new_cmds_CXX \ -old_archive_from_expsyms_cmds_CXX \ -archive_cmds_CXX \ -archive_expsym_cmds_CXX \ -module_cmds_CXX \ -module_expsym_cmds_CXX \ -export_symbols_cmds_CXX \ -prelink_cmds_CXX \ -postlink_cmds_CXX; do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[\\\\\\\`\\"\\\$]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -ac_aux_dir='$ac_aux_dir' -xsi_shell='$xsi_shell' -lt_shell_append='$lt_shell_append' - -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - - - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile' - - - - - - -_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 - "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; - "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) 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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - 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" - -# Set up the scripts for CONFIG_HEADERS section. -# No need to generate them if there are no CONFIG_HEADERS. -# This happens for instance with `./config.status Makefile'. -if test -n "$CONFIG_HEADERS"; then -cat >"$ac_tmp/defines.awk" <<\_ACAWK || -BEGIN { -_ACEOF - -# Transform confdefs.h into an awk script `defines.awk', embedded as -# here-document in config.status, that substitutes the proper values into -# config.h.in to produce config.h. - -# Create a delimiter string that does not exist in confdefs.h, to ease -# handling of long lines. -ac_delim='%!_!# ' -for ac_last_try in false false :; do - ac_tt=`sed -n "/$ac_delim/p" confdefs.h` - if test -z "$ac_tt"; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done - -# For the awk script, D is an array of macro values keyed by name, -# likewise P contains macro parameters if any. Preserve backslash -# newline sequences. - -ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* -sed -n ' -s/.\{148\}/&'"$ac_delim"'/g -t rset -:rset -s/^[ ]*#[ ]*define[ ][ ]*/ / -t def -d -:def -s/\\$// -t bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3"/p -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p -d -:bsnl -s/["\\]/\\&/g -s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ -D["\1"]=" \3\\\\\\n"\\/p -t cont -s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p -t cont -d -:cont -n -s/.\{148\}/&'"$ac_delim"'/g -t clear -:clear -s/\\$// -t bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/"/p -d -:bsnlc -s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p -b cont -' >$CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - for (key in D) D_is_set[key] = 1 - FS = "" -} -/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { - line = \$ 0 - split(line, arg, " ") - if (arg[1] == "#") { - defundef = arg[2] - mac1 = arg[3] - } else { - defundef = substr(arg[1], 2) - mac1 = arg[2] - } - split(mac1, mac2, "(") #) - macro = mac2[1] - prefix = substr(line, 1, index(line, defundef) - 1) - if (D_is_set[macro]) { - # Preserve the white space surrounding the "#". - print prefix "define", macro P[macro] D[macro] - next - } else { - # Replace #undef with comments. This is necessary, for example, - # in the case of _POSIX_SOURCE, which is predefined and required - # on some systems where configure will not decide to define it. - if (defundef == "undef") { - print "/*", prefix defundef, macro, "*/" - next - } - } -} -{ print } -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 -fi # test -n "$CONFIG_HEADERS" - - -eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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 - ;; - :H) - # - # CONFIG_HEADER - # - if test x"$ac_file" != x-; then - { - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" - } >"$ac_tmp/config.h" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} - else - rm -f "$ac_file" - mv "$ac_tmp/config.h" "$ac_file" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - fi - else - $as_echo "/* $configure_input */" \ - && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error $? "could not create -" "$LINENO" 5 - fi -# Compute "$ac_file"'s index in $config_headers. -_am_arg="$ac_file" -_am_stamp_count=1 -for _am_header in $config_headers :; do - case $_am_header in - $_am_arg | $_am_arg:* ) - break ;; - * ) - _am_stamp_count=`expr $_am_stamp_count + 1` ;; - esac -done -echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || -$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$_am_arg" : 'X\(//\)[^/]' \| \ - X"$_am_arg" : 'X\(//\)$' \| \ - X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$_am_arg" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'`/stamp-h$_am_stamp_count - ;; - - :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 - "libtool":C) - - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -# The names of the tagged configurations supported by this script. -available_tags="CXX " - -# ### BEGIN LIBTOOL CONFIG - -# Which release of libtool.m4 was used? -macro_version=$macro_version -macro_revision=$macro_revision - -# Whether or not to build static libraries. -build_old_libs=$enable_static - -# Whether or not to build shared libraries. -build_libtool_libs=$enable_shared - -# What type of objects to build. -pic_mode=$pic_mode - -# Whether or not to optimize for fast installation. -fast_install=$enable_fast_install - -# Shell to use when invoking shell scripts. -SHELL=$lt_SHELL - -# An echo program that protects backslashes. -ECHO=$lt_ECHO - -# The PATH separator for the build system. -PATH_SEPARATOR=$lt_PATH_SEPARATOR - -# The host system. -host_alias=$host_alias -host=$host -host_os=$host_os - -# The build system. -build_alias=$build_alias -build=$build -build_os=$build_os - -# A sed program that does not truncate output. -SED=$lt_SED - -# Sed that helps us avoid accidentally triggering echo(1) options like -n. -Xsed="\$SED -e 1s/^X//" - -# A grep program that handles long lines. -GREP=$lt_GREP - -# An ERE matcher. -EGREP=$lt_EGREP - -# A literal string matcher. -FGREP=$lt_FGREP - -# A BSD- or MS-compatible name lister. -NM=$lt_NM - -# Whether we need soft or hard links. -LN_S=$lt_LN_S - -# What is the maximum length of a command? -max_cmd_len=$max_cmd_len - -# Object file suffix (normally "o"). -objext=$ac_objext - -# Executable file suffix (normally ""). -exeext=$exeext - -# whether the shell understands "unset". -lt_unset=$lt_unset - -# turn spaces into newlines. -SP2NL=$lt_lt_SP2NL - -# turn newlines into spaces. -NL2SP=$lt_lt_NL2SP - -# convert \$build file names to \$host format. -to_host_file_cmd=$lt_cv_to_host_file_cmd - -# convert \$build files to toolchain format. -to_tool_file_cmd=$lt_cv_to_tool_file_cmd - -# An object symbol dumper. -OBJDUMP=$lt_OBJDUMP - -# Method to check whether dependent libraries are shared objects. -deplibs_check_method=$lt_deplibs_check_method - -# Command to use when deplibs_check_method = "file_magic". -file_magic_cmd=$lt_file_magic_cmd - -# How to find potential files when deplibs_check_method = "file_magic". -file_magic_glob=$lt_file_magic_glob - -# Find potential files using nocaseglob when deplibs_check_method = "file_magic". -want_nocaseglob=$lt_want_nocaseglob - -# DLL creation program. -DLLTOOL=$lt_DLLTOOL - -# Command to associate shared and link libraries. -sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd - -# The archiver. -AR=$lt_AR - -# Flags to create an archive. -AR_FLAGS=$lt_AR_FLAGS - -# How to feed a file listing to the archiver. -archiver_list_spec=$lt_archiver_list_spec - -# A symbol stripping program. -STRIP=$lt_STRIP - -# Commands used to install an old-style archive. -RANLIB=$lt_RANLIB -old_postinstall_cmds=$lt_old_postinstall_cmds -old_postuninstall_cmds=$lt_old_postuninstall_cmds - -# Whether to use a lock for old archive extraction. -lock_old_archive_extraction=$lock_old_archive_extraction - -# A C compiler. -LTCC=$lt_CC - -# LTCC compiler flags. -LTCFLAGS=$lt_CFLAGS - -# Take the output of nm and produce a listing of raw symbols and C names. -global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe - -# Transform the output of nm in a proper C declaration. -global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl - -# Transform the output of nm in a C name address pair. -global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address - -# Transform the output of nm in a C name address pair when lib prefix is needed. -global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix - -# Specify filename containing input files for \$NM. -nm_file_list_spec=$lt_nm_file_list_spec - -# The root where to search for dependent libraries,and in which our libraries should be installed. -lt_sysroot=$lt_sysroot - -# The name of the directory that contains temporary libtool files. -objdir=$objdir - -# Used to examine libraries when file_magic_cmd begins with "file". -MAGIC_CMD=$MAGIC_CMD - -# Must we lock files when doing compilation? -need_locks=$lt_need_locks - -# Manifest tool. -MANIFEST_TOOL=$lt_MANIFEST_TOOL - -# Tool to manipulate archived DWARF debug symbol files on Mac OS X. -DSYMUTIL=$lt_DSYMUTIL - -# Tool to change global to local symbols on Mac OS X. -NMEDIT=$lt_NMEDIT - -# Tool to manipulate fat objects and archives on Mac OS X. -LIPO=$lt_LIPO - -# ldd/readelf like tool for Mach-O binaries on Mac OS X. -OTOOL=$lt_OTOOL - -# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. -OTOOL64=$lt_OTOOL64 - -# Old archive suffix (normally "a"). -libext=$libext - -# Shared library suffix (normally ".so"). -shrext_cmds=$lt_shrext_cmds - -# The commands to extract the exported symbol list from a shared archive. -extract_expsyms_cmds=$lt_extract_expsyms_cmds - -# Variables whose values should be saved in libtool wrapper scripts and -# restored at link time. -variables_saved_for_relink=$lt_variables_saved_for_relink - -# Do we need the "lib" prefix for modules? -need_lib_prefix=$need_lib_prefix - -# Do we need a version for libraries? -need_version=$need_version - -# Library versioning type. -version_type=$version_type - -# Shared library runtime path variable. -runpath_var=$runpath_var - -# Shared library path variable. -shlibpath_var=$shlibpath_var - -# Is shlibpath searched before the hard-coded library search path? -shlibpath_overrides_runpath=$shlibpath_overrides_runpath - -# Format of library name prefix. -libname_spec=$lt_libname_spec - -# List of archive names. First name is the real one, the rest are links. -# The last name is the one that the linker finds with -lNAME -library_names_spec=$lt_library_names_spec - -# The coded name of the library, if different from the real name. -soname_spec=$lt_soname_spec - -# Permission mode override for installation of shared libraries. -install_override_mode=$lt_install_override_mode - -# Command to use after installation of a shared archive. -postinstall_cmds=$lt_postinstall_cmds - -# Command to use after uninstallation of a shared archive. -postuninstall_cmds=$lt_postuninstall_cmds - -# Commands used to finish a libtool library installation in a directory. -finish_cmds=$lt_finish_cmds - -# As "finish_cmds", except a single script fragment to be evaled but -# not shown. -finish_eval=$lt_finish_eval - -# Whether we should hardcode library paths into libraries. -hardcode_into_libs=$hardcode_into_libs - -# Compile-time system search path for libraries. -sys_lib_search_path_spec=$lt_sys_lib_search_path_spec - -# Run-time system search path for libraries. -sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec - -# Whether dlopen is supported. -dlopen_support=$enable_dlopen - -# Whether dlopen of programs is supported. -dlopen_self=$enable_dlopen_self - -# Whether dlopen of statically linked programs is supported. -dlopen_self_static=$enable_dlopen_self_static - -# Commands to strip libraries. -old_striplib=$lt_old_striplib -striplib=$lt_striplib - - -# The linker used to build libraries. -LD=$lt_LD - -# How to create reloadable object files. -reload_flag=$lt_reload_flag -reload_cmds=$lt_reload_cmds - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds - -# A language specific compiler. -CC=$lt_compiler - -# Is the compiler the GNU compiler? -with_gcc=$GCC - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds -archive_expsym_cmds=$lt_archive_expsym_cmds - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds -module_expsym_cmds=$lt_module_expsym_cmds - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects -postdep_objects=$lt_postdep_objects -predeps=$lt_predeps -postdeps=$lt_postdeps - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path - -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - -ltmain="$ac_aux_dir/ltmain.sh" - - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - if test x"$xsi_shell" = xyes; then - sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ -func_dirname ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -} # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_basename ()$/,/^} # func_basename /c\ -func_basename ()\ -{\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ -func_dirname_and_basename ()\ -{\ -\ case ${1} in\ -\ */*) func_dirname_result="${1%/*}${2}" ;;\ -\ * ) func_dirname_result="${3}" ;;\ -\ esac\ -\ func_basename_result="${1##*/}"\ -} # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ -func_stripname ()\ -{\ -\ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are\ -\ # positional parameters, so assign one to ordinary parameter first.\ -\ func_stripname_result=${3}\ -\ func_stripname_result=${func_stripname_result#"${1}"}\ -\ func_stripname_result=${func_stripname_result%"${2}"}\ -} # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ -func_split_long_opt ()\ -{\ -\ func_split_long_opt_name=${1%%=*}\ -\ func_split_long_opt_arg=${1#*=}\ -} # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ -func_split_short_opt ()\ -{\ -\ func_split_short_opt_arg=${1#??}\ -\ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ -} # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ -func_lo2o ()\ -{\ -\ case ${1} in\ -\ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ -\ *) func_lo2o_result=${1} ;;\ -\ esac\ -} # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_xform ()$/,/^} # func_xform /c\ -func_xform ()\ -{\ - func_xform_result=${1%.*}.lo\ -} # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_arith ()$/,/^} # func_arith /c\ -func_arith ()\ -{\ - func_arith_result=$(( $* ))\ -} # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_len ()$/,/^} # func_len /c\ -func_len ()\ -{\ - func_len_result=${#1}\ -} # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - -fi - -if test x"$lt_shell_append" = xyes; then - sed -e '/^func_append ()$/,/^} # func_append /c\ -func_append ()\ -{\ - eval "${1}+=\\${2}"\ -} # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ -func_append_quoted ()\ -{\ -\ func_quote_for_eval "${2}"\ -\ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ -} # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: - - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 -$as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} -fi - - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" - - - cat <<_LT_EOF >> "$ofile" - -# ### BEGIN LIBTOOL TAG CONFIG: CXX - -# The linker used to build libraries. -LD=$lt_LD_CXX - -# How to create reloadable object files. -reload_flag=$lt_reload_flag_CXX -reload_cmds=$lt_reload_cmds_CXX - -# Commands used to build an old-style archive. -old_archive_cmds=$lt_old_archive_cmds_CXX - -# A language specific compiler. -CC=$lt_compiler_CXX - -# Is the compiler the GNU compiler? -with_gcc=$GCC_CXX - -# Compiler flag to turn off builtin functions. -no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX - -# Additional compiler flags for building library objects. -pic_flag=$lt_lt_prog_compiler_pic_CXX - -# How to pass a linker flag through the compiler. -wl=$lt_lt_prog_compiler_wl_CXX - -# Compiler flag to prevent dynamic linking. -link_static_flag=$lt_lt_prog_compiler_static_CXX - -# Does compiler simultaneously support -c and -o options? -compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX - -# Whether or not to add -lc for building shared libraries. -build_libtool_need_lc=$archive_cmds_need_lc_CXX - -# Whether or not to disallow shared libs when runtime libs are static. -allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX - -# Compiler flag to allow reflexive dlopens. -export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX - -# Compiler flag to generate shared objects directly from archives. -whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX - -# Whether the compiler copes with passing no objects directly. -compiler_needs_object=$lt_compiler_needs_object_CXX - -# Create an old-style archive from a shared archive. -old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX - -# Create a temporary old-style archive to link instead of a shared archive. -old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX - -# Commands used to build a shared archive. -archive_cmds=$lt_archive_cmds_CXX -archive_expsym_cmds=$lt_archive_expsym_cmds_CXX - -# Commands used to build a loadable module if different from building -# a shared archive. -module_cmds=$lt_module_cmds_CXX -module_expsym_cmds=$lt_module_expsym_cmds_CXX - -# Whether we are building with GNU ld or not. -with_gnu_ld=$lt_with_gnu_ld_CXX - -# Flag that allows shared libraries with undefined symbols to be built. -allow_undefined_flag=$lt_allow_undefined_flag_CXX - -# Flag that enforces no undefined symbols. -no_undefined_flag=$lt_no_undefined_flag_CXX - -# Flag to hardcode \$libdir into a binary during linking. -# This must work even if \$libdir does not exist -hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX - -# Whether we need a single "-rpath" flag with a separated argument. -hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary. -hardcode_direct=$hardcode_direct_CXX - -# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes -# DIR into the resulting binary and the resulting library dependency is -# "absolute",i.e impossible to change by setting \${shlibpath_var} if the -# library is relocated. -hardcode_direct_absolute=$hardcode_direct_absolute_CXX - -# Set to "yes" if using the -LDIR flag during linking hardcodes DIR -# into the resulting binary. -hardcode_minus_L=$hardcode_minus_L_CXX - -# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR -# into the resulting binary. -hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX - -# Set to "yes" if building a shared library automatically hardcodes DIR -# into the library and all subsequent libraries and executables linked -# against it. -hardcode_automatic=$hardcode_automatic_CXX - -# Set to yes if linker adds runtime paths of dependent libraries -# to runtime path list. -inherit_rpath=$inherit_rpath_CXX - -# Whether libtool must link a program against all its dependency libraries. -link_all_deplibs=$link_all_deplibs_CXX - -# Set to "yes" if exported symbols are required. -always_export_symbols=$always_export_symbols_CXX - -# The commands to list exported symbols. -export_symbols_cmds=$lt_export_symbols_cmds_CXX - -# Symbols that should not be listed in the preloaded symbols. -exclude_expsyms=$lt_exclude_expsyms_CXX - -# Symbols that must always be exported. -include_expsyms=$lt_include_expsyms_CXX - -# Commands necessary for linking programs (against libraries) with templates. -prelink_cmds=$lt_prelink_cmds_CXX - -# Commands necessary for finishing linking programs. -postlink_cmds=$lt_postlink_cmds_CXX - -# Specify filename containing input files. -file_list_spec=$lt_file_list_spec_CXX - -# How to hardcode a shared library path into an executable. -hardcode_action=$hardcode_action_CXX - -# The directories searched by this compiler when creating a shared library. -compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX - -# Dependencies to place before and after the objects being linked to -# create a shared library. -predep_objects=$lt_predep_objects_CXX -postdep_objects=$lt_postdep_objects_CXX -predeps=$lt_predeps_CXX -postdeps=$lt_postdeps_CXX - -# The library search path used internally by the compiler when linking -# a shared library. -compiler_lib_search_path=$lt_compiler_lib_search_path_CXX - -# ### END LIBTOOL TAG CONFIG: CXX -_LT_EOF - - ;; - - 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 - - -echo " - ($PACKAGE_NAME) version $PACKAGE_VERSION - Prefix.........: $prefix - C Compiler.....: $CC $CFLAGS - Linker.........: $LD $LDFLAGS $LIBS -" diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/license.txt b/java/leveldbjni/leveldbjni/src/main/native-package/license.txt deleted file mode 100644 index 8edd375909..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/license.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 FuseSource Corp. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of FuseSource Corp. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/custom.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/custom.m4 deleted file mode 100644 index f29e5805cb..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/custom.m4 +++ /dev/null @@ -1,63 +0,0 @@ -dnl --------------------------------------------------------------------------- -dnl Copyright (C) 2011, FuseSource Corp. All rights reserved. -dnl -dnl http://fusesource.com -dnl -dnl Redistribution and use in source and binary forms, with or without -dnl modification, are permitted provided that the following conditions are -dnl met: -dnl -dnl * Redistributions of source code must retain the above copyright -dnl notice, this list of conditions and the following disclaimer. -dnl * Redistributions in binary form must reproduce the above -dnl copyright notice, this list of conditions and the following disclaimer -dnl in the documentation and/or other materials provided with the -dnl distribution. -dnl * Neither the name of FuseSource Corp. nor the names of its -dnl contributors may be used to endorse or promote products derived from -dnl this software without specific prior written permission. -dnl -dnl THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -dnl "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -dnl LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -dnl A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -dnl OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -dnl SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -dnl LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -dnl DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -dnl THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -dnl (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -dnl OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -dnl --------------------------------------------------------------------------- - -AC_DEFUN([CUSTOM_M4_SETUP], -[ - AC_LANG_PUSH(C++) - - AC_CHECK_HEADER([pthread.h],[AC_DEFINE([HAVE_PTHREAD_H], [1], [Define to 1 if you have the header file.])]) - - AC_ARG_WITH([leveldb], - [AS_HELP_STRING([--with-leveldb@<:@=PATH@:>@], - [Directory where leveldb was built. Example: --with-leveldb=/opt/leveldb])], - [ - CFLAGS="$CFLAGS -I${withval}/include" - CXXFLAGS="$CXXFLAGS -I${withval}/include" - AC_SUBST(CXXFLAGS) - LDFLAGS="$LDFLAGS -lleveldb -L${withval}" - AC_SUBST(LDFLAGS) - ]) - - AC_CHECK_HEADER([leveldb/db.h],,AC_MSG_ERROR([cannot find headers for leveldb])) - - AC_ARG_WITH([snappy], - [AS_HELP_STRING([--with-snappy@<:@=PATH@:>@], - [Directory where snappy was built. Example: --with-snappy=/opt/snappy])], - [ - LDFLAGS="$LDFLAGS -lsnappy -L${withval}" - AC_SUBST(LDFLAGS) - ]) - - AC_CHECK_HEADER([sys/errno.h],[AC_DEFINE([HAVE_SYS_ERRNO_H], [1], [Define to 1 if you have the header file.])]) - - AC_LANG_POP() -]) \ No newline at end of file diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/jni.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/jni.m4 deleted file mode 100644 index 511f297c3e..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/jni.m4 +++ /dev/null @@ -1,156 +0,0 @@ -dnl --------------------------------------------------------------------------- -dnl Copyright (C) 2009-2011 FuseSource Corp. -dnl http://fusesource.com -dnl -dnl Licensed under the Apache License, Version 2.0 (the "License"); -dnl you may not use this file except in compliance with the License. -dnl You may obtain a copy of the License at -dnl -dnl http://www.apache.org/licenses/LICENSE-2.0 -dnl -dnl Unless required by applicable law or agreed to in writing, software -dnl distributed under the License is distributed on an "AS IS" BASIS, -dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -dnl See the License for the specific language governing permissions and -dnl limitations under the License. -dnl --------------------------------------------------------------------------- -dnl --------------------------------------------------------------------------- -dnl SYNOPSIS: -dnl -dnl WITH_JNI_JDK() -dnl -dnl Adds the --with-jni-jdk=PATH option. If not provided, it searches -dnl for the JDK in the default OS locations. -dnl -dnl This macro calls: -dnl AC_SUBST(JNI_JDK) -dnl AC_SUBST(JNI_EXTRA_CFLAGS) -dnl AC_SUBST(JNI_EXTRA_LDFLAGS) -dnl -dnl AUTHOR: Hiram Chrino -dnl --------------------------------------------------------------------------- - -AC_DEFUN([WITH_JNI_JDK], -[ - AC_PREREQ([2.61]) - AC_ARG_WITH(jni-jdk, - [AS_HELP_STRING([--with-jni-jdk=PATH], - [Location of the Java Development Kit. Defaults to your JAVA_HOME setting and falls back to where it is typically installed on your OS])], - [ - if test "$withval" = "no" || test "$withval" = "yes"; then - AC_MSG_ERROR([--with-jni-jdk: PATH to JDK not supplied]) - fi - CHECK_JNI_JDK([$withval], [], [AC_MSG_ERROR([JDK not found. Invalid --with-jni-jdk PATH])]) - ],[ - - if test -n "$JAVA_HOME" ; then - AC_MSG_NOTICE([JAVA_HOME was set, checking to see if it's a JDK we can use...]) - CHECK_JNI_JDK([$JAVA_HOME], [], []) - fi - - __JNI_GUESS=`which javac` - AS_IF(test -z "$JNI_JDK" && test -n "$__JNI_GUESS", [ - AC_MSG_NOTICE([javac was on your path, checking to see if it's part of a JDK we can use...]) - # transitively resolve the symbolic links to javac - while file -h "$__JNI_GUESS" 2>/dev/null | grep " symbolic link to " >/dev/null; do - __JNI_LINK=$( file -h $__JNI_GUESS | sed 's/.*symbolic link to //' | sed "s/'$//" | sed 's/^`//' ) - __JNI_GUESS=$(cd $(dirname $__JNI_GUESS); cd $(dirname $__JNI_LINK); echo "$(pwd)/$(basename $__JNI_LINK)") - done - # move 2 dirs up to the home dir... - __JNI_GUESS=$(dirname $(dirname $__JNI_GUESS)) - CHECK_JNI_JDK([$__JNI_GUESS], [], [],[]) - ],[]) - - AS_IF(test -z "$JNI_JDK", [ - case "$host_os" in - darwin*) __JNI_GUESS="/System/Library/Frameworks/JavaVM.framework";; - *) __JNI_GUESS="/usr";; - esac - AC_MSG_NOTICE([Taking a guess as to where your OS installs the JDK by default...]) - CHECK_JNI_JDK([$__JNI_GUESS], [], [AC_MSG_ERROR([JDK not found. Please use the --with-jni-jdk option])]) - ],[]) - ]) -]) - -dnl --------------------------------------------------------------------------- -dnl -dnl JNI_CHECK_JDK_HOME(PATH, [ACTION-SUCCESS], [ACTION-FAILURE]) -dnl -dnl Tests to see if the given path is a valid JDK home location with -dnl with a JNI headers and library that can be compiled against. -dnl -dnl This macro calls: -dnl -dnl AC_SUBST(JNI_JDK) -dnl AC_SUBST(JNI_EXTRA_CFLAGS) -dnl AC_SUBST(JNI_EXTRA_LDFLAGS) -dnl -dnl AUTHOR: Hiram Chrino -dnl --------------------------------------------------------------------------- -AC_DEFUN([CHECK_JNI_JDK],[ - AC_PREREQ([2.61]) - __JNI_JDK_HOME="$1" - AC_MSG_CHECKING(if '$__JNI_JDK_HOME' is a JDK) - # OSX had to be a little different. - case "$host_os" in - darwin*) __JNI_INCLUDE="$__JNI_JDK_HOME/Headers";; - *) __JNI_INCLUDE="$__JNI_JDK_HOME/include";; - esac - - AS_IF(test -r "$__JNI_INCLUDE/jni.h",[ - - # Also include the os specific include dirs in the JNI_CFLAGS - __JNI_CFLAGS="-I$__JNI_INCLUDE" - case "$host_os" in - bsdi*) __JNI_INCLUDE_EXTRAS="bsdos";; - linux*) __JNI_INCLUDE_EXTRAS="linux genunix";; - osf*) __JNI_INCLUDE_EXTRAS="alpha";; - solaris*) __JNI_INCLUDE_EXTRAS="solaris";; - mingw*) __JNI_INCLUDE_EXTRAS="win32";; - cygwin*) __JNI_INCLUDE_EXTRAS="win32";; - *) __JNI_INCLUDE_EXTRAS="genunix";; - esac - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - saved_CPPFLAGS="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $__JNI_CFLAGS" - JNI_VERSION="1_2" - AC_LANG_PUSH(C) - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[@%:@include ]],[[ - #ifndef JNI_VERSION_$JNI_VERSION - # error JNI version $JNI_VERSION is not supported. - #endif - ]]) - ],[ - - JNI_JDK=$"$__JNI_JDK_HOME" - JNI_EXTRA_CFLAGS="$__JNI_CFLAGS" - AC_SUBST(JNI_JDK) - AC_SUBST(JNI_EXTRA_CFLAGS) - case $host_os in - darwin*) - JNI_EXTRA_LDFLAGS="-shrext .jnilib -dynamiclib" ;; - esac - AC_SUBST(JNI_EXTRA_LDFLAGS) - - - AC_MSG_RESULT([yes]) - $2 - ],[ - AC_MSG_RESULT([no]) - $3 - ]) - AC_LANG_POP() - CPPFLAGS="$saved_CPPFLAGS" - ],[ - AC_MSG_RESULT([no]) - $3 - ]) -]) - diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/libtool.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/libtool.m4 deleted file mode 100644 index 44e0ecff11..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/libtool.m4 +++ /dev/null @@ -1,7982 +0,0 @@ -# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- -# -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -m4_define([_LT_COPYING], [dnl -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, -# 2006, 2007, 2008, 2009, 2010, 2011 Free Software -# Foundation, Inc. -# Written by Gordon Matzigkeit, 1996 -# -# This file is part of GNU Libtool. -# -# GNU Libtool 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 of -# the License, or (at your option) any later version. -# -# As a special exception to the GNU General Public License, -# if you distribute this file as part of a program or library that -# is built using GNU Libtool, you may include this file under the -# same distribution terms that you use for the rest of that program. -# -# GNU Libtool 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 GNU Libtool; see the file COPYING. If not, a copy -# can be downloaded from http://www.gnu.org/licenses/gpl.html, or -# obtained by writing to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -]) - -# serial 57 LT_INIT - - -# LT_PREREQ(VERSION) -# ------------------ -# Complain and exit if this libtool version is less that VERSION. -m4_defun([LT_PREREQ], -[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, - [m4_default([$3], - [m4_fatal([Libtool version $1 or higher is required], - 63)])], - [$2])]) - - -# _LT_CHECK_BUILDDIR -# ------------------ -# Complain if the absolute build directory name contains unusual characters -m4_defun([_LT_CHECK_BUILDDIR], -[case `pwd` in - *\ * | *\ *) - AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; -esac -]) - - -# LT_INIT([OPTIONS]) -# ------------------ -AC_DEFUN([LT_INIT], -[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT -AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [LT_LANG])dnl -AC_BEFORE([$0], [LT_OUTPUT])dnl -AC_BEFORE([$0], [LTDL_INIT])dnl -m4_require([_LT_CHECK_BUILDDIR])dnl - -dnl Autoconf doesn't catch unexpanded LT_ macros by default: -m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl -m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl -dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 -dnl unless we require an AC_DEFUNed macro: -AC_REQUIRE([LTOPTIONS_VERSION])dnl -AC_REQUIRE([LTSUGAR_VERSION])dnl -AC_REQUIRE([LTVERSION_VERSION])dnl -AC_REQUIRE([LTOBSOLETE_VERSION])dnl -m4_require([_LT_PROG_LTMAIN])dnl - -_LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) - -dnl Parse OPTIONS -_LT_SET_OPTIONS([$0], [$1]) - -# This can be used to rebuild libtool when needed -LIBTOOL_DEPS="$ltmain" - -# Always use our own libtool. -LIBTOOL='$(SHELL) $(top_builddir)/libtool' -AC_SUBST(LIBTOOL)dnl - -_LT_SETUP - -# Only expand once: -m4_define([LT_INIT]) -])# LT_INIT - -# Old names: -AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) -AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PROG_LIBTOOL], []) -dnl AC_DEFUN([AM_PROG_LIBTOOL], []) - - -# _LT_CC_BASENAME(CC) -# ------------------- -# Calculate cc_basename. Skip known compiler wrappers and cross-prefix. -m4_defun([_LT_CC_BASENAME], -[for cc_temp in $1""; do - case $cc_temp in - compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; - distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; - \-*) ;; - *) break;; - esac -done -cc_basename=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` -]) - - -# _LT_FILEUTILS_DEFAULTS -# ---------------------- -# It is okay to use these file commands and assume they have been set -# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'. -m4_defun([_LT_FILEUTILS_DEFAULTS], -[: ${CP="cp -f"} -: ${MV="mv -f"} -: ${RM="rm -f"} -])# _LT_FILEUTILS_DEFAULTS - - -# _LT_SETUP -# --------- -m4_defun([_LT_SETUP], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl - -_LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl -dnl -_LT_DECL([], [host_alias], [0], [The host system])dnl -_LT_DECL([], [host], [0])dnl -_LT_DECL([], [host_os], [0])dnl -dnl -_LT_DECL([], [build_alias], [0], [The build system])dnl -_LT_DECL([], [build], [0])dnl -_LT_DECL([], [build_os], [0])dnl -dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -dnl -AC_REQUIRE([AC_PROG_LN_S])dnl -test -z "$LN_S" && LN_S="ln -s" -_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl -dnl -AC_REQUIRE([LT_CMD_MAX_LEN])dnl -_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl -_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl -dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl -m4_require([_LT_CMD_RELOAD])dnl -m4_require([_LT_CHECK_MAGIC_METHOD])dnl -m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl -m4_require([_LT_CMD_OLD_ARCHIVE])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_WITH_SYSROOT])dnl - -_LT_CONFIG_LIBTOOL_INIT([ -# See if we are running on zsh, and set the options which allow our -# commands through without removal of \ escapes INIT. -if test -n "\${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi -]) -if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST -fi - -_LT_CHECK_OBJDIR - -m4_require([_LT_TAG_COMPILER])dnl - -case $host_os in -aix3*) - # AIX sometimes has problems with the GCC collect2 program. For some - # reason, if we set the COLLECT_NAMES environment variable, the problems - # vanish in a puff of smoke. - if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES - fi - ;; -esac - -# Global variables: -ofile=libtool -can_build_shared=yes - -# All known linkers require a `.a' archive for static linking (except MSVC, -# which needs '.lib'). -libext=a - -with_gnu_ld="$lt_cv_prog_gnu_ld" - -old_CC="$CC" -old_CFLAGS="$CFLAGS" - -# Set sane defaults for various variables -test -z "$CC" && CC=cc -test -z "$LTCC" && LTCC=$CC -test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS -test -z "$LD" && LD=ld -test -z "$ac_objext" && ac_objext=o - -_LT_CC_BASENAME([$compiler]) - -# Only perform the check for file, if the check method requires it -test -z "$MAGIC_CMD" && MAGIC_CMD=file -case $deplibs_check_method in -file_magic*) - if test "$file_magic_cmd" = '$MAGIC_CMD'; then - _LT_PATH_MAGIC - fi - ;; -esac - -# Use C for the default configuration in the libtool script -LT_SUPPORTED_TAG([CC]) -_LT_LANG_C_CONFIG -_LT_LANG_DEFAULT_CONFIG -_LT_CONFIG_COMMANDS -])# _LT_SETUP - - -# _LT_PREPARE_SED_QUOTE_VARS -# -------------------------- -# Define a few sed substitution that help us do robust quoting. -m4_defun([_LT_PREPARE_SED_QUOTE_VARS], -[# Backslashify metacharacters that are still active within -# double-quoted strings. -sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' - -# Same as above, but do not quote variable references. -double_quote_subst='s/\([["`\\]]\)/\\\1/g' - -# Sed substitution to delay expansion of an escaped shell variable in a -# double_quote_subst'ed string. -delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' - -# Sed substitution to delay expansion of an escaped single quote. -delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' - -# Sed substitution to avoid accidental globbing in evaled expressions -no_glob_subst='s/\*/\\\*/g' -]) - -# _LT_PROG_LTMAIN -# --------------- -# Note that this code is called both from `configure', and `config.status' -# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, -# `config.status' has no value for ac_aux_dir unless we are using Automake, -# so we pass a copy along to make sure it has a sensible value anyway. -m4_defun([_LT_PROG_LTMAIN], -[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl -_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) -ltmain="$ac_aux_dir/ltmain.sh" -])# _LT_PROG_LTMAIN - - -## ------------------------------------- ## -## Accumulate code for creating libtool. ## -## ------------------------------------- ## - -# So that we can recreate a full libtool script including additional -# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS -# in macros and then make a single call at the end using the `libtool' -# label. - - -# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) -# ---------------------------------------- -# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL_INIT], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_INIT], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_INIT]) - - -# _LT_CONFIG_LIBTOOL([COMMANDS]) -# ------------------------------ -# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. -m4_define([_LT_CONFIG_LIBTOOL], -[m4_ifval([$1], - [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], - [$1 -])])]) - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) - - -# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) -# ----------------------------------------------------- -m4_defun([_LT_CONFIG_SAVE_COMMANDS], -[_LT_CONFIG_LIBTOOL([$1]) -_LT_CONFIG_LIBTOOL_INIT([$2]) -]) - - -# _LT_FORMAT_COMMENT([COMMENT]) -# ----------------------------- -# Add leading comment marks to the start of each line, and a trailing -# full-stop to the whole comment if one is not present already. -m4_define([_LT_FORMAT_COMMENT], -[m4_ifval([$1], [ -m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], - [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) -)]) - - - -## ------------------------ ## -## FIXME: Eliminate VARNAME ## -## ------------------------ ## - - -# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) -# ------------------------------------------------------------------- -# CONFIGNAME is the name given to the value in the libtool script. -# VARNAME is the (base) name used in the configure script. -# VALUE may be 0, 1 or 2 for a computed quote escaped value based on -# VARNAME. Any other value will be used directly. -m4_define([_LT_DECL], -[lt_if_append_uniq([lt_decl_varnames], [$2], [, ], - [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], - [m4_ifval([$1], [$1], [$2])]) - lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) - m4_ifval([$4], - [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) - lt_dict_add_subkey([lt_decl_dict], [$2], - [tagged?], [m4_ifval([$5], [yes], [no])])]) -]) - - -# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) -# -------------------------------------------------------- -m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) - - -# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_tag_varnames], -[_lt_decl_filter([tagged?], [yes], $@)]) - - -# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) -# --------------------------------------------------------- -m4_define([_lt_decl_filter], -[m4_case([$#], - [0], [m4_fatal([$0: too few arguments: $#])], - [1], [m4_fatal([$0: too few arguments: $#: $1])], - [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], - [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], - [lt_dict_filter([lt_decl_dict], $@)])[]dnl -]) - - -# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) -# -------------------------------------------------- -m4_define([lt_decl_quote_varnames], -[_lt_decl_filter([value], [1], $@)]) - - -# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_dquote_varnames], -[_lt_decl_filter([value], [2], $@)]) - - -# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) -# --------------------------------------------------- -m4_define([lt_decl_varnames_tagged], -[m4_assert([$# <= 2])dnl -_$0(m4_quote(m4_default([$1], [[, ]])), - m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), - m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) -m4_define([_lt_decl_varnames_tagged], -[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) - - -# lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) -# ------------------------------------------------ -m4_define([lt_decl_all_varnames], -[_$0(m4_quote(m4_default([$1], [[, ]])), - m4_if([$2], [], - m4_quote(lt_decl_varnames), - m4_quote(m4_shift($@))))[]dnl -]) -m4_define([_lt_decl_all_varnames], -[lt_join($@, lt_decl_varnames_tagged([$1], - lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl -]) - - -# _LT_CONFIG_STATUS_DECLARE([VARNAME]) -# ------------------------------------ -# Quote a variable value, and forward it to `config.status' so that its -# declaration there will have the same value as in `configure'. VARNAME -# must have a single quote delimited value for this to work. -m4_define([_LT_CONFIG_STATUS_DECLARE], -[$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) - - -# _LT_CONFIG_STATUS_DECLARATIONS -# ------------------------------ -# We delimit libtool config variables with single quotes, so when -# we write them to config.status, we have to be sure to quote all -# embedded single quotes properly. In configure, this macro expands -# each variable declared with _LT_DECL (and _LT_TAGDECL) into: -# -# ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' -m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], -[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), - [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAGS -# ---------------- -# Output comment and list of tags supported by the script -m4_defun([_LT_LIBTOOL_TAGS], -[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl -available_tags="_LT_TAGS"dnl -]) - - -# _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) -# ----------------------------------- -# Extract the dictionary values for VARNAME (optionally with TAG) and -# expand to a commented shell variable setting: -# -# # Some comment about what VAR is for. -# visible_name=$lt_internal_name -m4_define([_LT_LIBTOOL_DECLARE], -[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], - [description])))[]dnl -m4_pushdef([_libtool_name], - m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl -m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), - [0], [_libtool_name=[$]$1], - [1], [_libtool_name=$lt_[]$1], - [2], [_libtool_name=$lt_[]$1], - [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl -m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl -]) - - -# _LT_LIBTOOL_CONFIG_VARS -# ----------------------- -# Produce commented declarations of non-tagged libtool config variables -# suitable for insertion in the LIBTOOL CONFIG section of the `libtool' -# script. Tagged libtool config variables (even for the LIBTOOL CONFIG -# section) are produced by _LT_LIBTOOL_TAG_VARS. -m4_defun([_LT_LIBTOOL_CONFIG_VARS], -[m4_foreach([_lt_var], - m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) - - -# _LT_LIBTOOL_TAG_VARS(TAG) -# ------------------------- -m4_define([_LT_LIBTOOL_TAG_VARS], -[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), - [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) - - -# _LT_TAGVAR(VARNAME, [TAGNAME]) -# ------------------------------ -m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) - - -# _LT_CONFIG_COMMANDS -# ------------------- -# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of -# variables for single and double quote escaping we saved from calls -# to _LT_DECL, we can put quote escaped variables declarations -# into `config.status', and then the shell code to quote escape them in -# for loops in `config.status'. Finally, any additional code accumulated -# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. -m4_defun([_LT_CONFIG_COMMANDS], -[AC_PROVIDE_IFELSE([LT_OUTPUT], - dnl If the libtool generation code has been placed in $CONFIG_LT, - dnl instead of duplicating it all over again into config.status, - dnl then we will have config.status run $CONFIG_LT later, so it - dnl needs to know what name is stored there: - [AC_CONFIG_COMMANDS([libtool], - [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], - dnl If the libtool generation code is destined for config.status, - dnl expand the accumulated commands and init code now: - [AC_CONFIG_COMMANDS([libtool], - [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) -])#_LT_CONFIG_COMMANDS - - -# Initialize. -m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], -[ - -# The HP-UX ksh and POSIX shell print the target directory to stdout -# if CDPATH is set. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -sed_quote_subst='$sed_quote_subst' -double_quote_subst='$double_quote_subst' -delay_variable_subst='$delay_variable_subst' -_LT_CONFIG_STATUS_DECLARATIONS -LTCC='$LTCC' -LTCFLAGS='$LTCFLAGS' -compiler='$compiler_DEFAULT' - -# A function that is used when there is no print builtin or printf. -func_fallback_echo () -{ - eval 'cat <<_LTECHO_EOF -\$[]1 -_LTECHO_EOF' -} - -# Quote evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_quote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -# Double-quote double-evaled strings. -for var in lt_decl_all_varnames([[ \ -]], lt_decl_dquote_varnames); do - case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in - *[[\\\\\\\`\\"\\\$]]*) - eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" - ;; - *) - eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" - ;; - esac -done - -_LT_OUTPUT_LIBTOOL_INIT -]) - -# _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) -# ------------------------------------ -# Generate a child script FILE with all initialization necessary to -# reuse the environment learned by the parent script, and make the -# file executable. If COMMENT is supplied, it is inserted after the -# `#!' sequence but before initialization text begins. After this -# macro, additional text can be appended to FILE to form the body of -# the child script. The macro ends with non-zero status if the -# file could not be fully written (such as if the disk is full). -m4_ifdef([AS_INIT_GENERATED], -[m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], -[m4_defun([_LT_GENERATED_FILE_INIT], -[m4_require([AS_PREPARE])]dnl -[m4_pushdef([AS_MESSAGE_LOG_FD])]dnl -[lt_write_fail=0 -cat >$1 <<_ASEOF || lt_write_fail=1 -#! $SHELL -# Generated by $as_me. -$2 -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$1 <<\_ASEOF || lt_write_fail=1 -AS_SHELL_SANITIZE -_AS_PREPARE -exec AS_MESSAGE_FD>&1 -_ASEOF -test $lt_write_fail = 0 && chmod +x $1[]dnl -m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT - -# LT_OUTPUT -# --------- -# This macro allows early generation of the libtool script (before -# AC_OUTPUT is called), incase it is used in configure for compilation -# tests. -AC_DEFUN([LT_OUTPUT], -[: ${CONFIG_LT=./config.lt} -AC_MSG_NOTICE([creating $CONFIG_LT]) -_LT_GENERATED_FILE_INIT(["$CONFIG_LT"], -[# Run this file to recreate a libtool stub with the current configuration.]) - -cat >>"$CONFIG_LT" <<\_LTEOF -lt_cl_silent=false -exec AS_MESSAGE_LOG_FD>>config.log -{ - echo - AS_BOX([Running $as_me.]) -} >&AS_MESSAGE_LOG_FD - -lt_cl_help="\ -\`$as_me' creates a local libtool stub from the current configuration, -for use in further configure time tests before the real libtool is -generated. - -Usage: $[0] [[OPTIONS]] - - -h, --help print this help, then exit - -V, --version print version number, then exit - -q, --quiet do not print progress messages - -d, --debug don't remove temporary files - -Report bugs to ." - -lt_cl_version="\ -m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl -m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) -configured by $[0], generated by m4_PACKAGE_STRING. - -Copyright (C) 2011 Free Software Foundation, Inc. -This config.lt script is free software; the Free Software Foundation -gives unlimited permision to copy, distribute and modify it." - -while test $[#] != 0 -do - case $[1] in - --version | --v* | -V ) - echo "$lt_cl_version"; exit 0 ;; - --help | --h* | -h ) - echo "$lt_cl_help"; exit 0 ;; - --debug | --d* | -d ) - debug=: ;; - --quiet | --q* | --silent | --s* | -q ) - lt_cl_silent=: ;; - - -*) AC_MSG_ERROR([unrecognized option: $[1] -Try \`$[0] --help' for more information.]) ;; - - *) AC_MSG_ERROR([unrecognized argument: $[1] -Try \`$[0] --help' for more information.]) ;; - esac - shift -done - -if $lt_cl_silent; then - exec AS_MESSAGE_FD>/dev/null -fi -_LTEOF - -cat >>"$CONFIG_LT" <<_LTEOF -_LT_OUTPUT_LIBTOOL_COMMANDS_INIT -_LTEOF - -cat >>"$CONFIG_LT" <<\_LTEOF -AC_MSG_NOTICE([creating $ofile]) -_LT_OUTPUT_LIBTOOL_COMMANDS -AS_EXIT(0) -_LTEOF -chmod +x "$CONFIG_LT" - -# configure is writing to config.log, but config.lt does its own redirection, -# appending to config.log, which fails on DOS, as config.log is still kept -# open by configure. Here we exec the FD to /dev/null, effectively closing -# config.log, so it can be properly (re)opened and appended to by config.lt. -lt_cl_success=: -test "$silent" = yes && - lt_config_lt_args="$lt_config_lt_args --quiet" -exec AS_MESSAGE_LOG_FD>/dev/null -$SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false -exec AS_MESSAGE_LOG_FD>>config.log -$lt_cl_success || AS_EXIT(1) -])# LT_OUTPUT - - -# _LT_CONFIG(TAG) -# --------------- -# If TAG is the built-in tag, create an initial libtool script with a -# default configuration from the untagged config vars. Otherwise add code -# to config.status for appending the configuration named by TAG from the -# matching tagged config vars. -m4_defun([_LT_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_CONFIG_SAVE_COMMANDS([ - m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl - m4_if(_LT_TAG, [C], [ - # See if we are running on zsh, and set the options which allow our - # commands through without removal of \ escapes. - if test -n "${ZSH_VERSION+set}" ; then - setopt NO_GLOB_SUBST - fi - - cfgfile="${ofile}T" - trap "$RM \"$cfgfile\"; exit 1" 1 2 15 - $RM "$cfgfile" - - cat <<_LT_EOF >> "$cfgfile" -#! $SHELL - -# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. -# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION -# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: -# NOTE: Changes made to this file will be lost: look at ltmain.sh. -# -_LT_COPYING -_LT_LIBTOOL_TAGS - -# ### BEGIN LIBTOOL CONFIG -_LT_LIBTOOL_CONFIG_VARS -_LT_LIBTOOL_TAG_VARS -# ### END LIBTOOL CONFIG - -_LT_EOF - - case $host_os in - aix3*) - cat <<\_LT_EOF >> "$cfgfile" -# AIX sometimes has problems with the GCC collect2 program. For some -# reason, if we set the COLLECT_NAMES environment variable, the problems -# vanish in a puff of smoke. -if test "X${COLLECT_NAMES+set}" != Xset; then - COLLECT_NAMES= - export COLLECT_NAMES -fi -_LT_EOF - ;; - esac - - _LT_PROG_LTMAIN - - # We use sed instead of cat because bash on DJGPP gets confused if - # if finds mixed CR/LF and LF-only lines. Since sed operates in - # text mode, it properly converts lines to CR/LF. This bash problem - # is reportedly fixed, but why not run on old versions too? - sed '$q' "$ltmain" >> "$cfgfile" \ - || (rm -f "$cfgfile"; exit 1) - - _LT_PROG_REPLACE_SHELLFNS - - mv -f "$cfgfile" "$ofile" || - (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") - chmod +x "$ofile" -], -[cat <<_LT_EOF >> "$ofile" - -dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded -dnl in a comment (ie after a #). -# ### BEGIN LIBTOOL TAG CONFIG: $1 -_LT_LIBTOOL_TAG_VARS(_LT_TAG) -# ### END LIBTOOL TAG CONFIG: $1 -_LT_EOF -])dnl /m4_if -], -[m4_if([$1], [], [ - PACKAGE='$PACKAGE' - VERSION='$VERSION' - TIMESTAMP='$TIMESTAMP' - RM='$RM' - ofile='$ofile'], []) -])dnl /_LT_CONFIG_SAVE_COMMANDS -])# _LT_CONFIG - - -# LT_SUPPORTED_TAG(TAG) -# --------------------- -# Trace this macro to discover what tags are supported by the libtool -# --tag option, using: -# autoconf --trace 'LT_SUPPORTED_TAG:$1' -AC_DEFUN([LT_SUPPORTED_TAG], []) - - -# C support is built-in for now -m4_define([_LT_LANG_C_enabled], []) -m4_define([_LT_TAGS], []) - - -# LT_LANG(LANG) -# ------------- -# Enable libtool support for the given language if not already enabled. -AC_DEFUN([LT_LANG], -[AC_BEFORE([$0], [LT_OUTPUT])dnl -m4_case([$1], - [C], [_LT_LANG(C)], - [C++], [_LT_LANG(CXX)], - [Go], [_LT_LANG(GO)], - [Java], [_LT_LANG(GCJ)], - [Fortran 77], [_LT_LANG(F77)], - [Fortran], [_LT_LANG(FC)], - [Windows Resource], [_LT_LANG(RC)], - [m4_ifdef([_LT_LANG_]$1[_CONFIG], - [_LT_LANG($1)], - [m4_fatal([$0: unsupported language: "$1"])])])dnl -])# LT_LANG - - -# _LT_LANG(LANGNAME) -# ------------------ -m4_defun([_LT_LANG], -[m4_ifdef([_LT_LANG_]$1[_enabled], [], - [LT_SUPPORTED_TAG([$1])dnl - m4_append([_LT_TAGS], [$1 ])dnl - m4_define([_LT_LANG_]$1[_enabled], [])dnl - _LT_LANG_$1_CONFIG($1)])dnl -])# _LT_LANG - - -m4_ifndef([AC_PROG_GO], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_GO. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ -m4_defun([AC_PROG_GO], -[AC_LANG_PUSH(Go)dnl -AC_ARG_VAR([GOC], [Go compiler command])dnl -AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl -_AC_ARG_VAR_LDFLAGS()dnl -AC_CHECK_TOOL(GOC, gccgo) -if test -z "$GOC"; then - if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) - fi -fi -if test -z "$GOC"; then - AC_CHECK_PROG(GOC, gccgo, gccgo, false) -fi -])#m4_defun -])#m4_ifndef - - -# _LT_LANG_DEFAULT_CONFIG -# ----------------------- -m4_defun([_LT_LANG_DEFAULT_CONFIG], -[AC_PROVIDE_IFELSE([AC_PROG_CXX], - [LT_LANG(CXX)], - [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) - -AC_PROVIDE_IFELSE([AC_PROG_F77], - [LT_LANG(F77)], - [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) - -AC_PROVIDE_IFELSE([AC_PROG_FC], - [LT_LANG(FC)], - [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) - -dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal -dnl pulling things in needlessly. -AC_PROVIDE_IFELSE([AC_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], - [LT_LANG(GCJ)], - [AC_PROVIDE_IFELSE([LT_PROG_GCJ], - [LT_LANG(GCJ)], - [m4_ifdef([AC_PROG_GCJ], - [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([A][M_PROG_GCJ], - [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) - m4_ifdef([LT_PROG_GCJ], - [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) - -AC_PROVIDE_IFELSE([AC_PROG_GO], - [LT_LANG(GO)], - [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) - -AC_PROVIDE_IFELSE([LT_PROG_RC], - [LT_LANG(RC)], - [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) -])# _LT_LANG_DEFAULT_CONFIG - -# Obsolete macros: -AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) -AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) -AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) -AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) -AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_CXX], []) -dnl AC_DEFUN([AC_LIBTOOL_F77], []) -dnl AC_DEFUN([AC_LIBTOOL_FC], []) -dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) -dnl AC_DEFUN([AC_LIBTOOL_RC], []) - - -# _LT_TAG_COMPILER -# ---------------- -m4_defun([_LT_TAG_COMPILER], -[AC_REQUIRE([AC_PROG_CC])dnl - -_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl -_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl -_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl -_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl - -# If no C compiler was specified, use CC. -LTCC=${LTCC-"$CC"} - -# If no C compiler flags were specified, use CFLAGS. -LTCFLAGS=${LTCFLAGS-"$CFLAGS"} - -# Allow CC to be a program name with arguments. -compiler=$CC -])# _LT_TAG_COMPILER - - -# _LT_COMPILER_BOILERPLATE -# ------------------------ -# Check for compiler boilerplate output or warnings with -# the simple compiler test code. -m4_defun([_LT_COMPILER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_compile_test_code" >conftest.$ac_ext -eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_compiler_boilerplate=`cat conftest.err` -$RM conftest* -])# _LT_COMPILER_BOILERPLATE - - -# _LT_LINKER_BOILERPLATE -# ---------------------- -# Check for linker boilerplate output or warnings with -# the simple link test code. -m4_defun([_LT_LINKER_BOILERPLATE], -[m4_require([_LT_DECL_SED])dnl -ac_outfile=conftest.$ac_objext -echo "$lt_simple_link_test_code" >conftest.$ac_ext -eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err -_lt_linker_boilerplate=`cat conftest.err` -$RM -r conftest* -])# _LT_LINKER_BOILERPLATE - -# _LT_REQUIRED_DARWIN_CHECKS -# ------------------------- -m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ - case $host_os in - rhapsody* | darwin*) - AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) - AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) - AC_CHECK_TOOL([LIPO], [lipo], [:]) - AC_CHECK_TOOL([OTOOL], [otool], [:]) - AC_CHECK_TOOL([OTOOL64], [otool64], [:]) - _LT_DECL([], [DSYMUTIL], [1], - [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) - _LT_DECL([], [NMEDIT], [1], - [Tool to change global to local symbols on Mac OS X]) - _LT_DECL([], [LIPO], [1], - [Tool to manipulate fat objects and archives on Mac OS X]) - _LT_DECL([], [OTOOL], [1], - [ldd/readelf like tool for Mach-O binaries on Mac OS X]) - _LT_DECL([], [OTOOL64], [1], - [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) - - AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], - [lt_cv_apple_cc_single_mod=no - if test -z "${LT_MULTI_MODULE}"; then - # By default we will add the -single_module flag. You can override - # by either setting the environment variable LT_MULTI_MODULE - # non-empty at configure time, or by adding -multi_module to the - # link flags. - rm -rf libconftest.dylib* - echo "int foo(void){return 1;}" > conftest.c - echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ --dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ - -dynamiclib -Wl,-single_module conftest.c 2>conftest.err - _lt_result=$? - # If there is a non-empty error log, and "single_module" - # appears in it, assume the flag caused a linker warning - if test -s conftest.err && $GREP single_module conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - # Otherwise, if the output was created with a 0 exit code from - # the compiler, it worked. - elif test -f libconftest.dylib && test $_lt_result -eq 0; then - lt_cv_apple_cc_single_mod=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -rf libconftest.dylib* - rm -f conftest.* - fi]) - - AC_CACHE_CHECK([for -exported_symbols_list linker flag], - [lt_cv_ld_exported_symbols_list], - [lt_cv_ld_exported_symbols_list=no - save_LDFLAGS=$LDFLAGS - echo "_main" > conftest.sym - LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [lt_cv_ld_exported_symbols_list=yes], - [lt_cv_ld_exported_symbols_list=no]) - LDFLAGS="$save_LDFLAGS" - ]) - - AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], - [lt_cv_ld_force_load=no - cat > conftest.c << _LT_EOF -int forced_loaded() { return 2;} -_LT_EOF - echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD - echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD - echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD - $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD - cat > conftest.c << _LT_EOF -int main() { return 0;} -_LT_EOF - echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD - $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err - _lt_result=$? - if test -s conftest.err && $GREP force_load conftest.err; then - cat conftest.err >&AS_MESSAGE_LOG_FD - elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then - lt_cv_ld_force_load=yes - else - cat conftest.err >&AS_MESSAGE_LOG_FD - fi - rm -f conftest.err libconftest.a conftest conftest.c - rm -rf conftest.dSYM - ]) - case $host_os in - rhapsody* | darwin1.[[012]]) - _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; - darwin1.*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - darwin*) # darwin 5.x on - # if running on 10.5 or later, the deployment target defaults - # to the OS version, if on x86, and 10.4, the deployment - # target defaults to 10.4. Don't you love it? - case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in - 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - 10.[[012]]*) - _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; - 10.*) - _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; - esac - ;; - esac - if test "$lt_cv_apple_cc_single_mod" = "yes"; then - _lt_dar_single_mod='$single_module' - fi - if test "$lt_cv_ld_exported_symbols_list" = "yes"; then - _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' - else - _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' - fi - if test "$DSYMUTIL" != ":" && test "$lt_cv_ld_force_load" = "no"; then - _lt_dsymutil='~$DSYMUTIL $lib || :' - else - _lt_dsymutil= - fi - ;; - esac -]) - - -# _LT_DARWIN_LINKER_FEATURES([TAG]) -# --------------------------------- -# Checks for linker and compiler features on darwin -m4_defun([_LT_DARWIN_LINKER_FEATURES], -[ - m4_require([_LT_REQUIRED_DARWIN_CHECKS]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_automatic, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - if test "$lt_cv_ld_force_load" = "yes"; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' - m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], - [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='' - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined" - case $cc_basename in - ifort*) _lt_dar_can_shared=yes ;; - *) _lt_dar_can_shared=$GCC ;; - esac - if test "$_lt_dar_can_shared" = "yes"; then - output_verbose_link_cmd=func_echo_all - _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" - _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" - _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" - m4_if([$1], [CXX], -[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then - _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" - _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" - fi -],[]) - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi -]) - -# _LT_SYS_MODULE_PATH_AIX([TAGNAME]) -# ---------------------------------- -# Links a minimal program and checks the executable -# for the system default hardcoded library path. In most cases, -# this is /usr/lib:/lib, but when the MPI compilers are used -# the location of the communication and MPI libs are included too. -# If we don't find anything, use the default library path according -# to the aix ld manual. -# Store the results from the different compilers for each TAGNAME. -# Allow to override them for all tags through lt_cv_aix_libpath. -m4_defun([_LT_SYS_MODULE_PATH_AIX], -[m4_require([_LT_DECL_SED])dnl -if test "${lt_cv_aix_libpath+set}" = set; then - aix_libpath=$lt_cv_aix_libpath -else - AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], - [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ - lt_aix_libpath_sed='[ - /Import File Strings/,/^$/ { - /^0/ { - s/^0 *\([^ ]*\) *$/\1/ - p - } - }]' - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - # Check for a 64-bit object if we didn't find anything. - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` - fi],[]) - if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then - _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" - fi - ]) - aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) -fi -])# _LT_SYS_MODULE_PATH_AIX - - -# _LT_SHELL_INIT(ARG) -# ------------------- -m4_define([_LT_SHELL_INIT], -[m4_divert_text([M4SH-INIT], [$1 -])])# _LT_SHELL_INIT - - - -# _LT_PROG_ECHO_BACKSLASH -# ----------------------- -# Find how we can fake an echo command that does not interpret backslash. -# In particular, with Autoconf 2.60 or later we add some code to the start -# of the generated configure script which will find a shell with a builtin -# printf (which we can use as an echo command). -m4_defun([_LT_PROG_ECHO_BACKSLASH], -[ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO -ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - -AC_MSG_CHECKING([how to print strings]) -# Test print first, because it will be a builtin if present. -if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ - test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='print -r --' -elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then - ECHO='printf %s\n' -else - # Use this function as a fallback that always works. - func_fallback_echo () - { - eval 'cat <<_LTECHO_EOF -$[]1 -_LTECHO_EOF' - } - ECHO='func_fallback_echo' -fi - -# func_echo_all arg... -# Invoke $ECHO with all args, space-separated. -func_echo_all () -{ - $ECHO "$*" -} - -case "$ECHO" in - printf*) AC_MSG_RESULT([printf]) ;; - print*) AC_MSG_RESULT([print -r]) ;; - *) AC_MSG_RESULT([cat]) ;; -esac - -m4_ifdef([_AS_DETECT_SUGGESTED], -[_AS_DETECT_SUGGESTED([ - test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( - ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO - ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO - PATH=/empty FPATH=/empty; export PATH FPATH - test "X`printf %s $ECHO`" = "X$ECHO" \ - || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) - -_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) -_LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) -])# _LT_PROG_ECHO_BACKSLASH - - -# _LT_WITH_SYSROOT -# ---------------- -AC_DEFUN([_LT_WITH_SYSROOT], -[AC_MSG_CHECKING([for sysroot]) -AC_ARG_WITH([sysroot], -[ --with-sysroot[=DIR] Search for dependent libraries within DIR - (or the compiler's sysroot if not specified).], -[], [with_sysroot=no]) - -dnl lt_sysroot will always be passed unquoted. We quote it here -dnl in case the user passed a directory name. -lt_sysroot= -case ${with_sysroot} in #( - yes) - if test "$GCC" = yes; then - lt_sysroot=`$CC --print-sysroot 2>/dev/null` - fi - ;; #( - /*) - lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` - ;; #( - no|'') - ;; #( - *) - AC_MSG_RESULT([${with_sysroot}]) - AC_MSG_ERROR([The sysroot must be an absolute path.]) - ;; -esac - - AC_MSG_RESULT([${lt_sysroot:-no}]) -_LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl -[dependent libraries, and in which our libraries should be installed.])]) - -# _LT_ENABLE_LOCK -# --------------- -m4_defun([_LT_ENABLE_LOCK], -[AC_ARG_ENABLE([libtool-lock], - [AS_HELP_STRING([--disable-libtool-lock], - [avoid locking (might break parallel builds)])]) -test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes - -# Some flags need to be propagated to the compiler or linker for good -# libtool support. -case $host in -ia64-*-hpux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.$ac_objext` in - *ELF-32*) - HPUX_IA64_MODE="32" - ;; - *ELF-64*) - HPUX_IA64_MODE="64" - ;; - esac - fi - rm -rf conftest* - ;; -*-*-irix6*) - # Find out which ABI we are using. - echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - if test "$lt_cv_prog_gnu_ld" = yes; then - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -melf32bsmip" - ;; - *N32*) - LD="${LD-ld} -melf32bmipn32" - ;; - *64-bit*) - LD="${LD-ld} -melf64bmip" - ;; - esac - else - case `/usr/bin/file conftest.$ac_objext` in - *32-bit*) - LD="${LD-ld} -32" - ;; - *N32*) - LD="${LD-ld} -n32" - ;; - *64-bit*) - LD="${LD-ld} -64" - ;; - esac - fi - fi - rm -rf conftest* - ;; - -x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ -s390*-*linux*|s390*-*tpf*|sparc*-*linux*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *32-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_i386_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_i386" - ;; - ppc64-*linux*|powerpc64-*linux*) - LD="${LD-ld} -m elf32ppclinux" - ;; - s390x-*linux*) - LD="${LD-ld} -m elf_s390" - ;; - sparc64-*linux*) - LD="${LD-ld} -m elf32_sparc" - ;; - esac - ;; - *64-bit*) - case $host in - x86_64-*kfreebsd*-gnu) - LD="${LD-ld} -m elf_x86_64_fbsd" - ;; - x86_64-*linux*) - LD="${LD-ld} -m elf_x86_64" - ;; - ppc*-*linux*|powerpc*-*linux*) - LD="${LD-ld} -m elf64ppc" - ;; - s390*-*linux*|s390*-*tpf*) - LD="${LD-ld} -m elf64_s390" - ;; - sparc*-*linux*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; - -*-*-sco3.2v5*) - # On SCO OpenServer 5, we need -belf to get full-featured binaries. - SAVE_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -belf" - AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, - [AC_LANG_PUSH(C) - AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) - AC_LANG_POP]) - if test x"$lt_cv_cc_needs_belf" != x"yes"; then - # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf - CFLAGS="$SAVE_CFLAGS" - fi - ;; -*-*solaris*) - # Find out which ABI we are using. - echo 'int i;' > conftest.$ac_ext - if AC_TRY_EVAL(ac_compile); then - case `/usr/bin/file conftest.o` in - *64-bit*) - case $lt_cv_prog_gnu_ld in - yes*) - case $host in - i?86-*-solaris*) - LD="${LD-ld} -m elf_x86_64" - ;; - sparc*-*-solaris*) - LD="${LD-ld} -m elf64_sparc" - ;; - esac - # GNU ld 2.21 introduced _sol2 emulations. Use them if available. - if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then - LD="${LD-ld}_sol2" - fi - ;; - *) - if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then - LD="${LD-ld} -64" - fi - ;; - esac - ;; - esac - fi - rm -rf conftest* - ;; -esac - -need_locks="$enable_libtool_lock" -])# _LT_ENABLE_LOCK - - -# _LT_PROG_AR -# ----------- -m4_defun([_LT_PROG_AR], -[AC_CHECK_TOOLS(AR, [ar], false) -: ${AR=ar} -: ${AR_FLAGS=cru} -_LT_DECL([], [AR], [1], [The archiver]) -_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) - -AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], - [lt_cv_ar_at_file=no - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [echo conftest.$ac_objext > conftest.lst - lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -eq 0; then - # Ensure the archiver fails upon bogus file names. - rm -f conftest.$ac_objext libconftest.a - AC_TRY_EVAL([lt_ar_try]) - if test "$ac_status" -ne 0; then - lt_cv_ar_at_file=@ - fi - fi - rm -f conftest.* libconftest.a - ]) - ]) - -if test "x$lt_cv_ar_at_file" = xno; then - archiver_list_spec= -else - archiver_list_spec=$lt_cv_ar_at_file -fi -_LT_DECL([], [archiver_list_spec], [1], - [How to feed a file listing to the archiver]) -])# _LT_PROG_AR - - -# _LT_CMD_OLD_ARCHIVE -# ------------------- -m4_defun([_LT_CMD_OLD_ARCHIVE], -[_LT_PROG_AR - -AC_CHECK_TOOL(STRIP, strip, :) -test -z "$STRIP" && STRIP=: -_LT_DECL([], [STRIP], [1], [A symbol stripping program]) - -AC_CHECK_TOOL(RANLIB, ranlib, :) -test -z "$RANLIB" && RANLIB=: -_LT_DECL([], [RANLIB], [1], - [Commands used to install an old-style archive]) - -# Determine commands to create old-style static archives. -old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' -old_postinstall_cmds='chmod 644 $oldlib' -old_postuninstall_cmds= - -if test -n "$RANLIB"; then - case $host_os in - openbsd*) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" - ;; - *) - old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" - ;; - esac - old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" -fi - -case $host_os in - darwin*) - lock_old_archive_extraction=yes ;; - *) - lock_old_archive_extraction=no ;; -esac -_LT_DECL([], [old_postinstall_cmds], [2]) -_LT_DECL([], [old_postuninstall_cmds], [2]) -_LT_TAGDECL([], [old_archive_cmds], [2], - [Commands used to build an old-style archive]) -_LT_DECL([], [lock_old_archive_extraction], [0], - [Whether to use a lock for old archive extraction]) -])# _LT_CMD_OLD_ARCHIVE - - -# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------------------- -# Check whether the given compiler option works -AC_DEFUN([_LT_COMPILER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - lt_compiler_flag="$3" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - # The option is referenced via a variable to avoid confusing sed. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>conftest.err) - ac_status=$? - cat conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s "$ac_outfile"; then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings other than the usual output. - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - fi - $RM conftest* -]) - -if test x"[$]$2" = xyes; then - m4_if([$5], , :, [$5]) -else - m4_if([$6], , :, [$6]) -fi -])# _LT_COMPILER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) - - -# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, -# [ACTION-SUCCESS], [ACTION-FAILURE]) -# ---------------------------------------------------- -# Check whether the given linker option works -AC_DEFUN([_LT_LINKER_OPTION], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_SED])dnl -AC_CACHE_CHECK([$1], [$2], - [$2=no - save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS $3" - echo "$lt_simple_link_test_code" > conftest.$ac_ext - if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then - # The linker can only warn and ignore the option if not recognized - # So say no if there are warnings - if test -s conftest.err; then - # Append any errors to the config.log. - cat conftest.err 1>&AS_MESSAGE_LOG_FD - $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp - $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 - if diff conftest.exp conftest.er2 >/dev/null; then - $2=yes - fi - else - $2=yes - fi - fi - $RM -r conftest* - LDFLAGS="$save_LDFLAGS" -]) - -if test x"[$]$2" = xyes; then - m4_if([$4], , :, [$4]) -else - m4_if([$5], , :, [$5]) -fi -])# _LT_LINKER_OPTION - -# Old name: -AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) - - -# LT_CMD_MAX_LEN -#--------------- -AC_DEFUN([LT_CMD_MAX_LEN], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -# find the maximum length of command line arguments -AC_MSG_CHECKING([the maximum length of command line arguments]) -AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl - i=0 - teststring="ABCD" - - case $build_os in - msdosdjgpp*) - # On DJGPP, this test can blow up pretty badly due to problems in libc - # (any single argument exceeding 2000 bytes causes a buffer overrun - # during glob expansion). Even if it were fixed, the result of this - # check would be larger than it should be. - lt_cv_sys_max_cmd_len=12288; # 12K is about right - ;; - - gnu*) - # Under GNU Hurd, this test is not required because there is - # no limit to the length of command line arguments. - # Libtool will interpret -1 as no limit whatsoever - lt_cv_sys_max_cmd_len=-1; - ;; - - cygwin* | mingw* | cegcc*) - # On Win9x/ME, this test blows up -- it succeeds, but takes - # about 5 minutes as the teststring grows exponentially. - # Worse, since 9x/ME are not pre-emptively multitasking, - # you end up with a "frozen" computer, even though with patience - # the test eventually succeeds (with a max line length of 256k). - # Instead, let's just punt: use the minimum linelength reported by - # all of the supported platforms: 8192 (on NT/2K/XP). - lt_cv_sys_max_cmd_len=8192; - ;; - - mint*) - # On MiNT this can take a long time and run out of memory. - lt_cv_sys_max_cmd_len=8192; - ;; - - amigaos*) - # On AmigaOS with pdksh, this test takes hours, literally. - # So we just punt and use a minimum line length of 8192. - lt_cv_sys_max_cmd_len=8192; - ;; - - netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) - # This has been around since 386BSD, at least. Likely further. - if test -x /sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` - elif test -x /usr/sbin/sysctl; then - lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` - else - lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs - fi - # And add a safety zone - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - ;; - - interix*) - # We know the value 262144 and hardcode it with a safety zone (like BSD) - lt_cv_sys_max_cmd_len=196608 - ;; - - os2*) - # The test takes a long time on OS/2. - lt_cv_sys_max_cmd_len=8192 - ;; - - osf*) - # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure - # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not - # nice to cause kernel panics so lets avoid the loop below. - # First set a reasonable default. - lt_cv_sys_max_cmd_len=16384 - # - if test -x /sbin/sysconfig; then - case `/sbin/sysconfig -q proc exec_disable_arg_limit` in - *1*) lt_cv_sys_max_cmd_len=-1 ;; - esac - fi - ;; - sco3.2v5*) - lt_cv_sys_max_cmd_len=102400 - ;; - sysv5* | sco5v6* | sysv4.2uw2*) - kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` - if test -n "$kargmax"; then - lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` - else - lt_cv_sys_max_cmd_len=32768 - fi - ;; - *) - lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` - if test -n "$lt_cv_sys_max_cmd_len"; then - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` - else - # Make teststring a little bigger before we do anything with it. - # a 1K string should be a reasonable start. - for i in 1 2 3 4 5 6 7 8 ; do - teststring=$teststring$teststring - done - SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} - # If test is not a shell built-in, we'll probably end up computing a - # maximum length that is only half of the actual maximum length, but - # we can't tell. - while { test "X"`env echo "$teststring$teststring" 2>/dev/null` \ - = "X$teststring$teststring"; } >/dev/null 2>&1 && - test $i != 17 # 1/2 MB should be enough - do - i=`expr $i + 1` - teststring=$teststring$teststring - done - # Only check the string length outside the loop. - lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` - teststring= - # Add a significant safety factor because C++ compilers can tack on - # massive amounts of additional arguments before passing them to the - # linker. It appears as though 1/2 is a usable value. - lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` - fi - ;; - esac -]) -if test -n $lt_cv_sys_max_cmd_len ; then - AC_MSG_RESULT($lt_cv_sys_max_cmd_len) -else - AC_MSG_RESULT(none) -fi -max_cmd_len=$lt_cv_sys_max_cmd_len -_LT_DECL([], [max_cmd_len], [0], - [What is the maximum length of a command?]) -])# LT_CMD_MAX_LEN - -# Old name: -AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) - - -# _LT_HEADER_DLFCN -# ---------------- -m4_defun([_LT_HEADER_DLFCN], -[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl -])# _LT_HEADER_DLFCN - - -# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, -# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) -# ---------------------------------------------------------------- -m4_defun([_LT_TRY_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "$cross_compiling" = yes; then : - [$4] -else - lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 - lt_status=$lt_dlunknown - cat > conftest.$ac_ext <<_LT_EOF -[#line $LINENO "configure" -#include "confdefs.h" - -#if HAVE_DLFCN_H -#include -#endif - -#include - -#ifdef RTLD_GLOBAL -# define LT_DLGLOBAL RTLD_GLOBAL -#else -# ifdef DL_GLOBAL -# define LT_DLGLOBAL DL_GLOBAL -# else -# define LT_DLGLOBAL 0 -# endif -#endif - -/* We may have to define LT_DLLAZY_OR_NOW in the command line if we - find out it does not work in some platform. */ -#ifndef LT_DLLAZY_OR_NOW -# ifdef RTLD_LAZY -# define LT_DLLAZY_OR_NOW RTLD_LAZY -# else -# ifdef DL_LAZY -# define LT_DLLAZY_OR_NOW DL_LAZY -# else -# ifdef RTLD_NOW -# define LT_DLLAZY_OR_NOW RTLD_NOW -# else -# ifdef DL_NOW -# define LT_DLLAZY_OR_NOW DL_NOW -# else -# define LT_DLLAZY_OR_NOW 0 -# endif -# endif -# endif -# endif -#endif - -/* When -fvisbility=hidden is used, assume the code has been annotated - correspondingly for the symbols needed. */ -#if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) -int fnord () __attribute__((visibility("default"))); -#endif - -int fnord () { return 42; } -int main () -{ - void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); - int status = $lt_dlunknown; - - if (self) - { - if (dlsym (self,"fnord")) status = $lt_dlno_uscore; - else - { - if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; - else puts (dlerror ()); - } - /* dlclose (self); */ - } - else - puts (dlerror ()); - - return status; -}] -_LT_EOF - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then - (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null - lt_status=$? - case x$lt_status in - x$lt_dlno_uscore) $1 ;; - x$lt_dlneed_uscore) $2 ;; - x$lt_dlunknown|x*) $3 ;; - esac - else : - # compilation failed - $3 - fi -fi -rm -fr conftest* -])# _LT_TRY_DLOPEN_SELF - - -# LT_SYS_DLOPEN_SELF -# ------------------ -AC_DEFUN([LT_SYS_DLOPEN_SELF], -[m4_require([_LT_HEADER_DLFCN])dnl -if test "x$enable_dlopen" != xyes; then - enable_dlopen=unknown - enable_dlopen_self=unknown - enable_dlopen_self_static=unknown -else - lt_cv_dlopen=no - lt_cv_dlopen_libs= - - case $host_os in - beos*) - lt_cv_dlopen="load_add_on" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ;; - - mingw* | pw32* | cegcc*) - lt_cv_dlopen="LoadLibrary" - lt_cv_dlopen_libs= - ;; - - cygwin*) - lt_cv_dlopen="dlopen" - lt_cv_dlopen_libs= - ;; - - darwin*) - # if libdl is installed we need to link against it - AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ - lt_cv_dlopen="dyld" - lt_cv_dlopen_libs= - lt_cv_dlopen_self=yes - ]) - ;; - - *) - AC_CHECK_FUNC([shl_load], - [lt_cv_dlopen="shl_load"], - [AC_CHECK_LIB([dld], [shl_load], - [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], - [AC_CHECK_FUNC([dlopen], - [lt_cv_dlopen="dlopen"], - [AC_CHECK_LIB([dl], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], - [AC_CHECK_LIB([svld], [dlopen], - [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], - [AC_CHECK_LIB([dld], [dld_link], - [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) - ]) - ]) - ]) - ]) - ]) - ;; - esac - - if test "x$lt_cv_dlopen" != xno; then - enable_dlopen=yes - else - enable_dlopen=no - fi - - case $lt_cv_dlopen in - dlopen) - save_CPPFLAGS="$CPPFLAGS" - test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" - - save_LDFLAGS="$LDFLAGS" - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" - - save_LIBS="$LIBS" - LIBS="$lt_cv_dlopen_libs $LIBS" - - AC_CACHE_CHECK([whether a program can dlopen itself], - lt_cv_dlopen_self, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, - lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) - ]) - - if test "x$lt_cv_dlopen_self" = xyes; then - wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" - AC_CACHE_CHECK([whether a statically linked program can dlopen itself], - lt_cv_dlopen_self_static, [dnl - _LT_TRY_DLOPEN_SELF( - lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, - lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) - ]) - fi - - CPPFLAGS="$save_CPPFLAGS" - LDFLAGS="$save_LDFLAGS" - LIBS="$save_LIBS" - ;; - esac - - case $lt_cv_dlopen_self in - yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; - *) enable_dlopen_self=unknown ;; - esac - - case $lt_cv_dlopen_self_static in - yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; - *) enable_dlopen_self_static=unknown ;; - esac -fi -_LT_DECL([dlopen_support], [enable_dlopen], [0], - [Whether dlopen is supported]) -_LT_DECL([dlopen_self], [enable_dlopen_self], [0], - [Whether dlopen of programs is supported]) -_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], - [Whether dlopen of statically linked programs is supported]) -])# LT_SYS_DLOPEN_SELF - -# Old name: -AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) - - -# _LT_COMPILER_C_O([TAGNAME]) -# --------------------------- -# Check to see if options -c and -o are simultaneously supported by compiler. -# This macro does not hard code the compiler like AC_PROG_CC_C_O. -m4_defun([_LT_COMPILER_C_O], -[m4_require([_LT_DECL_SED])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no - $RM -r conftest 2>/dev/null - mkdir conftest - cd conftest - mkdir out - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - lt_compiler_flag="-o out/conftest2.$ac_objext" - # Insert the option either (1) after the last *FLAGS variable, or - # (2) before a word containing "conftest.", or (3) at the end. - # Note that $ac_compile itself does not contain backslashes and begins - # with a dollar sign (not a hyphen), so the echo should work correctly. - lt_compile=`echo "$ac_compile" | $SED \ - -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ - -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ - -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$lt_compile" 2>out/conftest.err) - ac_status=$? - cat out/conftest.err >&AS_MESSAGE_LOG_FD - echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD - if (exit $ac_status) && test -s out/conftest2.$ac_objext - then - # The compiler can only warn and ignore the option if not recognized - # So say no if there are warnings - $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp - $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 - if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then - _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - fi - fi - chmod u+w . 2>&AS_MESSAGE_LOG_FD - $RM conftest* - # SGI C++ compiler will create directory out/ii_files/ for - # template instantiation - test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files - $RM out/* && rmdir out - cd .. - $RM -r conftest - $RM conftest* -]) -_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], - [Does compiler simultaneously support -c and -o options?]) -])# _LT_COMPILER_C_O - - -# _LT_COMPILER_FILE_LOCKS([TAGNAME]) -# ---------------------------------- -# Check to see if we can do hard links to lock some files if needed -m4_defun([_LT_COMPILER_FILE_LOCKS], -[m4_require([_LT_ENABLE_LOCK])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -_LT_COMPILER_C_O([$1]) - -hard_links="nottested" -if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then - # do not overwrite the value of need_locks provided by the user - AC_MSG_CHECKING([if we can lock with hard links]) - hard_links=yes - $RM conftest* - ln conftest.a conftest.b 2>/dev/null && hard_links=no - touch conftest.a - ln conftest.a conftest.b 2>&5 || hard_links=no - ln conftest.a conftest.b 2>/dev/null && hard_links=no - AC_MSG_RESULT([$hard_links]) - if test "$hard_links" = no; then - AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe]) - need_locks=warn - fi -else - need_locks=no -fi -_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) -])# _LT_COMPILER_FILE_LOCKS - - -# _LT_CHECK_OBJDIR -# ---------------- -m4_defun([_LT_CHECK_OBJDIR], -[AC_CACHE_CHECK([for objdir], [lt_cv_objdir], -[rm -f .libs 2>/dev/null -mkdir .libs 2>/dev/null -if test -d .libs; then - lt_cv_objdir=.libs -else - # MS-DOS does not allow filenames that begin with a dot. - lt_cv_objdir=_libs -fi -rmdir .libs 2>/dev/null]) -objdir=$lt_cv_objdir -_LT_DECL([], [objdir], [0], - [The name of the directory that contains temporary libtool files])dnl -m4_pattern_allow([LT_OBJDIR])dnl -AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/", - [Define to the sub-directory in which libtool stores uninstalled libraries.]) -])# _LT_CHECK_OBJDIR - - -# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) -# -------------------------------------- -# Check hardcoding attributes. -m4_defun([_LT_LINKER_HARDCODE_LIBPATH], -[AC_MSG_CHECKING([how to hardcode library paths into programs]) -_LT_TAGVAR(hardcode_action, $1)= -if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || - test -n "$_LT_TAGVAR(runpath_var, $1)" || - test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then - - # We can hardcode non-existent directories. - if test "$_LT_TAGVAR(hardcode_direct, $1)" != no && - # If the only mechanism to avoid hardcoding is shlibpath_var, we - # have to relink, otherwise we might link with an installed library - # when we should be linking with a yet-to-be-installed one - ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no && - test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then - # Linking always hardcodes the temporary library directory. - _LT_TAGVAR(hardcode_action, $1)=relink - else - # We can link without hardcoding, and we can hardcode nonexisting dirs. - _LT_TAGVAR(hardcode_action, $1)=immediate - fi -else - # We cannot hardcode anything, or else we can only hardcode existing - # directories. - _LT_TAGVAR(hardcode_action, $1)=unsupported -fi -AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) - -if test "$_LT_TAGVAR(hardcode_action, $1)" = relink || - test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then - # Fast installation is not supported - enable_fast_install=no -elif test "$shlibpath_overrides_runpath" = yes || - test "$enable_shared" = no; then - # Fast installation is not necessary - enable_fast_install=needless -fi -_LT_TAGDECL([], [hardcode_action], [0], - [How to hardcode a shared library path into an executable]) -])# _LT_LINKER_HARDCODE_LIBPATH - - -# _LT_CMD_STRIPLIB -# ---------------- -m4_defun([_LT_CMD_STRIPLIB], -[m4_require([_LT_DECL_EGREP]) -striplib= -old_striplib= -AC_MSG_CHECKING([whether stripping libraries is possible]) -if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then - test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" - test -z "$striplib" && striplib="$STRIP --strip-unneeded" - AC_MSG_RESULT([yes]) -else -# FIXME - insert some real tests, host_os isn't really good enough - case $host_os in - darwin*) - if test -n "$STRIP" ; then - striplib="$STRIP -x" - old_striplib="$STRIP -S" - AC_MSG_RESULT([yes]) - else - AC_MSG_RESULT([no]) - fi - ;; - *) - AC_MSG_RESULT([no]) - ;; - esac -fi -_LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) -_LT_DECL([], [striplib], [1]) -])# _LT_CMD_STRIPLIB - - -# _LT_SYS_DYNAMIC_LINKER([TAG]) -# ----------------------------- -# PORTME Fill in your ld.so characteristics -m4_defun([_LT_SYS_DYNAMIC_LINKER], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_OBJDUMP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CHECK_SHELL_FEATURES])dnl -AC_MSG_CHECKING([dynamic linker characteristics]) -m4_if([$1], - [], [ -if test "$GCC" = yes; then - case $host_os in - darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; - *) lt_awk_arg="/^libraries:/" ;; - esac - case $host_os in - mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; - *) lt_sed_strip_eq="s,=/,/,g" ;; - esac - lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` - case $lt_search_path_spec in - *\;*) - # if the path contains ";" then we assume it to be the separator - # otherwise default to the standard path separator (i.e. ":") - it is - # assumed that no part of a normal pathname contains ";" but that should - # okay in the real world where ";" in dirpaths is itself problematic. - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` - ;; - *) - lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` - ;; - esac - # Ok, now we have the path, separated by spaces, we can step through it - # and add multilib dir if necessary. - lt_tmp_lt_search_path_spec= - lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` - for lt_sys_path in $lt_search_path_spec; do - if test -d "$lt_sys_path/$lt_multi_os_dir"; then - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" - else - test -d "$lt_sys_path" && \ - lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" - fi - done - lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' -BEGIN {RS=" "; FS="/|\n";} { - lt_foo=""; - lt_count=0; - for (lt_i = NF; lt_i > 0; lt_i--) { - if ($lt_i != "" && $lt_i != ".") { - if ($lt_i == "..") { - lt_count++; - } else { - if (lt_count == 0) { - lt_foo="/" $lt_i lt_foo; - } else { - lt_count--; - } - } - } - } - if (lt_foo != "") { lt_freq[[lt_foo]]++; } - if (lt_freq[[lt_foo]] == 1) { print lt_foo; } -}'` - # AWK program above erroneously prepends '/' to C:/dos/paths - # for these hosts. - case $host_os in - mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ - $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; - esac - sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` -else - sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" -fi]) -library_names_spec= -libname_spec='lib$name' -soname_spec= -shrext_cmds=".so" -postinstall_cmds= -postuninstall_cmds= -finish_cmds= -finish_eval= -shlibpath_var= -shlibpath_overrides_runpath=unknown -version_type=none -dynamic_linker="$host_os ld.so" -sys_lib_dlsearch_path_spec="/lib /usr/lib" -need_lib_prefix=unknown -hardcode_into_libs=no - -# when you set need_version to no, make sure it does not cause -set_version -# flags to be left without arguments -need_version=unknown - -case $host_os in -aix3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' - shlibpath_var=LIBPATH - - # AIX 3 has no versioning support, so we append a major version to the name. - soname_spec='${libname}${release}${shared_ext}$major' - ;; - -aix[[4-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - hardcode_into_libs=yes - if test "$host_cpu" = ia64; then - # AIX 5 supports IA64 - library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - else - # With GCC up to 2.95.x, collect2 would create an import file - # for dependence libraries. The import file would start with - # the line `#! .'. This would cause the generated library to - # depend on `.', always an invalid library. This was fixed in - # development snapshots of GCC prior to 3.0. - case $host_os in - aix4 | aix4.[[01]] | aix4.[[01]].*) - if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' - echo ' yes ' - echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then - : - else - can_build_shared=no - fi - ;; - esac - # AIX (on Power*) has no versioning support, so currently we can not hardcode correct - # soname into executable. Probably we can add versioning support to - # collect2, so additional links can be useful in future. - if test "$aix_use_runtimelinking" = yes; then - # If using run time linking (on AIX 4.2 or later) use lib.so - # instead of lib.a to let people know that these are not - # typical AIX shared libraries. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - else - # We preserve .a as extension for shared libraries through AIX4.2 - # and later when we are not doing run time linking. - library_names_spec='${libname}${release}.a $libname.a' - soname_spec='${libname}${release}${shared_ext}$major' - fi - shlibpath_var=LIBPATH - fi - ;; - -amigaos*) - case $host_cpu in - powerpc) - # Since July 2007 AmigaOS4 officially supports .so libraries. - # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - ;; - m68k) - library_names_spec='$libname.ixlibrary $libname.a' - # Create ${libname}_ixlibrary.a entries in /sys/libs. - finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' - ;; - esac - ;; - -beos*) - library_names_spec='${libname}${shared_ext}' - dynamic_linker="$host_os ld.so" - shlibpath_var=LIBRARY_PATH - ;; - -bsdi[[45]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" - sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" - # the default ld.so.conf also contains /usr/contrib/lib and - # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow - # libtool to hard-code these into programs - ;; - -cygwin* | mingw* | pw32* | cegcc*) - version_type=windows - shrext_cmds=".dll" - need_version=no - need_lib_prefix=no - - case $GCC,$cc_basename in - yes,*) - # gcc - library_names_spec='$libname.dll.a' - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname~ - chmod a+x \$dldir/$dlname~ - if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then - eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; - fi' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - - case $host_os in - cygwin*) - # Cygwin DLLs use 'cyg' prefix rather than 'lib' - soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) - ;; - mingw* | cegcc*) - # MinGW DLLs use traditional 'lib' prefix - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - pw32*) - # pw32 DLLs use 'pw' prefix rather than 'lib' - library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - ;; - esac - dynamic_linker='Win32 ld.exe' - ;; - - *,cl*) - # Native MSVC - libname_spec='$name' - soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' - library_names_spec='${libname}.dll.lib' - - case $build_os in - mingw*) - sys_lib_search_path_spec= - lt_save_ifs=$IFS - IFS=';' - for lt_path in $LIB - do - IFS=$lt_save_ifs - # Let DOS variable expansion print the short 8.3 style file name. - lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` - sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" - done - IFS=$lt_save_ifs - # Convert to MSYS style. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` - ;; - cygwin*) - # Convert to unix form, then to dos form, then back to unix form - # but this time dos style (no spaces!) so that the unix form looks - # like /cygdrive/c/PROGRA~1:/cygdr... - sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` - sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` - sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - ;; - *) - sys_lib_search_path_spec="$LIB" - if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then - # It is most probably a Windows format PATH. - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` - else - sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` - fi - # FIXME: find the short name or the path components, as spaces are - # common. (e.g. "Program Files" -> "PROGRA~1") - ;; - esac - - # DLL is installed to $(libdir)/../bin by postinstall_cmds - postinstall_cmds='base_file=`basename \${file}`~ - dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ - dldir=$destdir/`dirname \$dlpath`~ - test -d \$dldir || mkdir -p \$dldir~ - $install_prog $dir/$dlname \$dldir/$dlname' - postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ - dlpath=$dir/\$dldll~ - $RM \$dlpath' - shlibpath_overrides_runpath=yes - dynamic_linker='Win32 link.exe' - ;; - - *) - # Assume MSVC wrapper - library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' - dynamic_linker='Win32 ld.exe' - ;; - esac - # FIXME: first we should search . and the directory the executable is in - shlibpath_var=PATH - ;; - -darwin* | rhapsody*) - dynamic_linker="$host_os dyld" - version_type=darwin - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' - soname_spec='${libname}${release}${major}$shared_ext' - shlibpath_overrides_runpath=yes - shlibpath_var=DYLD_LIBRARY_PATH - shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' -m4_if([$1], [],[ - sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) - sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' - ;; - -dgux*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -freebsd* | dragonfly*) - # DragonFly does not have aout. When/if they implement a new - # versioning mechanism, adjust this. - if test -x /usr/bin/objformat; then - objformat=`/usr/bin/objformat` - else - case $host_os in - freebsd[[23]].*) objformat=aout ;; - *) objformat=elf ;; - esac - fi - version_type=freebsd-$objformat - case $version_type in - freebsd-elf*) - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - need_version=no - need_lib_prefix=no - ;; - freebsd-*) - library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' - need_version=yes - ;; - esac - shlibpath_var=LD_LIBRARY_PATH - case $host_os in - freebsd2.*) - shlibpath_overrides_runpath=yes - ;; - freebsd3.[[01]]* | freebsdelf3.[[01]]*) - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ - freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - *) # from 4.6 on, and DragonFly - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - esac - ;; - -gnu*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -haiku*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - dynamic_linker="$host_os runtime_loader" - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LIBRARY_PATH - shlibpath_overrides_runpath=yes - sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' - hardcode_into_libs=yes - ;; - -hpux9* | hpux10* | hpux11*) - # Give a soname corresponding to the major version so that dld.sl refuses to - # link against other versions. - version_type=sunos - need_lib_prefix=no - need_version=no - case $host_cpu in - ia64*) - shrext_cmds='.so' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.so" - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - if test "X$HPUX_IA64_MODE" = X32; then - sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" - else - sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" - fi - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - hppa*64*) - shrext_cmds='.sl' - hardcode_into_libs=yes - dynamic_linker="$host_os dld.sl" - shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH - shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" - sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec - ;; - *) - shrext_cmds='.sl' - dynamic_linker="$host_os dld.sl" - shlibpath_var=SHLIB_PATH - shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - ;; - esac - # HP-UX runs *really* slowly unless shared libraries are mode 555, ... - postinstall_cmds='chmod 555 $lib' - # or fails outright, so override atomically: - install_override_mode=555 - ;; - -interix[[3-9]]*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -irix5* | irix6* | nonstopux*) - case $host_os in - nonstopux*) version_type=nonstopux ;; - *) - if test "$lt_cv_prog_gnu_ld" = yes; then - version_type=linux # correct to gnu/linux during the next big refactor - else - version_type=irix - fi ;; - esac - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' - case $host_os in - irix5* | nonstopux*) - libsuff= shlibsuff= - ;; - *) - case $LD in # libtool.m4 will add one of these switches to LD - *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") - libsuff= shlibsuff= libmagic=32-bit;; - *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") - libsuff=32 shlibsuff=N32 libmagic=N32;; - *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") - libsuff=64 shlibsuff=64 libmagic=64-bit;; - *) libsuff= shlibsuff= libmagic=never-match;; - esac - ;; - esac - shlibpath_var=LD_LIBRARY${shlibsuff}_PATH - shlibpath_overrides_runpath=no - sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" - sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" - hardcode_into_libs=yes - ;; - -# No shared lib support for Linux oldld, aout, or coff. -linux*oldld* | linux*aout* | linux*coff*) - dynamic_linker=no - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - - # Some binutils ld are patched to set DT_RUNPATH - AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], - [lt_cv_shlibpath_overrides_runpath=no - save_LDFLAGS=$LDFLAGS - save_libdir=$libdir - eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ - LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" - AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], - [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], - [lt_cv_shlibpath_overrides_runpath=yes])]) - LDFLAGS=$save_LDFLAGS - libdir=$save_libdir - ]) - shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath - - # This implies no fast_install, which is unacceptable. - # Some rework will be needed to allow for fast_install - # before this can be enabled. - hardcode_into_libs=yes - - # Append ld.so.conf contents to the search path - if test -f /etc/ld.so.conf; then - lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` - sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" - fi - - # We used to test for /lib/ld.so.1 and disable shared libraries on - # powerpc, because MkLinux only supported shared libraries with the - # GNU dynamic linker. Since this was broken with cross compilers, - # most powerpc-linux boxes support dynamic linking these days and - # people can always --disable-shared, the test was removed, and we - # assume the GNU/Linux dynamic linker is in use. - dynamic_linker='GNU/Linux ld.so' - ;; - -netbsd*) - version_type=sunos - need_lib_prefix=no - need_version=no - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - dynamic_linker='NetBSD (a.out) ld.so' - else - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - dynamic_linker='NetBSD ld.elf_so' - fi - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - ;; - -newsos6) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - ;; - -*nto* | *qnx*) - version_type=qnx - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - dynamic_linker='ldqnx.so' - ;; - -openbsd*) - version_type=sunos - sys_lib_dlsearch_path_spec="/usr/lib" - need_lib_prefix=no - # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. - case $host_os in - openbsd3.3 | openbsd3.3.*) need_version=yes ;; - *) need_version=no ;; - esac - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' - shlibpath_var=LD_LIBRARY_PATH - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - case $host_os in - openbsd2.[[89]] | openbsd2.[[89]].*) - shlibpath_overrides_runpath=no - ;; - *) - shlibpath_overrides_runpath=yes - ;; - esac - else - shlibpath_overrides_runpath=yes - fi - ;; - -os2*) - libname_spec='$name' - shrext_cmds=".dll" - need_lib_prefix=no - library_names_spec='$libname${shared_ext} $libname.a' - dynamic_linker='OS/2 ld.exe' - shlibpath_var=LIBPATH - ;; - -osf3* | osf4* | osf5*) - version_type=osf - need_lib_prefix=no - need_version=no - soname_spec='${libname}${release}${shared_ext}$major' - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" - sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" - ;; - -rdos*) - dynamic_linker=no - ;; - -solaris*) - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - # ldd complains unless libraries are executable - postinstall_cmds='chmod +x $lib' - ;; - -sunos4*) - version_type=sunos - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' - finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - if test "$with_gnu_ld" = yes; then - need_lib_prefix=no - fi - need_version=yes - ;; - -sysv4 | sysv4.3*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - case $host_vendor in - sni) - shlibpath_overrides_runpath=no - need_lib_prefix=no - runpath_var=LD_RUN_PATH - ;; - siemens) - need_lib_prefix=no - ;; - motorola) - need_lib_prefix=no - need_version=no - shlibpath_overrides_runpath=no - sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' - ;; - esac - ;; - -sysv4*MP*) - if test -d /usr/nec ;then - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' - soname_spec='$libname${shared_ext}.$major' - shlibpath_var=LD_LIBRARY_PATH - fi - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - version_type=freebsd-elf - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=yes - hardcode_into_libs=yes - if test "$with_gnu_ld" = yes; then - sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' - else - sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' - case $host_os in - sco3.2v5*) - sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" - ;; - esac - fi - sys_lib_dlsearch_path_spec='/usr/lib' - ;; - -tpf*) - # TPF is a cross-target only. Preferred cross-host = GNU/Linux. - version_type=linux # correct to gnu/linux during the next big refactor - need_lib_prefix=no - need_version=no - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - shlibpath_var=LD_LIBRARY_PATH - shlibpath_overrides_runpath=no - hardcode_into_libs=yes - ;; - -uts4*) - version_type=linux # correct to gnu/linux during the next big refactor - library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' - soname_spec='${libname}${release}${shared_ext}$major' - shlibpath_var=LD_LIBRARY_PATH - ;; - -*) - dynamic_linker=no - ;; -esac -AC_MSG_RESULT([$dynamic_linker]) -test "$dynamic_linker" = no && can_build_shared=no - -variables_saved_for_relink="PATH $shlibpath_var $runpath_var" -if test "$GCC" = yes; then - variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" -fi - -if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then - sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" -fi -if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then - sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" -fi - -_LT_DECL([], [variables_saved_for_relink], [1], - [Variables whose values should be saved in libtool wrapper scripts and - restored at link time]) -_LT_DECL([], [need_lib_prefix], [0], - [Do we need the "lib" prefix for modules?]) -_LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) -_LT_DECL([], [version_type], [0], [Library versioning type]) -_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) -_LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) -_LT_DECL([], [shlibpath_overrides_runpath], [0], - [Is shlibpath searched before the hard-coded library search path?]) -_LT_DECL([], [libname_spec], [1], [Format of library name prefix]) -_LT_DECL([], [library_names_spec], [1], - [[List of archive names. First name is the real one, the rest are links. - The last name is the one that the linker finds with -lNAME]]) -_LT_DECL([], [soname_spec], [1], - [[The coded name of the library, if different from the real name]]) -_LT_DECL([], [install_override_mode], [1], - [Permission mode override for installation of shared libraries]) -_LT_DECL([], [postinstall_cmds], [2], - [Command to use after installation of a shared archive]) -_LT_DECL([], [postuninstall_cmds], [2], - [Command to use after uninstallation of a shared archive]) -_LT_DECL([], [finish_cmds], [2], - [Commands used to finish a libtool library installation in a directory]) -_LT_DECL([], [finish_eval], [1], - [[As "finish_cmds", except a single script fragment to be evaled but - not shown]]) -_LT_DECL([], [hardcode_into_libs], [0], - [Whether we should hardcode library paths into libraries]) -_LT_DECL([], [sys_lib_search_path_spec], [2], - [Compile-time system search path for libraries]) -_LT_DECL([], [sys_lib_dlsearch_path_spec], [2], - [Run-time system search path for libraries]) -])# _LT_SYS_DYNAMIC_LINKER - - -# _LT_PATH_TOOL_PREFIX(TOOL) -# -------------------------- -# find a file program which can recognize shared library -AC_DEFUN([_LT_PATH_TOOL_PREFIX], -[m4_require([_LT_DECL_EGREP])dnl -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, -[case $MAGIC_CMD in -[[\\/*] | ?:[\\/]*]) - lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. - ;; -*) - lt_save_MAGIC_CMD="$MAGIC_CMD" - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="m4_if([$2], , $PATH, [$2])" - for ac_dir in $ac_dummy; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$1; then - lt_cv_path_MAGIC_CMD="$ac_dir/$1" - if test -n "$file_magic_test_file"; then - case $deplibs_check_method in - "file_magic "*) - file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` - MAGIC_CMD="$lt_cv_path_MAGIC_CMD" - if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | - $EGREP "$file_magic_regex" > /dev/null; then - : - else - cat <<_LT_EOF 1>&2 - -*** Warning: the command libtool uses to detect shared libraries, -*** $file_magic_cmd, produces output that libtool cannot recognize. -*** The result is that libtool may fail to recognize shared libraries -*** as such. This will affect the creation of libtool libraries that -*** depend on shared libraries, but programs linked with such libtool -*** libraries will work regardless of this problem. Nevertheless, you -*** may want to report the problem to your system manager and/or to -*** bug-libtool@gnu.org - -_LT_EOF - fi ;; - esac - fi - break - fi - done - IFS="$lt_save_ifs" - MAGIC_CMD="$lt_save_MAGIC_CMD" - ;; -esac]) -MAGIC_CMD="$lt_cv_path_MAGIC_CMD" -if test -n "$MAGIC_CMD"; then - AC_MSG_RESULT($MAGIC_CMD) -else - AC_MSG_RESULT(no) -fi -_LT_DECL([], [MAGIC_CMD], [0], - [Used to examine libraries when file_magic_cmd begins with "file"])dnl -])# _LT_PATH_TOOL_PREFIX - -# Old name: -AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) - - -# _LT_PATH_MAGIC -# -------------- -# find a file program which can recognize a shared library -m4_defun([_LT_PATH_MAGIC], -[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) -if test -z "$lt_cv_path_MAGIC_CMD"; then - if test -n "$ac_tool_prefix"; then - _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) - else - MAGIC_CMD=: - fi -fi -])# _LT_PATH_MAGIC - - -# LT_PATH_LD -# ---------- -# find the pathname to the GNU or non-GNU linker -AC_DEFUN([LT_PATH_LD], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PROG_ECHO_BACKSLASH])dnl - -AC_ARG_WITH([gnu-ld], - [AS_HELP_STRING([--with-gnu-ld], - [assume the C compiler uses GNU ld @<:@default=no@:>@])], - [test "$withval" = no || with_gnu_ld=yes], - [with_gnu_ld=no])dnl - -ac_prog=ld -if test "$GCC" = yes; then - # Check if gcc -print-prog-name=ld gives a path. - AC_MSG_CHECKING([for ld used by $CC]) - case $host in - *-*-mingw*) - # gcc leaves a trailing carriage return which upsets mingw - ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; - *) - ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; - esac - case $ac_prog in - # Accept absolute paths. - [[\\/]]* | ?:[[\\/]]*) - re_direlt='/[[^/]][[^/]]*/\.\./' - # Canonicalize the pathname of ld - ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` - while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do - ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` - done - test -z "$LD" && LD="$ac_prog" - ;; - "") - # If it fails, then pretend we aren't using GCC. - ac_prog=ld - ;; - *) - # If it is relative, then search for the first ld in PATH. - with_gnu_ld=unknown - ;; - esac -elif test "$with_gnu_ld" = yes; then - AC_MSG_CHECKING([for GNU ld]) -else - AC_MSG_CHECKING([for non-GNU ld]) -fi -AC_CACHE_VAL(lt_cv_path_LD, -[if test -z "$LD"; then - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then - lt_cv_path_LD="$ac_dir/$ac_prog" - # Check to see if the program is GNU ld. I'd rather use --version, - # but apparently some variants of GNU ld only accept -v. - # Break only if it was the GNU/non-GNU ld that we prefer. - case `"$lt_cv_path_LD" -v 2>&1 &1 /dev/null 2>&1; then - lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' - lt_cv_file_magic_cmd='func_win32_libid' - else - # Keep this pattern in sync with the one in func_win32_libid. - lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' - lt_cv_file_magic_cmd='$OBJDUMP -f' - fi - ;; - -cegcc*) - # use the weaker test based on 'objdump'. See mingw*. - lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' - lt_cv_file_magic_cmd='$OBJDUMP -f' - ;; - -darwin* | rhapsody*) - lt_cv_deplibs_check_method=pass_all - ;; - -freebsd* | dragonfly*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - case $host_cpu in - i*86 ) - # Not sure whether the presence of OpenBSD here was a mistake. - # Let's accept both of them until this is cleared up. - lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` - ;; - esac - else - lt_cv_deplibs_check_method=pass_all - fi - ;; - -gnu*) - lt_cv_deplibs_check_method=pass_all - ;; - -haiku*) - lt_cv_deplibs_check_method=pass_all - ;; - -hpux10.20* | hpux11*) - lt_cv_file_magic_cmd=/usr/bin/file - case $host_cpu in - ia64*) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' - lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so - ;; - hppa*64*) - [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] - lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl - ;; - *) - lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' - lt_cv_file_magic_test_file=/usr/lib/libc.sl - ;; - esac - ;; - -interix[[3-9]]*) - # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' - ;; - -irix5* | irix6* | nonstopux*) - case $LD in - *-32|*"-32 ") libmagic=32-bit;; - *-n32|*"-n32 ") libmagic=N32;; - *-64|*"-64 ") libmagic=64-bit;; - *) libmagic=never-match;; - esac - lt_cv_deplibs_check_method=pass_all - ;; - -# This must be glibc/ELF. -linux* | k*bsd*-gnu | kopensolaris*-gnu) - lt_cv_deplibs_check_method=pass_all - ;; - -netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' - fi - ;; - -newos6*) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' - lt_cv_file_magic_cmd=/usr/bin/file - lt_cv_file_magic_test_file=/usr/lib/libnls.so - ;; - -*nto* | *qnx*) - lt_cv_deplibs_check_method=pass_all - ;; - -openbsd*) - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' - else - lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' - fi - ;; - -osf3* | osf4* | osf5*) - lt_cv_deplibs_check_method=pass_all - ;; - -rdos*) - lt_cv_deplibs_check_method=pass_all - ;; - -solaris*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) - lt_cv_deplibs_check_method=pass_all - ;; - -sysv4 | sysv4.3*) - case $host_vendor in - motorola) - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' - lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` - ;; - ncr) - lt_cv_deplibs_check_method=pass_all - ;; - sequent) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' - ;; - sni) - lt_cv_file_magic_cmd='/bin/file' - lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" - lt_cv_file_magic_test_file=/lib/libc.so - ;; - siemens) - lt_cv_deplibs_check_method=pass_all - ;; - pc) - lt_cv_deplibs_check_method=pass_all - ;; - esac - ;; - -tpf*) - lt_cv_deplibs_check_method=pass_all - ;; -esac -]) - -file_magic_glob= -want_nocaseglob=no -if test "$build" = "$host"; then - case $host_os in - mingw* | pw32*) - if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then - want_nocaseglob=yes - else - file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` - fi - ;; - esac -fi - -file_magic_cmd=$lt_cv_file_magic_cmd -deplibs_check_method=$lt_cv_deplibs_check_method -test -z "$deplibs_check_method" && deplibs_check_method=unknown - -_LT_DECL([], [deplibs_check_method], [1], - [Method to check whether dependent libraries are shared objects]) -_LT_DECL([], [file_magic_cmd], [1], - [Command to use when deplibs_check_method = "file_magic"]) -_LT_DECL([], [file_magic_glob], [1], - [How to find potential files when deplibs_check_method = "file_magic"]) -_LT_DECL([], [want_nocaseglob], [1], - [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) -])# _LT_CHECK_MAGIC_METHOD - - -# LT_PATH_NM -# ---------- -# find the pathname to a BSD- or MS-compatible name lister -AC_DEFUN([LT_PATH_NM], -[AC_REQUIRE([AC_PROG_CC])dnl -AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, -[if test -n "$NM"; then - # Let the user override the test. - lt_cv_path_NM="$NM" -else - lt_nm_to_check="${ac_tool_prefix}nm" - if test -n "$ac_tool_prefix" && test "$build" = "$host"; then - lt_nm_to_check="$lt_nm_to_check nm" - fi - for lt_tmp_nm in $lt_nm_to_check; do - lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR - for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do - IFS="$lt_save_ifs" - test -z "$ac_dir" && ac_dir=. - tmp_nm="$ac_dir/$lt_tmp_nm" - if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then - # Check to see if the nm accepts a BSD-compat flag. - # Adding the `sed 1q' prevents false positives on HP-UX, which says: - # nm: unknown option "B" ignored - # Tru64's nm complains that /dev/null is an invalid object file - case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in - */dev/null* | *'Invalid file or object type'*) - lt_cv_path_NM="$tmp_nm -B" - break - ;; - *) - case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in - */dev/null*) - lt_cv_path_NM="$tmp_nm -p" - break - ;; - *) - lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but - continue # so that we can try to find one that supports BSD flags - ;; - esac - ;; - esac - fi - done - IFS="$lt_save_ifs" - done - : ${lt_cv_path_NM=no} -fi]) -if test "$lt_cv_path_NM" != "no"; then - NM="$lt_cv_path_NM" -else - # Didn't find any BSD compatible name lister, look for dumpbin. - if test -n "$DUMPBIN"; then : - # Let the user override the test. - else - AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) - case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in - *COFF*) - DUMPBIN="$DUMPBIN -symbols" - ;; - *) - DUMPBIN=: - ;; - esac - fi - AC_SUBST([DUMPBIN]) - if test "$DUMPBIN" != ":"; then - NM="$DUMPBIN" - fi -fi -test -z "$NM" && NM=nm -AC_SUBST([NM]) -_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl - -AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], - [lt_cv_nm_interface="BSD nm" - echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) - (eval "$ac_compile" 2>conftest.err) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) - (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) - cat conftest.err >&AS_MESSAGE_LOG_FD - (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) - cat conftest.out >&AS_MESSAGE_LOG_FD - if $GREP 'External.*some_variable' conftest.out > /dev/null; then - lt_cv_nm_interface="MS dumpbin" - fi - rm -f conftest*]) -])# LT_PATH_NM - -# Old names: -AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) -AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_PROG_NM], []) -dnl AC_DEFUN([AC_PROG_NM], []) - -# _LT_CHECK_SHAREDLIB_FROM_LINKLIB -# -------------------------------- -# how to determine the name of the shared library -# associated with a specific link library. -# -- PORTME fill in with the dynamic library characteristics -m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], -[m4_require([_LT_DECL_EGREP]) -m4_require([_LT_DECL_OBJDUMP]) -m4_require([_LT_DECL_DLLTOOL]) -AC_CACHE_CHECK([how to associate runtime and link libraries], -lt_cv_sharedlib_from_linklib_cmd, -[lt_cv_sharedlib_from_linklib_cmd='unknown' - -case $host_os in -cygwin* | mingw* | pw32* | cegcc*) - # two different shell functions defined in ltmain.sh - # decide which to use based on capabilities of $DLLTOOL - case `$DLLTOOL --help 2>&1` in - *--identify-strict*) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib - ;; - *) - lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback - ;; - esac - ;; -*) - # fallback: assume linklib IS sharedlib - lt_cv_sharedlib_from_linklib_cmd="$ECHO" - ;; -esac -]) -sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd -test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO - -_LT_DECL([], [sharedlib_from_linklib_cmd], [1], - [Command to associate shared and link libraries]) -])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB - - -# _LT_PATH_MANIFEST_TOOL -# ---------------------- -# locate the manifest tool -m4_defun([_LT_PATH_MANIFEST_TOOL], -[AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) -test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt -AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], - [lt_cv_path_mainfest_tool=no - echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD - $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out - cat conftest.err >&AS_MESSAGE_LOG_FD - if $GREP 'Manifest Tool' conftest.out > /dev/null; then - lt_cv_path_mainfest_tool=yes - fi - rm -f conftest*]) -if test "x$lt_cv_path_mainfest_tool" != xyes; then - MANIFEST_TOOL=: -fi -_LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl -])# _LT_PATH_MANIFEST_TOOL - - -# LT_LIB_M -# -------- -# check for math library -AC_DEFUN([LT_LIB_M], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -LIBM= -case $host in -*-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) - # These system don't have libm, or don't need it - ;; -*-ncr-sysv4.3*) - AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") - AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") - ;; -*) - AC_CHECK_LIB(m, cos, LIBM="-lm") - ;; -esac -AC_SUBST([LIBM]) -])# LT_LIB_M - -# Old name: -AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_CHECK_LIBM], []) - - -# _LT_COMPILER_NO_RTTI([TAGNAME]) -# ------------------------------- -m4_defun([_LT_COMPILER_NO_RTTI], -[m4_require([_LT_TAG_COMPILER])dnl - -_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - -if test "$GCC" = yes; then - case $cc_basename in - nvcc*) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; - *) - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; - esac - - _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], - lt_cv_prog_compiler_rtti_exceptions, - [-fno-rtti -fno-exceptions], [], - [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) -fi -_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], - [Compiler flag to turn off builtin functions]) -])# _LT_COMPILER_NO_RTTI - - -# _LT_CMD_GLOBAL_SYMBOLS -# ---------------------- -m4_defun([_LT_CMD_GLOBAL_SYMBOLS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_AWK])dnl -AC_REQUIRE([LT_PATH_NM])dnl -AC_REQUIRE([LT_PATH_LD])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_TAG_COMPILER])dnl - -# Check for command to grab the raw symbol name followed by C symbol from nm. -AC_MSG_CHECKING([command to parse $NM output from $compiler object]) -AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], -[ -# These are sane defaults that work on at least a few old systems. -# [They come from Ultrix. What could be older than Ultrix?!! ;)] - -# Character class describing NM global symbol codes. -symcode='[[BCDEGRST]]' - -# Regexp to match symbols that can be accessed directly from C. -sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' - -# Define system-specific variables. -case $host_os in -aix*) - symcode='[[BCDT]]' - ;; -cygwin* | mingw* | pw32* | cegcc*) - symcode='[[ABCDGISTW]]' - ;; -hpux*) - if test "$host_cpu" = ia64; then - symcode='[[ABCDEGRST]]' - fi - ;; -irix* | nonstopux*) - symcode='[[BCDEGRST]]' - ;; -osf*) - symcode='[[BCDEGQRST]]' - ;; -solaris*) - symcode='[[BDRT]]' - ;; -sco3.2v5*) - symcode='[[DT]]' - ;; -sysv4.2uw2*) - symcode='[[DT]]' - ;; -sysv5* | sco5v6* | unixware* | OpenUNIX*) - symcode='[[ABDT]]' - ;; -sysv4) - symcode='[[DFNSTU]]' - ;; -esac - -# If we're using GNU nm, then use its standard symbol codes. -case `$NM -V 2>&1` in -*GNU* | *'with BFD'*) - symcode='[[ABCDGIRSTW]]' ;; -esac - -# Transform an extracted symbol line into a proper C declaration. -# Some systems (esp. on ia64) link data and code symbols differently, -# so use this general approach. -lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" - -# Transform an extracted symbol line into symbol name and symbol address -lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'" -lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\)[[ ]]*$/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'" - -# Handle CRLF in mingw tool chain -opt_cr= -case $build_os in -mingw*) - opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp - ;; -esac - -# Try without a prefix underscore, then with it. -for ac_symprfx in "" "_"; do - - # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. - symxfrm="\\1 $ac_symprfx\\2 \\2" - - # Write the raw and C identifiers. - if test "$lt_cv_nm_interface" = "MS dumpbin"; then - # Fake it for dumpbin and say T for any non-static function - # and D for any global variable. - # Also find C++ and __fastcall symbols from MSVC++, - # which start with @ or ?. - lt_cv_sys_global_symbol_pipe="$AWK ['"\ -" {last_section=section; section=\$ 3};"\ -" /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ -" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ -" \$ 0!~/External *\|/{next};"\ -" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ -" {if(hide[section]) next};"\ -" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ -" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ -" s[1]~/^[@?]/{print s[1], s[1]; next};"\ -" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ -" ' prfx=^$ac_symprfx]" - else - lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" - fi - lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" - - # Check to see that the pipe works correctly. - pipe_works=no - - rm -f conftest* - cat > conftest.$ac_ext <<_LT_EOF -#ifdef __cplusplus -extern "C" { -#endif -char nm_test_var; -void nm_test_func(void); -void nm_test_func(void){} -#ifdef __cplusplus -} -#endif -int main(){nm_test_var='a';nm_test_func();return(0);} -_LT_EOF - - if AC_TRY_EVAL(ac_compile); then - # Now try to grab the symbols. - nlist=conftest.nm - if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then - # Try sorting and uniquifying the output. - if sort "$nlist" | uniq > "$nlist"T; then - mv -f "$nlist"T "$nlist" - else - rm -f "$nlist"T - fi - - # Make sure that we snagged all the symbols we need. - if $GREP ' nm_test_var$' "$nlist" >/dev/null; then - if $GREP ' nm_test_func$' "$nlist" >/dev/null; then - cat <<_LT_EOF > conftest.$ac_ext -/* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) -/* DATA imports from DLLs on WIN32 con't be const, because runtime - relocations are performed -- see ld's documentation on pseudo-relocs. */ -# define LT@&t@_DLSYM_CONST -#elif defined(__osf__) -/* This system does not cope well with relocations in const data. */ -# define LT@&t@_DLSYM_CONST -#else -# define LT@&t@_DLSYM_CONST const -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -_LT_EOF - # Now generate the symbol file. - eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' - - cat <<_LT_EOF >> conftest.$ac_ext - -/* The mapping between symbol names and symbols. */ -LT@&t@_DLSYM_CONST struct { - const char *name; - void *address; -} -lt__PROGRAM__LTX_preloaded_symbols[[]] = -{ - { "@PROGRAM@", (void *) 0 }, -_LT_EOF - $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext - cat <<\_LT_EOF >> conftest.$ac_ext - {0, (void *) 0} -}; - -/* This works around a problem in FreeBSD linker */ -#ifdef FREEBSD_WORKAROUND -static const void *lt_preloaded_setup() { - return lt__PROGRAM__LTX_preloaded_symbols; -} -#endif - -#ifdef __cplusplus -} -#endif -_LT_EOF - # Now try linking the two files. - mv conftest.$ac_objext conftstm.$ac_objext - lt_globsym_save_LIBS=$LIBS - lt_globsym_save_CFLAGS=$CFLAGS - LIBS="conftstm.$ac_objext" - CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" - if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - pipe_works=yes - fi - LIBS=$lt_globsym_save_LIBS - CFLAGS=$lt_globsym_save_CFLAGS - else - echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD - fi - else - echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD - fi - else - echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD - cat conftest.$ac_ext >&5 - fi - rm -rf conftest* conftst* - - # Do not use the global_symbol_pipe unless it works. - if test "$pipe_works" = yes; then - break - else - lt_cv_sys_global_symbol_pipe= - fi -done -]) -if test -z "$lt_cv_sys_global_symbol_pipe"; then - lt_cv_sys_global_symbol_to_cdecl= -fi -if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then - AC_MSG_RESULT(failed) -else - AC_MSG_RESULT(ok) -fi - -# Response file support. -if test "$lt_cv_nm_interface" = "MS dumpbin"; then - nm_file_list_spec='@' -elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then - nm_file_list_spec='@' -fi - -_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], - [Take the output of nm and produce a listing of raw symbols and C names]) -_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], - [Transform the output of nm in a proper C declaration]) -_LT_DECL([global_symbol_to_c_name_address], - [lt_cv_sys_global_symbol_to_c_name_address], [1], - [Transform the output of nm in a C name address pair]) -_LT_DECL([global_symbol_to_c_name_address_lib_prefix], - [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], - [Transform the output of nm in a C name address pair when lib prefix is needed]) -_LT_DECL([], [nm_file_list_spec], [1], - [Specify filename containing input files for $NM]) -]) # _LT_CMD_GLOBAL_SYMBOLS - - -# _LT_COMPILER_PIC([TAGNAME]) -# --------------------------- -m4_defun([_LT_COMPILER_PIC], -[m4_require([_LT_TAG_COMPILER])dnl -_LT_TAGVAR(lt_prog_compiler_wl, $1)= -_LT_TAGVAR(lt_prog_compiler_pic, $1)= -_LT_TAGVAR(lt_prog_compiler_static, $1)= - -m4_if([$1], [CXX], [ - # C++ specific cases for pic, static, wl, etc. - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - *djgpp*) - # DJGPP does not support shared libraries at all - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - else - case $host_os in - aix[[4-9]]*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - chorus*) - case $cc_basename in - cxch68*) - # Green Hills C++ Compiler - # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" - ;; - esac - ;; - mingw* | cygwin* | os2* | pw32* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - dgux*) - case $cc_basename in - ec++*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - ghcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - freebsd* | dragonfly*) - # FreeBSD uses GNU C++ - ;; - hpux9* | hpux10* | hpux11*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - if test "$host_cpu" != ia64; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - fi - ;; - aCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - ;; - *) - ;; - esac - ;; - interix*) - # This is c89, which is MS Visual C++ (no shared libs) - # Anyone wants to do a port? - ;; - irix5* | irix6* | nonstopux*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - # CC pic flag -KPIC is the default. - ;; - *) - ;; - esac - ;; - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # KAI C++ Compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - ecpc* ) - # old Intel C++ for x86_64 which still supported -KPIC. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - icpc* ) - # Intel C++, used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - cxx*) - # Compaq C++ - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) - # IBM XL 8.0, 9.0 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - esac - ;; - esac - ;; - lynxos*) - ;; - m88k*) - ;; - mvs*) - case $cc_basename in - cxx*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' - ;; - *) - ;; - esac - ;; - netbsd*) - ;; - *qnx* | *nto*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' - ;; - RCC*) - # Rational C++ 2.4.1 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - cxx*) - # Digital/Compaq C++ - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # Make sure the PIC flag is empty. It appears that all Alpha - # Linux and Compaq Tru64 Unix objects are PIC. - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - *) - ;; - esac - ;; - psos*) - ;; - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - ;; - *) - ;; - esac - ;; - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - lcc*) - # Lucid - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - ;; - *) - ;; - esac - ;; - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - case $cc_basename in - CC*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - ;; - *) - ;; - esac - ;; - vxworks*) - ;; - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -], -[ - if test "$GCC" = yes; then - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - - case $host_os in - aix*) - # All AIX code is PIC. - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - m68k) - # FIXME: we need at least 68020 code to build shared libraries, but - # adding the `-m68020' flag to GCC prevents building anything better, - # like `-m68040'. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' - ;; - esac - ;; - - beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) - # PIC is the default for these OSes. - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - # Although the cygwin gcc ignores -fPIC, still need this for old-style - # (--disable-auto-import) libraries - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - darwin* | rhapsody*) - # PIC is the default on this platform - # Common symbols not allowed in MH_DYLIB files - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' - ;; - - haiku*) - # PIC is the default for Haiku. - # The "-static" flag exists, but is broken. - _LT_TAGVAR(lt_prog_compiler_static, $1)= - ;; - - hpux*) - # PIC is the default for 64-bit PA HP-UX, but not for 32-bit - # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag - # sets the default TLS model and affects inlining. - case $host_cpu in - hppa*64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - ;; - - interix[[3-9]]*) - # Interix 3.x gcc -fpic/-fPIC options generate broken code. - # Instead, we relocate shared libraries at runtime. - ;; - - msdosdjgpp*) - # Just because we use GCC doesn't mean we suddenly get shared libraries - # on systems that don't support them. - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - enable_shared=no - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic - fi - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - ;; - esac - - case $cc_basename in - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' - if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" - fi - ;; - esac - else - # PORTME Check for flag to pass linker flags through the system compiler. - case $host_os in - aix*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - if test "$host_cpu" = ia64; then - # AIX 5 now supports IA64 processor - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - else - _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' - fi - ;; - - mingw* | cygwin* | pw32* | os2* | cegcc*) - # This hack is so that the source file can tell whether it is being - # built for inclusion in a dll (and should export symbols for example). - m4_if([$1], [GCJ], [], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) - ;; - - hpux9* | hpux10* | hpux11*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but - # not for PA HP-UX. - case $host_cpu in - hppa*64*|ia64*) - # +Z the default - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' - ;; - esac - # Is there a better lt_prog_compiler_static that works with the bundled CC? - _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' - ;; - - irix5* | irix6* | nonstopux*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # PIC (with -KPIC) is the default. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - # old Intel for x86_64 which still supported -KPIC. - ecc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # icc used to be incompatible with GCC. - # ICC 10 doesn't accept -KPIC any more. - icc* | ifort*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - # Lahey Fortran 8.1. - lf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' - _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' - ;; - nagfor*) - # NAG Fortran compiler - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group compilers (*not* the Pentium gcc compiler, - # which looks to be a dead project) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - ccc*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All Alpha code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - xl* | bgxl* | bgf* | mpixl*) - # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) - # Sun Fortran 8.3 passes all unrecognized flags to the linker - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='' - ;; - *Sun\ F* | *Sun*Fortran*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - ;; - *Sun\ C*) - # Sun C 5.9 - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - ;; - *Intel*\ [[CF]]*Compiler*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' - ;; - *Portland\ Group*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - esac - ;; - esac - ;; - - newsos6) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *nto* | *qnx*) - # QNX uses GNU C++, but need to define -shared option too, otherwise - # it will coredump. - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' - ;; - - osf3* | osf4* | osf5*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - # All OSF/1 code is PIC. - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - rdos*) - _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' - ;; - - solaris*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - case $cc_basename in - f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; - *) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; - esac - ;; - - sunos4*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4 | sysv4.2uw2* | sysv4.3*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - sysv4*MP*) - if test -d /usr/nec ;then - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - fi - ;; - - sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - unicos*) - _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - - uts4*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' - _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' - ;; - - *) - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no - ;; - esac - fi -]) -case $host_os in - # For platforms which do not support PIC, -DPIC is meaningless: - *djgpp*) - _LT_TAGVAR(lt_prog_compiler_pic, $1)= - ;; - *) - _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" - ;; -esac - -AC_CACHE_CHECK([for $compiler option to produce PIC], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], - [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) -_LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) - -# -# Check to make sure the PIC flag actually works. -# -if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then - _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], - [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], - [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], - [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in - "" | " "*) ;; - *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; - esac], - [_LT_TAGVAR(lt_prog_compiler_pic, $1)= - _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) -fi -_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], - [Additional compiler flags for building library objects]) - -_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], - [How to pass a linker flag through the compiler]) -# -# Check to make sure the static flag actually works. -# -wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" -_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], - _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), - $lt_tmp_static_flag, - [], - [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) -_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], - [Compiler flag to prevent dynamic linking]) -])# _LT_COMPILER_PIC - - -# _LT_LINKER_SHLIBS([TAGNAME]) -# ---------------------------- -# See if the linker supports building shared libraries. -m4_defun([_LT_LINKER_SHLIBS], -[AC_REQUIRE([LT_PATH_LD])dnl -AC_REQUIRE([LT_PATH_NM])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_DECL_SED])dnl -m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl -m4_require([_LT_TAG_COMPILER])dnl -AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) -m4_if([$1], [CXX], [ - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - case $host_os in - aix[[4-9]]*) - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global defined - # symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - ;; - pw32*) - _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" - ;; - cygwin* | mingw* | cegcc*) - case $cc_basename in - cl*) - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - ;; - esac - ;; - *) - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - ;; - esac -], [ - runpath_var= - _LT_TAGVAR(allow_undefined_flag, $1)= - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(archive_cmds, $1)= - _LT_TAGVAR(archive_expsym_cmds, $1)= - _LT_TAGVAR(compiler_needs_object, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(hardcode_automatic, $1)=no - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(hardcode_libdir_separator, $1)= - _LT_TAGVAR(hardcode_minus_L, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported - _LT_TAGVAR(inherit_rpath, $1)=no - _LT_TAGVAR(link_all_deplibs, $1)=unknown - _LT_TAGVAR(module_cmds, $1)= - _LT_TAGVAR(module_expsym_cmds, $1)= - _LT_TAGVAR(old_archive_from_new_cmds, $1)= - _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= - _LT_TAGVAR(thread_safe_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - # include_expsyms should be a list of space-separated symbols to be *always* - # included in the symbol list - _LT_TAGVAR(include_expsyms, $1)= - # exclude_expsyms can be an extended regexp of symbols to exclude - # it will be wrapped by ` (' and `)$', so one must not match beginning or - # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', - # as well as any symbol that contains `d'. - _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] - # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out - # platforms (ab)use it in PIC code, but their linkers get confused if - # the symbol is explicitly referenced. Since portable code cannot - # rely on this symbol name, it's probably fine to never include it in - # preloaded symbol tables. - # Exclude shared library initialization/finalization symbols. -dnl Note also adjust exclude_expsyms for C++ above. - extract_expsyms_cmds= - - case $host_os in - cygwin* | mingw* | pw32* | cegcc*) - # FIXME: the MSVC++ port hasn't been tested in a loooong time - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - if test "$GCC" != yes; then - with_gnu_ld=no - fi - ;; - interix*) - # we just hope/assume this is gcc and not c89 (= MSVC++) - with_gnu_ld=yes - ;; - openbsd*) - with_gnu_ld=no - ;; - esac - - _LT_TAGVAR(ld_shlibs, $1)=yes - - # On some targets, GNU ld is compatible enough with the native linker - # that we're better off using the native interface for both. - lt_use_gnu_ld_interface=no - if test "$with_gnu_ld" = yes; then - case $host_os in - aix*) - # The AIX port of GNU ld has always aspired to compatibility - # with the native linker. However, as the warning in the GNU ld - # block says, versions before 2.19.5* couldn't really create working - # shared libraries, regardless of the interface used. - case `$LD -v 2>&1` in - *\ \(GNU\ Binutils\)\ 2.19.5*) ;; - *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; - *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - ;; - *) - lt_use_gnu_ld_interface=yes - ;; - esac - fi - - if test "$lt_use_gnu_ld_interface" = yes; then - # If archive_cmds runs LD, not CC, wlarc should be empty - wlarc='${wl}' - - # Set some defaults for GNU ld with shared library support. These - # are reset later if shared libraries are not supported. Putting them - # here allows them to be overridden if necessary. - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - # ancient GNU ld didn't support --whole-archive et. al. - if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - supports_anon_versioning=no - case `$LD -v 2>&1` in - *GNU\ gold*) supports_anon_versioning=yes ;; - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 - *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... - *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... - *\ 2.11.*) ;; # other 2.11 versions - *) supports_anon_versioning=yes ;; - esac - - # See if GNU ld supports shared libraries. - case $host_os in - aix[[3-9]]*) - # On AIX/PPC, the GNU linker is very broken - if test "$host_cpu" != ia64; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: the GNU linker, at least up to release 2.19, is reported -*** to be unable to reliably create shared libraries on AIX. -*** Therefore, libtool is disabling shared libraries support. If you -*** really care for shared libraries, you may want to install binutils -*** 2.20 or above, or modify your PATH so that a non-GNU linker is found. -*** You will then need to restart the configuration process. - -_LT_EOF - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' - _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - - gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) - tmp_diet=no - if test "$host_os" = linux-dietlibc; then - case $cc_basename in - diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) - esac - fi - if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ - && test "$tmp_diet" = no - then - tmp_addflag=' $pic_flag' - tmp_sharedflag='-shared' - case $cc_basename,$host_cpu in - pgcc*) # Portland Group C compiler - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag' - ;; - pgf77* | pgf90* | pgf95* | pgfortran*) - # Portland Group f77 and f90 compilers - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - tmp_addflag=' $pic_flag -Mnomain' ;; - ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 - tmp_addflag=' -i_dynamic' ;; - efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 - tmp_addflag=' -i_dynamic -nofor_main' ;; - ifc* | ifort*) # Intel Fortran compiler - tmp_addflag=' -nofor_main' ;; - lf95*) # Lahey Fortran 8.1 - _LT_TAGVAR(whole_archive_flag_spec, $1)= - tmp_sharedflag='--shared' ;; - xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) - tmp_sharedflag='-qmkshrobj' - tmp_addflag= ;; - nvcc*) # Cuda Compiler Driver 2.2 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - ;; - esac - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) # Sun C 5.9 - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - tmp_sharedflag='-G' ;; - *Sun\ F*) # Sun Fortran 8.3 - tmp_sharedflag='-G' ;; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - - case $cc_basename in - xlf* | bgf* | bgxlf* | mpixlf*) - # IBM XL Fortran 10.1 on PPC cannot create shared libs itself - _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' - fi - ;; - esac - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' - wlarc= - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - fi - ;; - - solaris*) - if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: The releases 2.8.* of the GNU linker cannot reliably -*** create shared libraries on Solaris systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.9.1 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) - case `$LD -v 2>&1` in - *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) - _LT_TAGVAR(ld_shlibs, $1)=no - cat <<_LT_EOF 1>&2 - -*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not -*** reliably create shared libraries on SCO systems. Therefore, libtool -*** is disabling shared libraries support. We urge you to upgrade GNU -*** binutils to release 2.16.91.0.3 or newer. Another option is to modify -*** your PATH or compiler configuration so that the native linker is -*** used, and then restart. - -_LT_EOF - ;; - *) - # For security reasons, it is highly recommended that you always - # use absolute paths for naming shared libraries, and exclude the - # DT_RUNPATH tag from executables and libraries. But doing so - # requires that you compile everything twice, which is a pain. - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - sunos4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - - if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then - runpath_var= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= - _LT_TAGVAR(export_dynamic_flag_spec, $1)= - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - # PORTME fill in a description of your system's linker (not GNU ld) - case $host_os in - aix3*) - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' - # Note: this linker hardcodes the directories in LIBPATH if there - # are no directories specified by -L. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then - # Neither direct hardcoding nor static linking is supported with a - # broken collect2. - _LT_TAGVAR(hardcode_direct, $1)=unsupported - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - # If we're using GNU nm, then we don't want the "-C" option. - # -C means demangle to AIX nm, but means don't demangle with GNU nm - # Also, AIX nm treats weak defined symbols like other global - # defined symbols, whereas GNU nm marks them as "W". - if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - else - _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' - fi - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then - aix_use_runtimelinking=yes - break - fi - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GCC" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - ;; - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - amigaos*) - case $host_cpu in - powerpc) - # see comment about AmigaOS4 .so support - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='' - ;; - m68k) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - ;; - - bsdi[[45]]*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic - ;; - - cygwin* | mingw* | pw32* | cegcc*) - # When not using gcc, we currently assume that we are using - # Microsoft Visual C++. - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - case $cc_basename in - cl*) - # Native MSVC - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' - _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # Assume MSVC wrapper - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' - # The linker will automatically build a .lib file if we build a DLL. - _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - # FIXME: Should let the user specify the lib program. - _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - ;; - esac - ;; - - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor - # support. Future versions do this automatically, but an explicit c++rt0.o - # does not break anything, and helps significantly (at the cost of a little - # extra space). - freebsd2.2*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # Unfortunately, older versions of FreeBSD 2 do not have this feature. - freebsd2.*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - # FreeBSD 3 and greater uses gcc -shared to do shared libraries. - freebsd* | dragonfly*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - hpux9*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - - hpux10*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - fi - ;; - - hpux11*) - if test "$GCC" = yes && test "$with_gnu_ld" = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - else - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - m4_if($1, [], [ - # Older versions of the 11.00 compiler do not understand -b yet - # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) - _LT_LINKER_OPTION([if $CC understands -b], - _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], - [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], - [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) - ;; - esac - fi - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - - # hardcode_minus_L: Not really in the search PATH, - # but as the default location of the library. - _LT_TAGVAR(hardcode_minus_L, $1)=yes - ;; - esac - fi - ;; - - irix5* | irix6* | nonstopux*) - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - # Try to use the -exported_symbol ld option, if it does not - # work, assume that -exports_file does not work either and - # implicitly export all symbols. - # This should be the same for all languages, so no per-tag cache variable. - AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], - [lt_cv_irix_exported_symbol], - [save_LDFLAGS="$LDFLAGS" - LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" - AC_LINK_IFELSE( - [AC_LANG_SOURCE( - [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], - [C++], [[int foo (void) { return 0; }]], - [Fortran 77], [[ - subroutine foo - end]], - [Fortran], [[ - subroutine foo - end]])])], - [lt_cv_irix_exported_symbol=yes], - [lt_cv_irix_exported_symbol=no]) - LDFLAGS="$save_LDFLAGS"]) - if test "$lt_cv_irix_exported_symbol" = yes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' - fi - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out - else - _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - newsos6) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *nto* | *qnx*) - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - else - case $host_os in - openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - ;; - esac - fi - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - os2*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~echo DATA >> $output_objdir/$libname.def~echo " SINGLE NONSHARED" >> $output_objdir/$libname.def~echo EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' - _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' - ;; - - osf3*) - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - osf4* | osf5*) # as osf3* with the addition of -msym flag - if test "$GCC" = yes; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - else - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ - $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' - - # Both c and cxx compiler support -rpath directly - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)='no' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - ;; - - solaris*) - _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' - if test "$GCC" = yes; then - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - else - case `$CC -V 2>&1` in - *"Compilers 5.0"*) - wlarc='' - _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' - ;; - *) - wlarc='${wl}' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' - ;; - esac - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. GCC discards it without `$wl', - # but is careful enough not to reorder. - # Supported since Solaris 2.6 (maybe 2.5.1?) - if test "$GCC" = yes; then - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - fi - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - sunos4*) - if test "x$host_vendor" = xsequent; then - # Use $CC to link under sequent, because it throws in some extra .o - # files that make .init and .fini sections work. - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' - fi - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4) - case $host_vendor in - sni) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? - ;; - siemens) - ## LD is ld it makes a PLAMLIB - ## CC just makes a GrossModule. - _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' - _LT_TAGVAR(hardcode_direct, $1)=no - ;; - motorola) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie - ;; - esac - runpath_var='LD_RUN_PATH' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - sysv4.3*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' - ;; - - sysv4*MP*) - if test -d /usr/nec; then - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var=LD_RUN_PATH - hardcode_runpath_var=yes - _LT_TAGVAR(ld_shlibs, $1)=yes - fi - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - if test "$GCC" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - fi - ;; - - uts4*) - _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - - *) - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - if test x$host_vendor = xsni; then - case $host in - sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym' - ;; - esac - fi - fi -]) -AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) -test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - -_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld - -_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl -_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl -_LT_DECL([], [extract_expsyms_cmds], [2], - [The commands to extract the exported symbol list from a shared archive]) - -# -# Do we need to explicitly link libc? -# -case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in -x|xyes) - # Assume -lc should be added - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - - if test "$enable_shared" = yes && test "$GCC" = yes; then - case $_LT_TAGVAR(archive_cmds, $1) in - *'~'*) - # FIXME: we may have to deal with multi-command sequences. - ;; - '$CC '*) - # Test whether the compiler implicitly links with -lc since on some - # systems, -lgcc has to come before -lc. If gcc already passes -lc - # to ld, don't add -lc before -lgcc. - AC_CACHE_CHECK([whether -lc should be explicitly linked in], - [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), - [$RM conftest* - echo "$lt_simple_compile_test_code" > conftest.$ac_ext - - if AC_TRY_EVAL(ac_compile) 2>conftest.err; then - soname=conftest - lib=conftest - libobjs=conftest.$ac_objext - deplibs= - wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) - pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) - compiler_flags=-v - linker_flags=-v - verstring= - output_objdir=. - libname=conftest - lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) - _LT_TAGVAR(allow_undefined_flag, $1)= - if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) - then - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no - else - lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes - fi - _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag - else - cat conftest.err 1>&5 - fi - $RM conftest* - ]) - _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) - ;; - esac - fi - ;; -esac - -_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], - [Whether or not to add -lc for building shared libraries]) -_LT_TAGDECL([allow_libtool_libs_with_static_runtimes], - [enable_shared_with_static_runtimes], [0], - [Whether or not to disallow shared libs when runtime libs are static]) -_LT_TAGDECL([], [export_dynamic_flag_spec], [1], - [Compiler flag to allow reflexive dlopens]) -_LT_TAGDECL([], [whole_archive_flag_spec], [1], - [Compiler flag to generate shared objects directly from archives]) -_LT_TAGDECL([], [compiler_needs_object], [1], - [Whether the compiler copes with passing no objects directly]) -_LT_TAGDECL([], [old_archive_from_new_cmds], [2], - [Create an old-style archive from a shared archive]) -_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], - [Create a temporary old-style archive to link instead of a shared archive]) -_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) -_LT_TAGDECL([], [archive_expsym_cmds], [2]) -_LT_TAGDECL([], [module_cmds], [2], - [Commands used to build a loadable module if different from building - a shared archive.]) -_LT_TAGDECL([], [module_expsym_cmds], [2]) -_LT_TAGDECL([], [with_gnu_ld], [1], - [Whether we are building with GNU ld or not]) -_LT_TAGDECL([], [allow_undefined_flag], [1], - [Flag that allows shared libraries with undefined symbols to be built]) -_LT_TAGDECL([], [no_undefined_flag], [1], - [Flag that enforces no undefined symbols]) -_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], - [Flag to hardcode $libdir into a binary during linking. - This must work even if $libdir does not exist]) -_LT_TAGDECL([], [hardcode_libdir_separator], [1], - [Whether we need a single "-rpath" flag with a separated argument]) -_LT_TAGDECL([], [hardcode_direct], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary]) -_LT_TAGDECL([], [hardcode_direct_absolute], [0], - [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes - DIR into the resulting binary and the resulting library dependency is - "absolute", i.e impossible to change by setting ${shlibpath_var} if the - library is relocated]) -_LT_TAGDECL([], [hardcode_minus_L], [0], - [Set to "yes" if using the -LDIR flag during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_shlibpath_var], [0], - [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR - into the resulting binary]) -_LT_TAGDECL([], [hardcode_automatic], [0], - [Set to "yes" if building a shared library automatically hardcodes DIR - into the library and all subsequent libraries and executables linked - against it]) -_LT_TAGDECL([], [inherit_rpath], [0], - [Set to yes if linker adds runtime paths of dependent libraries - to runtime path list]) -_LT_TAGDECL([], [link_all_deplibs], [0], - [Whether libtool must link a program against all its dependency libraries]) -_LT_TAGDECL([], [always_export_symbols], [0], - [Set to "yes" if exported symbols are required]) -_LT_TAGDECL([], [export_symbols_cmds], [2], - [The commands to list exported symbols]) -_LT_TAGDECL([], [exclude_expsyms], [1], - [Symbols that should not be listed in the preloaded symbols]) -_LT_TAGDECL([], [include_expsyms], [1], - [Symbols that must always be exported]) -_LT_TAGDECL([], [prelink_cmds], [2], - [Commands necessary for linking programs (against libraries) with templates]) -_LT_TAGDECL([], [postlink_cmds], [2], - [Commands necessary for finishing linking programs]) -_LT_TAGDECL([], [file_list_spec], [1], - [Specify filename containing input files]) -dnl FIXME: Not yet implemented -dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], -dnl [Compiler flag to generate thread safe objects]) -])# _LT_LINKER_SHLIBS - - -# _LT_LANG_C_CONFIG([TAG]) -# ------------------------ -# Ensure that the configuration variables for a C compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_C_CONFIG], -[m4_require([_LT_DECL_EGREP])dnl -lt_save_CC="$CC" -AC_LANG_PUSH(C) - -# Source file extension for C test sources. -ac_ext=c - -# Object file extension for compiled C test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="int some_variable = 0;" - -# Code to be used in simple link tests -lt_simple_link_test_code='int main(){return(0);}' - -_LT_TAG_COMPILER -# Save the default compiler, since it gets overwritten when the other -# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. -compiler_DEFAULT=$CC - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - LT_SYS_DLOPEN_SELF - _LT_CMD_STRIPLIB - - # Report which library types will actually be built - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_CONFIG($1) -fi -AC_LANG_POP -CC="$lt_save_CC" -])# _LT_LANG_C_CONFIG - - -# _LT_LANG_CXX_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a C++ compiler are suitably -# defined. These variables are subsequently used by _LT_CONFIG to write -# the compiler configuration to `libtool'. -m4_defun([_LT_LANG_CXX_CONFIG], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -m4_require([_LT_DECL_EGREP])dnl -m4_require([_LT_PATH_MANIFEST_TOOL])dnl -if test -n "$CXX" && ( test "X$CXX" != "Xno" && - ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || - (test "X$CXX" != "Xg++"))) ; then - AC_PROG_CXXCPP -else - _lt_caught_CXX_error=yes -fi - -AC_LANG_PUSH(C++) -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(compiler_needs_object, $1)=no -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for C++ test sources. -ac_ext=cpp - -# Object file extension for compiled C++ test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the CXX compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_caught_CXX_error" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="int some_variable = 0;" - - # Code to be used in simple link tests - lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC=$CC - lt_save_CFLAGS=$CFLAGS - lt_save_LD=$LD - lt_save_GCC=$GCC - GCC=$GXX - lt_save_with_gnu_ld=$with_gnu_ld - lt_save_path_LD=$lt_cv_path_LD - if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then - lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx - else - $as_unset lt_cv_prog_gnu_ld - fi - if test -n "${lt_cv_path_LDCXX+set}"; then - lt_cv_path_LD=$lt_cv_path_LDCXX - else - $as_unset lt_cv_path_LD - fi - test -z "${LDCXX+set}" || LD=$LDCXX - CC=${CXX-"c++"} - CFLAGS=$CXXFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - # We don't want -fno-exception when compiling C++ code, so set the - # no_builtin_flag separately - if test "$GXX" = yes; then - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' - else - _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= - fi - - if test "$GXX" = yes; then - # Set up default GNU C++ configuration - - LT_PATH_LD - - # Check if GNU C++ uses GNU ld as the underlying linker, since the - # archiving commands below assume that GNU ld is being used. - if test "$with_gnu_ld" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # If archive_cmds runs LD, not CC, wlarc should be empty - # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to - # investigate it a little bit more. (MM) - wlarc='${wl}' - - # ancient GNU ld didn't support --whole-archive et. al. - if eval "`$CC -print-prog-name=ld` --help 2>&1" | - $GREP 'no-whole-archive' > /dev/null; then - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - else - _LT_TAGVAR(whole_archive_flag_spec, $1)= - fi - else - with_gnu_ld=no - wlarc= - - # A generic and very simple default shared library creation - # command for GNU C++ for the case where it uses the native - # linker, instead of GNU ld. If possible, this setting should - # overridden to take advantage of the native linker features on - # the platform it is being used on. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - fi - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - GXX=no - with_gnu_ld=no - wlarc= - fi - - # PORTME: fill in a description of your system's C++ link characteristics - AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) - _LT_TAGVAR(ld_shlibs, $1)=yes - case $host_os in - aix3*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aix[[4-9]]*) - if test "$host_cpu" = ia64; then - # On IA64, the linker does run time linking by default, so we don't - # have to do anything special. - aix_use_runtimelinking=no - exp_sym_flag='-Bexport' - no_entry_flag="" - else - aix_use_runtimelinking=no - - # Test if we are trying to use run time linking or normal - # AIX style linking. If -brtl is somewhere in LDFLAGS, we - # need to do runtime linking. - case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) - for ld_flag in $LDFLAGS; do - case $ld_flag in - *-brtl*) - aix_use_runtimelinking=yes - break - ;; - esac - done - ;; - esac - - exp_sym_flag='-bexport' - no_entry_flag='-bnoentry' - fi - - # When large executables or shared objects are built, AIX ld can - # have problems creating the table of contents. If linking a library - # or program results in "error TOC overflow" add -mminimal-toc to - # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not - # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. - - _LT_TAGVAR(archive_cmds, $1)='' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='${wl}-f,' - - if test "$GXX" = yes; then - case $host_os in aix4.[[012]]|aix4.[[012]].*) - # We only want to do this on AIX 4.2 and lower, the check - # below for broken collect2 doesn't work under 4.3+ - collect2name=`${CC} -print-prog-name=collect2` - if test -f "$collect2name" && - strings "$collect2name" | $GREP resolve_lib_name >/dev/null - then - # We have reworked collect2 - : - else - # We have old collect2 - _LT_TAGVAR(hardcode_direct, $1)=unsupported - # It fails to find uninstalled libraries when the uninstalled - # path is not listed in the libpath. Setting hardcode_minus_L - # to unsupported forces relinking - _LT_TAGVAR(hardcode_minus_L, $1)=yes - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)= - fi - esac - shared_flag='-shared' - if test "$aix_use_runtimelinking" = yes; then - shared_flag="$shared_flag "'${wl}-G' - fi - else - # not using gcc - if test "$host_cpu" = ia64; then - # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release - # chokes on -Wl,-G. The following line is correct: - shared_flag='-G' - else - if test "$aix_use_runtimelinking" = yes; then - shared_flag='${wl}-G' - else - shared_flag='${wl}-bM:SRE' - fi - fi - fi - - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall' - # It seems that -bexpall does not export symbols beginning with - # underscore (_), so it is better to generate a list of symbols to - # export. - _LT_TAGVAR(always_export_symbols, $1)=yes - if test "$aix_use_runtimelinking" = yes; then - # Warning - without using the other runtime loading flags (-brtl), - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(allow_undefined_flag, $1)='-berok' - # Determine the default libpath from the value encoded in an empty - # executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then func_echo_all "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" - else - if test "$host_cpu" = ia64; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' - _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" - else - # Determine the default libpath from the value encoded in an - # empty executable. - _LT_SYS_MODULE_PATH_AIX([$1]) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" - # Warning - without using the other run time loading flags, - # -berok will link without error, but may produce a broken library. - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' - if test "$with_gnu_ld" = yes; then - # We only use this code for GNU lds that support --whole-archive. - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - else - # Exported symbols can be pulled into shared objects from archives - _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' - fi - _LT_TAGVAR(archive_cmds_need_lc, $1)=yes - # This is similar to how AIX traditionally builds its shared - # libraries. - _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' - fi - fi - ;; - - beos*) - if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - # Joseph Beckenbach says some releases of gcc - # support --undefined. This deserves some investigation. FIXME - _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - chorus*) - case $cc_basename in - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - cygwin* | mingw* | pw32* | cegcc*) - case $GXX,$cc_basename in - ,cl* | no,cl*) - # Native MSVC - # hardcode_libdir_flag_spec is actually meaningless, as there is - # no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=yes - _LT_TAGVAR(file_list_spec, $1)='@' - # Tell ltmain to make .lib files, not .a files. - libext=lib - # Tell ltmain to make .dll files, not .so files. - shrext_cmds=".dll" - # FIXME: Setting linknames here is a bad hack. - _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; - else - $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; - fi~ - $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ - linknames=' - # The linker will not automatically build a static lib if we build a DLL. - # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - # Don't use ranlib - _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' - _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ - lt_tool_outputfile="@TOOL_OUTPUT@"~ - case $lt_outputfile in - *.exe|*.EXE) ;; - *) - lt_outputfile="$lt_outputfile.exe" - lt_tool_outputfile="$lt_tool_outputfile.exe" - ;; - esac~ - func_to_tool_file "$lt_outputfile"~ - if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then - $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; - $RM "$lt_outputfile.manifest"; - fi' - ;; - *) - # g++ - # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, - # as there is no search path for DLLs. - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' - _LT_TAGVAR(allow_undefined_flag, $1)=unsupported - _LT_TAGVAR(always_export_symbols, $1)=no - _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes - - if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - # If the export-symbols file already is a .def file (1st line - # is EXPORTS), use it as is; otherwise, prepend... - _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then - cp $export_symbols $output_objdir/$soname.def; - else - echo EXPORTS > $output_objdir/$soname.def; - cat $export_symbols >> $output_objdir/$soname.def; - fi~ - $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - darwin* | rhapsody*) - _LT_DARWIN_LINKER_FEATURES($1) - ;; - - dgux*) - case $cc_basename in - ec++*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - ghcx*) - # Green Hills C++ Compiler - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - freebsd2.*) - # C++ shared libraries reported to be fairly broken before - # switch to ELF - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - freebsd-elf*) - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - ;; - - freebsd* | dragonfly*) - # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF - # conventions - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - gnu*) - ;; - - haiku*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - - hpux9*) - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - hpux10*|hpux11*) - if test $with_gnu_ld = no; then - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - case $host_cpu in - hppa*64*|ia64*) - ;; - *) - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - ;; - esac - fi - case $host_cpu in - hppa*64*|ia64*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - ;; - *) - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, - # but as the default - # location of the library. - ;; - esac - - case $cc_basename in - CC*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - aCC*) - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes; then - if test $with_gnu_ld = no; then - case $host_cpu in - hppa*64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - ia64*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - ;; - esac - fi - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - interix[[3-9]]*) - _LT_TAGVAR(hardcode_direct, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. - # Instead, shared libraries are loaded at an image base (0x10000000 by - # default) and relocated if they conflict, which is a slow very memory - # consuming and fragmenting process. To avoid this, we pick a random, - # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link - # time. Moving up from 0x10000000 also allows more sbrk(2) space. - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' - ;; - irix5* | irix6*) - case $cc_basename in - CC*) - # SGI C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - - # Archives containing C++ object files must be created using - # "CC -ar", where "CC" is the IRIX C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' - ;; - *) - if test "$GXX" = yes; then - if test "$with_gnu_ld" = no; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - else - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -o $lib' - fi - fi - _LT_TAGVAR(link_all_deplibs, $1)=yes - ;; - esac - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - _LT_TAGVAR(inherit_rpath, $1)=yes - ;; - - linux* | k*bsd*-gnu | kopensolaris*-gnu) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - - # Archives containing C++ object files must be created using - # "CC -Bstatic", where "CC" is the KAI C++ compiler. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' - ;; - icpc* | ecpc* ) - # Intel C++ - with_gnu_ld=yes - # version 8.0 and above of icpc choke on multiply defined symbols - # if we add $predep_objects and $postdep_objects, however 7.1 and - # earlier do not add the objects themselves. - case `$CC -V 2>&1` in - *"Version 7."*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - *) # Version 8.0 or newer - tmp_idyn= - case $host_cpu in - ia64*) tmp_idyn=' -i_dynamic';; - esac - _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' - ;; - esac - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' - ;; - pgCC* | pgcpp*) - # Portland Group C++ compiler - case `$CC -V` in - *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) - _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ - compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' - _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ - $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ - $RANLIB $oldlib' - _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ - rm -rf $tpldir~ - $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ - $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - *) # Version 6 and above use weak symbols - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - ;; - cxx*) - # Compaq C++ - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' - - runpath_var=LD_RUN_PATH - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' - ;; - xl* | mpixl* | bgxl*) - # IBM XL 8.0 on PPC, with GNU ld - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' - _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' - if test "x$supports_anon_versioning" = xyes; then - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ - cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ - echo "local: *; };" >> $output_objdir/$libname.ver~ - $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' - fi - ;; - *) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' - _LT_TAGVAR(compiler_needs_object, $1)=yes - - # Not sure whether something based on - # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 - # would be better. - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - esac - ;; - esac - ;; - - lynxos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - m88k*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - mvs*) - case $cc_basename in - cxx*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - netbsd*) - if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' - wlarc= - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - fi - # Workaround some broken pre-1.5 toolchains - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' - ;; - - *nto* | *qnx*) - _LT_TAGVAR(ld_shlibs, $1)=yes - ;; - - openbsd2*) - # C++ shared libraries are fairly broken - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - openbsd*) - if test -f /usr/libexec/ld.so; then - _LT_TAGVAR(hardcode_direct, $1)=yes - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_direct_absolute, $1)=yes - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' - _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' - fi - output_verbose_link_cmd=func_echo_all - else - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - - osf3* | osf4* | osf5*) - case $cc_basename in - KCC*) - # Kuck and Associates, Inc. (KAI) C++ Compiler - - # KCC will only create a shared library if the output file - # ends with ".so" (or ".sl" for HP-UX), so rename the library - # to its proper name (with version) after linking. - _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Archives containing C++ object files must be created using - # the KAI C++ compiler. - case $host in - osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; - *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; - esac - ;; - RCC*) - # Rational C++ 2.4.1 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - cxx*) - case $host in - osf3*) - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && func_echo_all "${wl}-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - ;; - *) - _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' - _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ - echo "-hidden">> $lib.exp~ - $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib~ - $RM $lib.exp' - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - # - # There doesn't appear to be a way to prevent this compiler from - # explicitly linking system object files so we need to strip them - # from the output so that they don't get included in the library - # dependencies. - output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' - ;; - *) - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' - case $host in - osf3*) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' - ;; - esac - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=: - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - - else - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - fi - ;; - esac - ;; - - psos*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - sunos4*) - case $cc_basename in - CC*) - # Sun C++ 4.x - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - lcc*) - # Lucid - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - solaris*) - case $cc_basename in - CC* | sunCC*) - # Sun C++ 4.2, 5.x and Centerline C++ - _LT_TAGVAR(archive_cmds_need_lc,$1)=yes - _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' - _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - # The compiler driver will combine and reorder linker options, - # but understands `-z linker_flag'. - # Supported since Solaris 2.6 (maybe 2.5.1?) - _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' - ;; - esac - _LT_TAGVAR(link_all_deplibs, $1)=yes - - output_verbose_link_cmd='func_echo_all' - - # Archives containing C++ object files must be created using - # "CC -xar", where "CC" is the Sun C++ compiler. This is - # necessary to make sure instantiated templates are included - # in the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' - ;; - gcx*) - # Green Hills C++ Compiler - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - - # The C++ compiler must be used to create the archive. - _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' - ;; - *) - # GNU C++ compiler with Solaris linker - if test "$GXX" = yes && test "$with_gnu_ld" = no; then - _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' - if $CC --version | $GREP -v '^2\.7' > /dev/null; then - _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -shared $pic_flag -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - else - # g++ 2.7 appears to require `-G' NOT `-shared' on this - # platform. - _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' - _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ - $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' - - # Commands to make compiler produce verbose output that lists - # what "hidden" libraries, object files and flags are used when - # linking a shared library. - output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' - fi - - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' - case $host_os in - solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; - *) - _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' - ;; - esac - fi - ;; - esac - ;; - - sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - sysv5* | sco3.2v5* | sco5v6*) - # Note: We can NOT use -z defs as we might desire, because we do not - # link with -lc, and that would cause any symbols used from libc to - # always be unresolved, which means just about no library would - # ever link correctly. If we're not using GNU ld we use -z text - # though, which does catch some bad symbols but isn't as heavy-handed - # as -z defs. - _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text' - _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs' - _LT_TAGVAR(archive_cmds_need_lc, $1)=no - _LT_TAGVAR(hardcode_shlibpath_var, $1)=no - _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir' - _LT_TAGVAR(hardcode_libdir_separator, $1)=':' - _LT_TAGVAR(link_all_deplibs, $1)=yes - _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' - runpath_var='LD_RUN_PATH' - - case $cc_basename in - CC*) - _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ - '"$_LT_TAGVAR(old_archive_cmds, $1)" - _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ - '"$_LT_TAGVAR(reload_cmds, $1)" - ;; - *) - _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' - ;; - esac - ;; - - tandem*) - case $cc_basename in - NCC*) - # NonStop-UX NCC 3.20 - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - ;; - - vxworks*) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - - *) - # FIXME: insert proper C++ library support - _LT_TAGVAR(ld_shlibs, $1)=no - ;; - esac - - AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) - test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no - - _LT_TAGVAR(GCC, $1)="$GXX" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS - LDCXX=$LD - LD=$lt_save_LD - GCC=$lt_save_GCC - with_gnu_ld=$lt_save_with_gnu_ld - lt_cv_path_LDCXX=$lt_cv_path_LD - lt_cv_path_LD=$lt_save_path_LD - lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld - lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld -fi # test "$_lt_caught_CXX_error" != yes - -AC_LANG_POP -])# _LT_LANG_CXX_CONFIG - - -# _LT_FUNC_STRIPNAME_CNF -# ---------------------- -# func_stripname_cnf prefix suffix name -# strip PREFIX and SUFFIX off of NAME. -# PREFIX and SUFFIX must not contain globbing or regex special -# characters, hashes, percent signs, but SUFFIX may contain a leading -# dot (in which case that matches only a dot). -# -# This function is identical to the (non-XSI) version of func_stripname, -# except this one can be used by m4 code that may be executed by configure, -# rather than the libtool script. -m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl -AC_REQUIRE([_LT_DECL_SED]) -AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) -func_stripname_cnf () -{ - case ${2} in - .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; - *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; - esac -} # func_stripname_cnf -])# _LT_FUNC_STRIPNAME_CNF - -# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) -# --------------------------------- -# Figure out "hidden" library dependencies from verbose -# compiler output when linking a shared library. -# Parse the compiler output and extract the necessary -# objects, libraries and library flags. -m4_defun([_LT_SYS_HIDDEN_LIBDEPS], -[m4_require([_LT_FILEUTILS_DEFAULTS])dnl -AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl -# Dependencies to place before and after the object being linked: -_LT_TAGVAR(predep_objects, $1)= -_LT_TAGVAR(postdep_objects, $1)= -_LT_TAGVAR(predeps, $1)= -_LT_TAGVAR(postdeps, $1)= -_LT_TAGVAR(compiler_lib_search_path, $1)= - -dnl we can't use the lt_simple_compile_test_code here, -dnl because it contains code intended for an executable, -dnl not a library. It's possible we should let each -dnl tag define a new lt_????_link_test_code variable, -dnl but it's only used here... -m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF -int a; -void foo (void) { a = 0; } -_LT_EOF -], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF -class Foo -{ -public: - Foo (void) { a = 0; } -private: - int a; -}; -_LT_EOF -], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer*4 a - a=0 - return - end -_LT_EOF -], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF - subroutine foo - implicit none - integer a - a=0 - return - end -_LT_EOF -], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF -public class foo { - private int a; - public void bar (void) { - a = 0; - } -}; -_LT_EOF -], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF -package foo -func foo() { -} -_LT_EOF -]) - -_lt_libdeps_save_CFLAGS=$CFLAGS -case "$CC $CFLAGS " in #( -*\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; -*\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; -*\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; -esac - -dnl Parse the compiler output and extract the necessary -dnl objects, libraries and library flags. -if AC_TRY_EVAL(ac_compile); then - # Parse the compiler output and extract the necessary - # objects, libraries and library flags. - - # Sentinel used to keep track of whether or not we are before - # the conftest object file. - pre_test_object_deps_done=no - - for p in `eval "$output_verbose_link_cmd"`; do - case ${prev}${p} in - - -L* | -R* | -l*) - # Some compilers place space between "-{L,R}" and the path. - # Remove the space. - if test $p = "-L" || - test $p = "-R"; then - prev=$p - continue - fi - - # Expand the sysroot to ease extracting the directories later. - if test -z "$prev"; then - case $p in - -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; - -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; - -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; - esac - fi - case $p in - =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; - esac - if test "$pre_test_object_deps_done" = no; then - case ${prev} in - -L | -R) - # Internal compiler library paths should come after those - # provided the user. The postdeps already come after the - # user supplied libs so there is no need to process them. - if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then - _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}" - else - _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}" - fi - ;; - # The "-l" case would never come before the object being - # linked, so don't bother handling this case. - esac - else - if test -z "$_LT_TAGVAR(postdeps, $1)"; then - _LT_TAGVAR(postdeps, $1)="${prev}${p}" - else - _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}" - fi - fi - prev= - ;; - - *.lto.$objext) ;; # Ignore GCC LTO objects - *.$objext) - # This assumes that the test object file only shows up - # once in the compiler output. - if test "$p" = "conftest.$objext"; then - pre_test_object_deps_done=yes - continue - fi - - if test "$pre_test_object_deps_done" = no; then - if test -z "$_LT_TAGVAR(predep_objects, $1)"; then - _LT_TAGVAR(predep_objects, $1)="$p" - else - _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" - fi - else - if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then - _LT_TAGVAR(postdep_objects, $1)="$p" - else - _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" - fi - fi - ;; - - *) ;; # Ignore the rest. - - esac - done - - # Clean up. - rm -f a.out a.exe -else - echo "libtool.m4: error: problem compiling $1 test program" -fi - -$RM -f confest.$objext -CFLAGS=$_lt_libdeps_save_CFLAGS - -# PORTME: override above test on systems where it is broken -m4_if([$1], [CXX], -[case $host_os in -interix[[3-9]]*) - # Interix 3.5 installs completely hosed .la files for C++, so rather than - # hack all around it, let's just trust "g++" to DTRT. - _LT_TAGVAR(predep_objects,$1)= - _LT_TAGVAR(postdep_objects,$1)= - _LT_TAGVAR(postdeps,$1)= - ;; - -linux*) - case `$CC -V 2>&1 | sed 5q` in - *Sun\ C*) - # Sun C++ 5.9 - - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; - -solaris*) - case $cc_basename in - CC* | sunCC*) - # The more standards-conforming stlport4 library is - # incompatible with the Cstd library. Avoid specifying - # it if it's in CXXFLAGS. Ignore libCrun as - # -library=stlport4 depends on it. - case " $CXX $CXXFLAGS " in - *" -library=stlport4 "*) - solaris_use_stlport4=yes - ;; - esac - - # Adding this requires a known-good setup of shared libraries for - # Sun compiler versions before 5.6, else PIC objects from an old - # archive will be linked into the output, leading to subtle bugs. - if test "$solaris_use_stlport4" != yes; then - _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun' - fi - ;; - esac - ;; -esac -]) - -case " $_LT_TAGVAR(postdeps, $1) " in -*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; -esac - _LT_TAGVAR(compiler_lib_search_dirs, $1)= -if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then - _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` -fi -_LT_TAGDECL([], [compiler_lib_search_dirs], [1], - [The directories searched by this compiler when creating a shared library]) -_LT_TAGDECL([], [predep_objects], [1], - [Dependencies to place before and after the objects being linked to - create a shared library]) -_LT_TAGDECL([], [postdep_objects], [1]) -_LT_TAGDECL([], [predeps], [1]) -_LT_TAGDECL([], [postdeps], [1]) -_LT_TAGDECL([], [compiler_lib_search_path], [1], - [The library search path used internally by the compiler when linking - a shared library]) -])# _LT_SYS_HIDDEN_LIBDEPS - - -# _LT_LANG_F77_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for a Fortran 77 compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_F77_CONFIG], -[AC_LANG_PUSH(Fortran 77) -if test -z "$F77" || test "X$F77" = "Xno"; then - _lt_disable_F77=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for f77 test sources. -ac_ext=f - -# Object file extension for compiled f77 test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the F77 compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_F77" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${F77-"f77"} - CFLAGS=$FFLAGS - compiler=$CC - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - GCC=$G77 - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$G77" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC="$lt_save_CC" - CFLAGS="$lt_save_CFLAGS" -fi # test "$_lt_disable_F77" != yes - -AC_LANG_POP -])# _LT_LANG_F77_CONFIG - - -# _LT_LANG_FC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for a Fortran compiler are -# suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_FC_CONFIG], -[AC_LANG_PUSH(Fortran) - -if test -z "$FC" || test "X$FC" = "Xno"; then - _lt_disable_FC=yes -fi - -_LT_TAGVAR(archive_cmds_need_lc, $1)=no -_LT_TAGVAR(allow_undefined_flag, $1)= -_LT_TAGVAR(always_export_symbols, $1)=no -_LT_TAGVAR(archive_expsym_cmds, $1)= -_LT_TAGVAR(export_dynamic_flag_spec, $1)= -_LT_TAGVAR(hardcode_direct, $1)=no -_LT_TAGVAR(hardcode_direct_absolute, $1)=no -_LT_TAGVAR(hardcode_libdir_flag_spec, $1)= -_LT_TAGVAR(hardcode_libdir_separator, $1)= -_LT_TAGVAR(hardcode_minus_L, $1)=no -_LT_TAGVAR(hardcode_automatic, $1)=no -_LT_TAGVAR(inherit_rpath, $1)=no -_LT_TAGVAR(module_cmds, $1)= -_LT_TAGVAR(module_expsym_cmds, $1)= -_LT_TAGVAR(link_all_deplibs, $1)=unknown -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds -_LT_TAGVAR(no_undefined_flag, $1)= -_LT_TAGVAR(whole_archive_flag_spec, $1)= -_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no - -# Source file extension for fc test sources. -ac_ext=${ac_fc_srcext-f} - -# Object file extension for compiled fc test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# No sense in running all these tests if we already determined that -# the FC compiler isn't working. Some variables (like enable_shared) -# are currently assumed to apply to all compilers on this platform, -# and will be corrupted by setting them based on a non-working compiler. -if test "$_lt_disable_FC" != yes; then - # Code to be used in simple compile tests - lt_simple_compile_test_code="\ - subroutine t - return - end -" - - # Code to be used in simple link tests - lt_simple_link_test_code="\ - program t - end -" - - # ltmain only uses $CC for tagged configurations so make sure $CC is set. - _LT_TAG_COMPILER - - # save warnings/boilerplate of simple test code - _LT_COMPILER_BOILERPLATE - _LT_LINKER_BOILERPLATE - - # Allow CC to be a program name with arguments. - lt_save_CC="$CC" - lt_save_GCC=$GCC - lt_save_CFLAGS=$CFLAGS - CC=${FC-"f95"} - CFLAGS=$FCFLAGS - compiler=$CC - GCC=$ac_cv_fc_compiler_gnu - - _LT_TAGVAR(compiler, $1)=$CC - _LT_CC_BASENAME([$compiler]) - - if test -n "$compiler"; then - AC_MSG_CHECKING([if libtool supports shared libraries]) - AC_MSG_RESULT([$can_build_shared]) - - AC_MSG_CHECKING([whether to build shared libraries]) - test "$can_build_shared" = "no" && enable_shared=no - - # On AIX, shared libraries and static libraries use the same namespace, and - # are all built from PIC. - case $host_os in - aix3*) - test "$enable_shared" = yes && enable_static=no - if test -n "$RANLIB"; then - archive_cmds="$archive_cmds~\$RANLIB \$lib" - postinstall_cmds='$RANLIB $lib' - fi - ;; - aix[[4-9]]*) - if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then - test "$enable_shared" = yes && enable_static=no - fi - ;; - esac - AC_MSG_RESULT([$enable_shared]) - - AC_MSG_CHECKING([whether to build static libraries]) - # Make sure either enable_shared or enable_static is yes. - test "$enable_shared" = yes || enable_static=yes - AC_MSG_RESULT([$enable_static]) - - _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu" - _LT_TAGVAR(LD, $1)="$LD" - - ## CAVEAT EMPTOR: - ## There is no encapsulation within the following macros, do not change - ## the running order or otherwise move them around unless you know exactly - ## what you are doing... - _LT_SYS_HIDDEN_LIBDEPS($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_SYS_DYNAMIC_LINKER($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) - fi # test -n "$compiler" - - GCC=$lt_save_GCC - CC=$lt_save_CC - CFLAGS=$lt_save_CFLAGS -fi # test "$_lt_disable_FC" != yes - -AC_LANG_POP -])# _LT_LANG_FC_CONFIG - - -# _LT_LANG_GCJ_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Java Compiler compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GCJ_CONFIG], -[AC_REQUIRE([LT_PROG_GCJ])dnl -AC_LANG_SAVE - -# Source file extension for Java test sources. -ac_ext=java - -# Object file extension for compiled Java test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="class foo {}" - -# Code to be used in simple link tests -lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GCJ-"gcj"} -CFLAGS=$GCJFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# GCJ did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GCJ_CONFIG - - -# _LT_LANG_GO_CONFIG([TAG]) -# -------------------------- -# Ensure that the configuration variables for the GNU Go compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_GO_CONFIG], -[AC_REQUIRE([LT_PROG_GO])dnl -AC_LANG_SAVE - -# Source file extension for Go test sources. -ac_ext=go - -# Object file extension for compiled Go test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code="package main; func main() { }" - -# Code to be used in simple link tests -lt_simple_link_test_code='package main; func main() { }' - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC=$CC -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC=yes -CC=${GOC-"gccgo"} -CFLAGS=$GOFLAGS -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_TAGVAR(LD, $1)="$LD" -_LT_CC_BASENAME([$compiler]) - -# Go did not exist at the time GCC didn't implicitly link libc in. -_LT_TAGVAR(archive_cmds_need_lc, $1)=no - -_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds -_LT_TAGVAR(reload_flag, $1)=$reload_flag -_LT_TAGVAR(reload_cmds, $1)=$reload_cmds - -## CAVEAT EMPTOR: -## There is no encapsulation within the following macros, do not change -## the running order or otherwise move them around unless you know exactly -## what you are doing... -if test -n "$compiler"; then - _LT_COMPILER_NO_RTTI($1) - _LT_COMPILER_PIC($1) - _LT_COMPILER_C_O($1) - _LT_COMPILER_FILE_LOCKS($1) - _LT_LINKER_SHLIBS($1) - _LT_LINKER_HARDCODE_LIBPATH($1) - - _LT_CONFIG($1) -fi - -AC_LANG_RESTORE - -GCC=$lt_save_GCC -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_GO_CONFIG - - -# _LT_LANG_RC_CONFIG([TAG]) -# ------------------------- -# Ensure that the configuration variables for the Windows resource compiler -# are suitably defined. These variables are subsequently used by _LT_CONFIG -# to write the compiler configuration to `libtool'. -m4_defun([_LT_LANG_RC_CONFIG], -[AC_REQUIRE([LT_PROG_RC])dnl -AC_LANG_SAVE - -# Source file extension for RC test sources. -ac_ext=rc - -# Object file extension for compiled RC test sources. -objext=o -_LT_TAGVAR(objext, $1)=$objext - -# Code to be used in simple compile tests -lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' - -# Code to be used in simple link tests -lt_simple_link_test_code="$lt_simple_compile_test_code" - -# ltmain only uses $CC for tagged configurations so make sure $CC is set. -_LT_TAG_COMPILER - -# save warnings/boilerplate of simple test code -_LT_COMPILER_BOILERPLATE -_LT_LINKER_BOILERPLATE - -# Allow CC to be a program name with arguments. -lt_save_CC="$CC" -lt_save_CFLAGS=$CFLAGS -lt_save_GCC=$GCC -GCC= -CC=${RC-"windres"} -CFLAGS= -compiler=$CC -_LT_TAGVAR(compiler, $1)=$CC -_LT_CC_BASENAME([$compiler]) -_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes - -if test -n "$compiler"; then - : - _LT_CONFIG($1) -fi - -GCC=$lt_save_GCC -AC_LANG_RESTORE -CC=$lt_save_CC -CFLAGS=$lt_save_CFLAGS -])# _LT_LANG_RC_CONFIG - - -# LT_PROG_GCJ -# ----------- -AC_DEFUN([LT_PROG_GCJ], -[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], - [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], - [AC_CHECK_TOOL(GCJ, gcj,) - test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" - AC_SUBST(GCJFLAGS)])])[]dnl -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_GCJ], []) - - -# LT_PROG_GO -# ---------- -AC_DEFUN([LT_PROG_GO], -[AC_CHECK_TOOL(GOC, gccgo,) -]) - - -# LT_PROG_RC -# ---------- -AC_DEFUN([LT_PROG_RC], -[AC_CHECK_TOOL(RC, windres,) -]) - -# Old name: -AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_RC], []) - - -# _LT_DECL_EGREP -# -------------- -# If we don't have a new enough Autoconf to choose the best grep -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_EGREP], -[AC_REQUIRE([AC_PROG_EGREP])dnl -AC_REQUIRE([AC_PROG_FGREP])dnl -test -z "$GREP" && GREP=grep -_LT_DECL([], [GREP], [1], [A grep program that handles long lines]) -_LT_DECL([], [EGREP], [1], [An ERE matcher]) -_LT_DECL([], [FGREP], [1], [A literal string matcher]) -dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too -AC_SUBST([GREP]) -]) - - -# _LT_DECL_OBJDUMP -# -------------- -# If we don't have a new enough Autoconf to choose the best objdump -# available, choose the one first in the user's PATH. -m4_defun([_LT_DECL_OBJDUMP], -[AC_CHECK_TOOL(OBJDUMP, objdump, false) -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) -AC_SUBST([OBJDUMP]) -]) - -# _LT_DECL_DLLTOOL -# ---------------- -# Ensure DLLTOOL variable is set. -m4_defun([_LT_DECL_DLLTOOL], -[AC_CHECK_TOOL(DLLTOOL, dlltool, false) -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program]) -AC_SUBST([DLLTOOL]) -]) - -# _LT_DECL_SED -# ------------ -# Check for a fully-functional sed program, that truncates -# as few characters as possible. Prefer GNU sed if found. -m4_defun([_LT_DECL_SED], -[AC_PROG_SED -test -z "$SED" && SED=sed -Xsed="$SED -e 1s/^X//" -_LT_DECL([], [SED], [1], [A sed program that does not truncate output]) -_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], - [Sed that helps us avoid accidentally triggering echo(1) options like -n]) -])# _LT_DECL_SED - -m4_ifndef([AC_PROG_SED], [ -############################################################ -# NOTE: This macro has been submitted for inclusion into # -# GNU Autoconf as AC_PROG_SED. When it is available in # -# a released version of Autoconf we should remove this # -# macro and use it instead. # -############################################################ - -m4_defun([AC_PROG_SED], -[AC_MSG_CHECKING([for a sed that does not truncate output]) -AC_CACHE_VAL(lt_cv_path_SED, -[# Loop through the user's path and test for sed and gsed. -# Then use that list of sed's as ones to test for truncation. -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for lt_ac_prog in sed gsed; do - for ac_exec_ext in '' $ac_executable_extensions; do - if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then - lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" - fi - done - done -done -IFS=$as_save_IFS -lt_ac_max=0 -lt_ac_count=0 -# Add /usr/xpg4/bin/sed as it is typically found on Solaris -# along with /bin/sed that truncates output. -for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do - test ! -f $lt_ac_sed && continue - cat /dev/null > conftest.in - lt_ac_count=0 - echo $ECHO_N "0123456789$ECHO_C" >conftest.in - # Check for GNU sed and select it if it is found. - if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then - lt_cv_path_SED=$lt_ac_sed - break - fi - while true; do - cat conftest.in conftest.in >conftest.tmp - mv conftest.tmp conftest.in - cp conftest.in conftest.nl - echo >>conftest.nl - $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break - cmp -s conftest.out conftest.nl || break - # 10000 chars as input seems more than enough - test $lt_ac_count -gt 10 && break - lt_ac_count=`expr $lt_ac_count + 1` - if test $lt_ac_count -gt $lt_ac_max; then - lt_ac_max=$lt_ac_count - lt_cv_path_SED=$lt_ac_sed - fi - done -done -]) -SED=$lt_cv_path_SED -AC_SUBST([SED]) -AC_MSG_RESULT([$SED]) -])#AC_PROG_SED -])#m4_ifndef - -# Old name: -AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([LT_AC_PROG_SED], []) - - -# _LT_CHECK_SHELL_FEATURES -# ------------------------ -# Find out whether the shell is Bourne or XSI compatible, -# or has some other useful features. -m4_defun([_LT_CHECK_SHELL_FEATURES], -[AC_MSG_CHECKING([whether the shell understands some XSI constructs]) -# Try some XSI features -xsi_shell=no -( _lt_dummy="a/b/c" - test "${_lt_dummy##*/},${_lt_dummy%/*},${_lt_dummy#??}"${_lt_dummy%"$_lt_dummy"}, \ - = c,a/b,b/c, \ - && eval 'test $(( 1 + 1 )) -eq 2 \ - && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ - && xsi_shell=yes -AC_MSG_RESULT([$xsi_shell]) -_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell']) - -AC_MSG_CHECKING([whether the shell understands "+="]) -lt_shell_append=no -( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \ - >/dev/null 2>&1 \ - && lt_shell_append=yes -AC_MSG_RESULT([$lt_shell_append]) -_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append']) - -if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then - lt_unset=unset -else - lt_unset=false -fi -_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl - -# test EBCDIC or ASCII -case `echo X|tr X '\101'` in - A) # ASCII based system - # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr - lt_SP2NL='tr \040 \012' - lt_NL2SP='tr \015\012 \040\040' - ;; - *) # EBCDIC based system - lt_SP2NL='tr \100 \n' - lt_NL2SP='tr \r\n \100\100' - ;; -esac -_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl -_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl -])# _LT_CHECK_SHELL_FEATURES - - -# _LT_PROG_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) -# ------------------------------------------------------ -# In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and -# '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. -m4_defun([_LT_PROG_FUNCTION_REPLACE], -[dnl { -sed -e '/^$1 ()$/,/^} # $1 /c\ -$1 ()\ -{\ -m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) -} # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") -test 0 -eq $? || _lt_function_replace_fail=: -]) - - -# _LT_PROG_REPLACE_SHELLFNS -# ------------------------- -# Replace existing portable implementations of several shell functions with -# equivalent extended shell implementations where those features are available.. -m4_defun([_LT_PROG_REPLACE_SHELLFNS], -[if test x"$xsi_shell" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl - case ${1} in - */*) func_dirname_result="${1%/*}${2}" ;; - * ) func_dirname_result="${3}" ;; - esac - func_basename_result="${1##*/}"]) - - _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl - # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are - # positional parameters, so assign one to ordinary parameter first. - func_stripname_result=${3} - func_stripname_result=${func_stripname_result#"${1}"} - func_stripname_result=${func_stripname_result%"${2}"}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl - func_split_long_opt_name=${1%%=*} - func_split_long_opt_arg=${1#*=}]) - - _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl - func_split_short_opt_arg=${1#??} - func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) - - _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl - case ${1} in - *.lo) func_lo2o_result=${1%.lo}.${objext} ;; - *) func_lo2o_result=${1} ;; - esac]) - - _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) - - _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) - - _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) -fi - -if test x"$lt_shell_append" = xyes; then - _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) - - _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl - func_quote_for_eval "${2}" -dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ - eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) - - # Save a `func_append' function call where possible by direct use of '+=' - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -else - # Save a `func_append' function call even when '+=' is not available - sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ - && mv -f "$cfgfile.tmp" "$cfgfile" \ - || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") - test 0 -eq $? || _lt_function_replace_fail=: -fi - -if test x"$_lt_function_replace_fail" = x":"; then - AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) -fi -]) - -# _LT_PATH_CONVERSION_FUNCTIONS -# ----------------------------- -# Determine which file name conversion functions should be used by -# func_to_host_file (and, implicitly, by func_to_host_path). These are needed -# for certain cross-compile configurations and native mingw. -m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -AC_REQUIRE([AC_CANONICAL_BUILD])dnl -AC_MSG_CHECKING([how to convert $build file names to $host format]) -AC_CACHE_VAL(lt_cv_to_host_file_cmd, -[case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 - ;; - esac - ;; - *-*-cygwin* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin - ;; - *-*-cygwin* ) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; - * ) # otherwise, assume *nix - lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin - ;; - esac - ;; - * ) # unhandled hosts (and "normal" native builds) - lt_cv_to_host_file_cmd=func_convert_file_noop - ;; -esac -]) -to_host_file_cmd=$lt_cv_to_host_file_cmd -AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) -_LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], - [0], [convert $build file names to $host format])dnl - -AC_MSG_CHECKING([how to convert $build file names to toolchain format]) -AC_CACHE_VAL(lt_cv_to_tool_file_cmd, -[#assume ordinary cross tools, or native build. -lt_cv_to_tool_file_cmd=func_convert_file_noop -case $host in - *-*-mingw* ) - case $build in - *-*-mingw* ) # actually msys - lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 - ;; - esac - ;; -esac -]) -to_tool_file_cmd=$lt_cv_to_tool_file_cmd -AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) -_LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], - [0], [convert $build files to toolchain format])dnl -])# _LT_PATH_CONVERSION_FUNCTIONS diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltoptions.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltoptions.m4 deleted file mode 100644 index 5d9acd8e23..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltoptions.m4 +++ /dev/null @@ -1,384 +0,0 @@ -# Helper functions for option handling. -*- Autoconf -*- -# -# Copyright (C) 2004, 2005, 2007, 2008, 2009 Free Software Foundation, -# Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 7 ltoptions.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) - - -# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) -# ------------------------------------------ -m4_define([_LT_MANGLE_OPTION], -[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) - - -# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) -# --------------------------------------- -# Set option OPTION-NAME for macro MACRO-NAME, and if there is a -# matching handler defined, dispatch to it. Other OPTION-NAMEs are -# saved as a flag. -m4_define([_LT_SET_OPTION], -[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl -m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), - _LT_MANGLE_DEFUN([$1], [$2]), - [m4_warning([Unknown $1 option `$2'])])[]dnl -]) - - -# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) -# ------------------------------------------------------------ -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -m4_define([_LT_IF_OPTION], -[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) - - -# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) -# ------------------------------------------------------- -# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME -# are set. -m4_define([_LT_UNLESS_OPTIONS], -[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), - [m4_define([$0_found])])])[]dnl -m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 -])[]dnl -]) - - -# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) -# ---------------------------------------- -# OPTION-LIST is a space-separated list of Libtool options associated -# with MACRO-NAME. If any OPTION has a matching handler declared with -# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about -# the unknown option and exit. -m4_defun([_LT_SET_OPTIONS], -[# Set options -m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), - [_LT_SET_OPTION([$1], _LT_Option)]) - -m4_if([$1],[LT_INIT],[ - dnl - dnl Simply set some default values (i.e off) if boolean options were not - dnl specified: - _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no - ]) - _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no - ]) - dnl - dnl If no reference was made to various pairs of opposing options, then - dnl we run the default mode handler for the pair. For example, if neither - dnl `shared' nor `disable-shared' was passed, we enable building of shared - dnl archives by default: - _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) - _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) - _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], - [_LT_ENABLE_FAST_INSTALL]) - ]) -])# _LT_SET_OPTIONS - - -## --------------------------------- ## -## Macros to handle LT_INIT options. ## -## --------------------------------- ## - -# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) -# ----------------------------------------- -m4_define([_LT_MANGLE_DEFUN], -[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) - - -# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) -# ----------------------------------------------- -m4_define([LT_OPTION_DEFINE], -[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl -])# LT_OPTION_DEFINE - - -# dlopen -# ------ -LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes -]) - -AU_DEFUN([AC_LIBTOOL_DLOPEN], -[_LT_SET_OPTION([LT_INIT], [dlopen]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `dlopen' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) - - -# win32-dll -# --------- -# Declare package support for building win32 dll's. -LT_OPTION_DEFINE([LT_INIT], [win32-dll], -[enable_win32_dll=yes - -case $host in -*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) - AC_CHECK_TOOL(AS, as, false) - AC_CHECK_TOOL(DLLTOOL, dlltool, false) - AC_CHECK_TOOL(OBJDUMP, objdump, false) - ;; -esac - -test -z "$AS" && AS=as -_LT_DECL([], [AS], [1], [Assembler program])dnl - -test -z "$DLLTOOL" && DLLTOOL=dlltool -_LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl - -test -z "$OBJDUMP" && OBJDUMP=objdump -_LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl -])# win32-dll - -AU_DEFUN([AC_LIBTOOL_WIN32_DLL], -[AC_REQUIRE([AC_CANONICAL_HOST])dnl -_LT_SET_OPTION([LT_INIT], [win32-dll]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `win32-dll' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) - - -# _LT_ENABLE_SHARED([DEFAULT]) -# ---------------------------- -# implement the --enable-shared flag, and supports the `shared' and -# `disable-shared' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_SHARED], -[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([shared], - [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], - [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_shared=yes ;; - no) enable_shared=no ;; - *) - enable_shared=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_shared=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) - - _LT_DECL([build_libtool_libs], [enable_shared], [0], - [Whether or not to build shared libraries]) -])# _LT_ENABLE_SHARED - -LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) -]) - -AC_DEFUN([AC_DISABLE_SHARED], -[_LT_SET_OPTION([LT_INIT], [disable-shared]) -]) - -AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) -AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_SHARED], []) -dnl AC_DEFUN([AM_DISABLE_SHARED], []) - - - -# _LT_ENABLE_STATIC([DEFAULT]) -# ---------------------------- -# implement the --enable-static flag, and support the `static' and -# `disable-static' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_STATIC], -[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([static], - [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], - [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_static=yes ;; - no) enable_static=no ;; - *) - enable_static=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_static=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_static=]_LT_ENABLE_STATIC_DEFAULT) - - _LT_DECL([build_old_libs], [enable_static], [0], - [Whether or not to build static libraries]) -])# _LT_ENABLE_STATIC - -LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) - -# Old names: -AC_DEFUN([AC_ENABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) -]) - -AC_DEFUN([AC_DISABLE_STATIC], -[_LT_SET_OPTION([LT_INIT], [disable-static]) -]) - -AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) -AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AM_ENABLE_STATIC], []) -dnl AC_DEFUN([AM_DISABLE_STATIC], []) - - - -# _LT_ENABLE_FAST_INSTALL([DEFAULT]) -# ---------------------------------- -# implement the --enable-fast-install flag, and support the `fast-install' -# and `disable-fast-install' LT_INIT options. -# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. -m4_define([_LT_ENABLE_FAST_INSTALL], -[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl -AC_ARG_ENABLE([fast-install], - [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], - [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], - [p=${PACKAGE-default} - case $enableval in - yes) enable_fast_install=yes ;; - no) enable_fast_install=no ;; - *) - enable_fast_install=no - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for pkg in $enableval; do - IFS="$lt_save_ifs" - if test "X$pkg" = "X$p"; then - enable_fast_install=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) - -_LT_DECL([fast_install], [enable_fast_install], [0], - [Whether or not to optimize for fast installation])dnl -])# _LT_ENABLE_FAST_INSTALL - -LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) -LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) - -# Old names: -AU_DEFUN([AC_ENABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `fast-install' option into LT_INIT's first parameter.]) -]) - -AU_DEFUN([AC_DISABLE_FAST_INSTALL], -[_LT_SET_OPTION([LT_INIT], [disable-fast-install]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you put -the `disable-fast-install' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) -dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) - - -# _LT_WITH_PIC([MODE]) -# -------------------- -# implement the --with-pic flag, and support the `pic-only' and `no-pic' -# LT_INIT options. -# MODE is either `yes' or `no'. If omitted, it defaults to `both'. -m4_define([_LT_WITH_PIC], -[AC_ARG_WITH([pic], - [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], - [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], - [lt_p=${PACKAGE-default} - case $withval in - yes|no) pic_mode=$withval ;; - *) - pic_mode=default - # Look at the argument we got. We use all the common list separators. - lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," - for lt_pkg in $withval; do - IFS="$lt_save_ifs" - if test "X$lt_pkg" = "X$lt_p"; then - pic_mode=yes - fi - done - IFS="$lt_save_ifs" - ;; - esac], - [pic_mode=default]) - -test -z "$pic_mode" && pic_mode=m4_default([$1], [default]) - -_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl -])# _LT_WITH_PIC - -LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) -LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) - -# Old name: -AU_DEFUN([AC_LIBTOOL_PICMODE], -[_LT_SET_OPTION([LT_INIT], [pic-only]) -AC_DIAGNOSE([obsolete], -[$0: Remove this warning and the call to _LT_SET_OPTION when you -put the `pic-only' option into LT_INIT's first parameter.]) -]) - -dnl aclocal-1.4 backwards compatibility: -dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) - -## ----------------- ## -## LTDL_INIT Options ## -## ----------------- ## - -m4_define([_LTDL_MODE], []) -LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], - [m4_define([_LTDL_MODE], [nonrecursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [recursive], - [m4_define([_LTDL_MODE], [recursive])]) -LT_OPTION_DEFINE([LTDL_INIT], [subproject], - [m4_define([_LTDL_MODE], [subproject])]) - -m4_define([_LTDL_TYPE], []) -LT_OPTION_DEFINE([LTDL_INIT], [installable], - [m4_define([_LTDL_TYPE], [installable])]) -LT_OPTION_DEFINE([LTDL_INIT], [convenience], - [m4_define([_LTDL_TYPE], [convenience])]) diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltsugar.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltsugar.m4 deleted file mode 100644 index 9000a057d3..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltsugar.m4 +++ /dev/null @@ -1,123 +0,0 @@ -# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc. -# Written by Gary V. Vaughan, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 6 ltsugar.m4 - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) - - -# lt_join(SEP, ARG1, [ARG2...]) -# ----------------------------- -# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their -# associated separator. -# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier -# versions in m4sugar had bugs. -m4_define([lt_join], -[m4_if([$#], [1], [], - [$#], [2], [[$2]], - [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) -m4_define([_lt_join], -[m4_if([$#$2], [2], [], - [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) - - -# lt_car(LIST) -# lt_cdr(LIST) -# ------------ -# Manipulate m4 lists. -# These macros are necessary as long as will still need to support -# Autoconf-2.59 which quotes differently. -m4_define([lt_car], [[$1]]) -m4_define([lt_cdr], -[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], - [$#], 1, [], - [m4_dquote(m4_shift($@))])]) -m4_define([lt_unquote], $1) - - -# lt_append(MACRO-NAME, STRING, [SEPARATOR]) -# ------------------------------------------ -# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'. -# Note that neither SEPARATOR nor STRING are expanded; they are appended -# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). -# No SEPARATOR is output if MACRO-NAME was previously undefined (different -# than defined and empty). -# -# This macro is needed until we can rely on Autoconf 2.62, since earlier -# versions of m4sugar mistakenly expanded SEPARATOR but not STRING. -m4_define([lt_append], -[m4_define([$1], - m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) - - - -# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) -# ---------------------------------------------------------- -# Produce a SEP delimited list of all paired combinations of elements of -# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list -# has the form PREFIXmINFIXSUFFIXn. -# Needed until we can rely on m4_combine added in Autoconf 2.62. -m4_define([lt_combine], -[m4_if(m4_eval([$# > 3]), [1], - [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl -[[m4_foreach([_Lt_prefix], [$2], - [m4_foreach([_Lt_suffix], - ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, - [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) - - -# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) -# ----------------------------------------------------------------------- -# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited -# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. -m4_define([lt_if_append_uniq], -[m4_ifdef([$1], - [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], - [lt_append([$1], [$2], [$3])$4], - [$5])], - [lt_append([$1], [$2], [$3])$4])]) - - -# lt_dict_add(DICT, KEY, VALUE) -# ----------------------------- -m4_define([lt_dict_add], -[m4_define([$1($2)], [$3])]) - - -# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) -# -------------------------------------------- -m4_define([lt_dict_add_subkey], -[m4_define([$1($2:$3)], [$4])]) - - -# lt_dict_fetch(DICT, KEY, [SUBKEY]) -# ---------------------------------- -m4_define([lt_dict_fetch], -[m4_ifval([$3], - m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), - m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) - - -# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) -# ----------------------------------------------------------------- -m4_define([lt_if_dict_fetch], -[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], - [$5], - [$6])]) - - -# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) -# -------------------------------------------------------------- -m4_define([lt_dict_filter], -[m4_if([$5], [], [], - [lt_join(m4_quote(m4_default([$4], [[, ]])), - lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), - [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl -]) diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltversion.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltversion.m4 deleted file mode 100644 index 07a8602d48..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/ltversion.m4 +++ /dev/null @@ -1,23 +0,0 @@ -# ltversion.m4 -- version numbers -*- Autoconf -*- -# -# Copyright (C) 2004 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004 -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# @configure_input@ - -# serial 3337 ltversion.m4 -# This file is part of GNU Libtool - -m4_define([LT_PACKAGE_VERSION], [2.4.2]) -m4_define([LT_PACKAGE_REVISION], [1.3337]) - -AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.4.2' -macro_revision='1.3337' -_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) -_LT_DECL(, macro_revision, 0) -]) diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/lt~obsolete.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/lt~obsolete.m4 deleted file mode 100644 index c573da90c5..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/lt~obsolete.m4 +++ /dev/null @@ -1,98 +0,0 @@ -# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- -# -# Copyright (C) 2004, 2005, 2007, 2009 Free Software Foundation, Inc. -# Written by Scott James Remnant, 2004. -# -# This file is free software; the Free Software Foundation gives -# unlimited permission to copy and/or distribute it, with or without -# modifications, as long as this notice is preserved. - -# serial 5 lt~obsolete.m4 - -# These exist entirely to fool aclocal when bootstrapping libtool. -# -# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN) -# which have later been changed to m4_define as they aren't part of the -# exported API, or moved to Autoconf or Automake where they belong. -# -# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN -# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us -# using a macro with the same name in our local m4/libtool.m4 it'll -# pull the old libtool.m4 in (it doesn't see our shiny new m4_define -# and doesn't know about Autoconf macros at all.) -# -# So we provide this file, which has a silly filename so it's always -# included after everything else. This provides aclocal with the -# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything -# because those macros already exist, or will be overwritten later. -# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. -# -# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. -# Yes, that means every name once taken will need to remain here until -# we give up compatibility with versions before 1.7, at which point -# we need to keep only those names which we still refer to. - -# This is to help aclocal find these macros, as it can't see m4_define. -AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) - -m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) -m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) -m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) -m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) -m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) -m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) -m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) -m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) -m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) -m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) -m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) -m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) -m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) -m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) -m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) -m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) -m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) -m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) -m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) -m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) -m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) -m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) -m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) -m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) -m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) -m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) -m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) -m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) -m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) -m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) -m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) -m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) -m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) -m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) -m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) -m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) -m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) -m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) -m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) -m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) -m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) -m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) -m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) -m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) -m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) -m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) -m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) -m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) -m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) -m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) -m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) -m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) -m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) -m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) -m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/m4/osx-universal.m4 b/java/leveldbjni/leveldbjni/src/main/native-package/m4/osx-universal.m4 deleted file mode 100644 index 1b726bda4b..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/m4/osx-universal.m4 +++ /dev/null @@ -1,115 +0,0 @@ -dnl --------------------------------------------------------------------------- -dnl Copyright (C) 2009-2011 FuseSource Corp. -dnl http://fusesource.com -dnl -dnl Licensed under the Apache License, Version 2.0 (the "License"); -dnl you may not use this file except in compliance with the License. -dnl You may obtain a copy of the License at -dnl -dnl http://www.apache.org/licenses/LICENSE-2.0 -dnl -dnl Unless required by applicable law or agreed to in writing, software -dnl distributed under the License is distributed on an "AS IS" BASIS, -dnl WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -dnl See the License for the specific language governing permissions and -dnl limitations under the License. -dnl --------------------------------------------------------------------------- -dnl --------------------------------------------------------------------------- -dnl SYNOPSIS: -dnl -dnl WITH_OSX_UNIVERSAL() -dnl -dnl Allows creating universal binaries on the -dnl -dnl Adds the --with-universal=ARCH option. This will will -dnl set -isysroot option to the location of the MacOSX${OSX_VERSION}.sdk. -dnl if OSX_VERSION is not defined, it will set it to the latest version -dnl of the SDK installed on your system. -dnl -dnl You must use the no-dependencies option when automake is initialized. -dnl for example: AM_INIT_AUTOMAKE([no-dependencies]) -dnl -dnl This macro calls: -dnl AC_SUBST(CFLAGS) -dnl AC_SUBST(CXXFLAGS) -dnl AC_SUBST(LDFLAGS) -dnl AC_SUBST(OSX_VERSION) -dnl -dnl AUTHOR: Hiram Chrino -dnl --------------------------------------------------------------------------- - -AC_DEFUN([WITH_OSX_UNIVERSAL], -[ - AC_PREREQ([2.61]) - case "$host_os" in - darwin*) - - AC_MSG_CHECKING(OS X SDK version) - AC_ARG_WITH([osxsdk], - [AS_HELP_STRING([--with-osxsdk@<:@=VERSION@:>@], - [OS X SDK version to build against. Example: --with-osxsdk=10.6])], - [ - OSX_UNIVERSAL="$withval" - ],[ - OSX_SDKS_DIR="" - OSX_VERSION="" - for v in 10.0 10.1 10.2 10.3 10.4 10.5 10.6 10.7 10.8 10.9 10.10 10.11 10.12; do - for location in "/Developer/SDKs" "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs" ; do - if test -z "${OSX_VERSION}" && test -d "${location}/MacOSX${v}.sdk" ; then - OSX_SDKS_DIR="${location}" - OSX_VERSION="${v}" - fi - done - done - ]) - AC_MSG_RESULT([$OSX_VERSION]) - AC_SUBST(OSX_SDKS_DIR) - AC_SUBST(OSX_VERSION) - - AC_MSG_CHECKING(whether to build universal binaries) - AC_ARG_WITH([universal], - [AS_HELP_STRING([--with-universal@<:@=ARCH@:>@], - [Build a universal binary. Set to a space separated architecture list. Pick from: i386, x86_64, ppc, and/or ppc64. @<:@default="i386 x86_64"@:>@])], - [ - AS_IF(test "$withval" = "no", [ - OSX_UNIVERSAL="" - AC_MSG_RESULT([no]) - ], test "$withval" = "yes", [ - OSX_UNIVERSAL="i386 x86_64" - AC_MSG_RESULT([yes, archs: $OSX_UNIVERSAL]) - ],[ - OSX_UNIVERSAL="$withval" - AC_MSG_RESULT([yes, archs: $OSX_UNIVERSAL]) - ]) - ],[ - OSX_UNIVERSAL="" - AC_MSG_RESULT([no]) - ]) - - AS_IF(test -n "$OSX_UNIVERSAL", [ - for i in $OSX_UNIVERSAL ; do - CFLAGS="-arch $i $CFLAGS" - CXXFLAGS="-arch $i $CXXFLAGS" - LDFLAGS="-arch $i $LDFLAGS" - done - - - for f in $__JNI_INCLUDE_EXTRAS ; do - if test -d "$__JNI_INCLUDE/$f"; then - __JNI_CFLAGS="$__JNI_CFLAGS -I$__JNI_INCLUDE/$f" - fi - done - - - CFLAGS="-isysroot ${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $CFLAGS" - CXXFLAGS="-isysroot ${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $CXXFLAGS" - LDFLAGS="-syslibroot,${OSX_SDKS_DIR}/MacOSX${OSX_VERSION}.sdk $LDFLAGS" - AC_SUBST(CFLAGS) - AC_SUBST(CXXFLAGS) - AC_SUBST(LDFLAGS) - ]) - ;; - esac -]) - - diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/src/buffer.c b/java/leveldbjni/leveldbjni/src/main/native-package/src/buffer.c deleted file mode 100644 index c2beaf288d..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/src/buffer.c +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ -#include "leveldbjni.h" - -void buffer_copy(const void *source, size_t source_pos, void *dest, size_t dest_pos, size_t length) { - memmove(((char *)dest)+dest_pos, ((const char *)source)+source_pos, length); -} diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/src/config.h.in b/java/leveldbjni/leveldbjni/src/main/native-package/src/config.h.in deleted file mode 100644 index ba1af84c72..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/src/config.h.in +++ /dev/null @@ -1,68 +0,0 @@ -/* src/config.h.in. Generated from configure.ac by autoheader. */ - -/* Define to 1 if you have the header file. */ -#undef HAVE_DLFCN_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_INTTYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_MEMORY_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_PTHREAD_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDINT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STDLIB_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRINGS_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_STRING_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_ERRNO_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_STAT_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_SYS_TYPES_H - -/* Define to 1 if you have the header file. */ -#undef HAVE_UNISTD_H - -/* Define to the sub-directory in which libtool stores uninstalled libraries. - */ -#undef LT_OBJDIR - -/* Name of package */ -#undef PACKAGE - -/* Define to the address where bug reports for this package should be sent. */ -#undef PACKAGE_BUGREPORT - -/* Define to the full name of this package. */ -#undef PACKAGE_NAME - -/* Define to the full name and version of this package. */ -#undef PACKAGE_STRING - -/* Define to the one symbol short name of this package. */ -#undef PACKAGE_TARNAME - -/* Define to the home page for this package. */ -#undef PACKAGE_URL - -/* Define to the version of this package. */ -#undef PACKAGE_VERSION - -/* Define to 1 if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Version number of package */ -#undef VERSION diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/src/leveldbjni.h b/java/leveldbjni/leveldbjni/src/main/native-package/src/leveldbjni.h deleted file mode 100755 index 7006317f89..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/src/leveldbjni.h +++ /dev/null @@ -1,142 +0,0 @@ -/******************************************************************************* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - *******************************************************************************/ -#ifndef LEVELDBJNI_H -#define LEVELDBJNI_H - -#ifdef HAVE_CONFIG_H - /* configure based build.. we will use what it discovered about the platform */ - #include "config.h" -#else - #if defined(_WIN32) || defined(_WIN64) - /* Windows based build */ - #define HAVE_STDLIB_H 1 - #define HAVE_STRINGS_H 1 - #include - #endif -#endif - -#ifdef HAVE_UNISTD_H - #include -#endif - -#ifdef HAVE_STDLIB_H - #include -#endif - -#ifdef HAVE_STRINGS_H - #include -#endif - -#ifdef HAVE_SYS_ERRNO_H - #include -#endif - -#include "hawtjni.h" -#include -#include - -#ifdef __cplusplus - -#include "leveldb/db.h" -#include "leveldb/options.h" -#include "leveldb/write_batch.h" -#include "leveldb/cache.h" -#include "leveldb/comparator.h" -#include "leveldb/env.h" -#include "leveldb/slice.h" - -struct JNIComparator : public rocksdb::Comparator { - jobject target; - jmethodID compare_method; - const char *name; - - int Compare(const rocksdb::Slice& a, const rocksdb::Slice& b) const { - JNIEnv *env; - if ( hawtjni_attach_thread(&env, "leveldb") ) { - return 0; - } - int rc = env->CallIntMethod(target, compare_method, (jlong)(intptr_t)&a, (jlong)(intptr_t)&b); - hawtjni_detach_thread(); - return rc; - } - - const char* Name() const { - return name; - } - - void FindShortestSeparator(std::string*, const rocksdb::Slice&) const { } - void FindShortSuccessor(std::string*) const { } -}; - -struct JNILogger : public rocksdb::Logger { - jobject target; - jmethodID log_method; - - void Logv(const char* format, va_list ap) { - JNIEnv *env; - if ( hawtjni_attach_thread(&env, "leveldb") ) { - return; - } - - char buffer[1024]; - vsnprintf(buffer, sizeof(buffer), format, ap); - - jstring message = env->NewStringUTF(buffer); - if( message ) { - env->CallVoidMethod(target, log_method, message); - env->DeleteLocalRef(message); - } - - if (env->ExceptionOccurred() ) { - env->ExceptionDescribe(); - env->ExceptionClear(); - } - hawtjni_detach_thread(); - } - -}; - -#endif - - -#ifdef __cplusplus -extern "C" { -#endif - -void buffer_copy(const void *source, size_t source_pos, void *dest, size_t dest_pos, size_t length); - -#ifdef __cplusplus -} /* extern "C" */ -#endif - - -#endif /* LEVELDBJNI_H */ diff --git a/java/leveldbjni/leveldbjni/src/main/native-package/vs2010.vcxproj b/java/leveldbjni/leveldbjni/src/main/native-package/vs2010.vcxproj deleted file mode 100755 index 3c59b4a8ef..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/native-package/vs2010.vcxproj +++ /dev/null @@ -1,194 +0,0 @@ - - - - - - debug - Win32 - - - debug - x64 - - - release - Win32 - - - release - x64 - - - - leveldbjni - leveldbjni - - - - DynamicLibrary - Unicode - - - DynamicLibrary - Unicode - true - - - DynamicLibrary - Unicode - - - DynamicLibrary - Unicode - true - - - - - - - - - - - - - - - - - - - <_ProjectFileVersion>10.0.30319.1 - $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ - $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ - false - $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ - $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ - false - $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ - $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ - true - $(ProjectDir)/target/$(Platform)-$(Configuration)/lib\ - $(ProjectDir)/target/$(Platform)-$(Configuration)/obj\ - true - - - - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) - MaxSpeed - true - Speed - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - false - - - Level3 - ProgramDatabase - - - true - Windows - true - true - MachineX86 - - - - - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) - MaxSpeed - true - Speed - WIN64;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - Sync - MultiThreadedDLL - true - false - - - Level3 - ProgramDatabase - - - true - Windows - true - true - MachineX64 - - - - - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) - Disabled - Speed - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - Sync - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - - - true - Windows - MachineX86 - - - - - $(JAVA_HOME)\include;$(JAVA_HOME)\include\win32;$(ProjectDir)\src\windows;%(AdditionalIncludeDirectories) - Disabled - Speed - WIN64;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - Sync - EnableFastChecks - MultiThreadedDebugDLL - false - - - Level3 - EditAndContinue - - - true - Windows - MachineX64 - - - - - - - - - - - - SNAPPY;LEVELDB_PLATFORM_WINDOWS;OS_WIN;%(PreprocessorDefinitions) - $(LEVELDB_HOME);$(LEVELDB_HOME)\include;$(LEVELDB_HOME)\port\win;$(SNAPPY_HOME);%(AdditionalIncludeDirectories) - - - - - shlwapi.lib;$(LEVELDB_HOME)\Release\leveldb.lib;%(AdditionalDependencies) - - - - - shlwapi.lib;$(LEVELDB_HOME)\x64\Release\leveldb.lib;%(AdditionalDependencies) - - - - - - \ No newline at end of file diff --git a/java/leveldbjni/leveldbjni/src/main/resources/org/fusesource/leveldbjni/version.txt b/java/leveldbjni/leveldbjni/src/main/resources/org/fusesource/leveldbjni/version.txt deleted file mode 100644 index f2ab45c3b0..0000000000 --- a/java/leveldbjni/leveldbjni/src/main/resources/org/fusesource/leveldbjni/version.txt +++ /dev/null @@ -1 +0,0 @@ -${project.version} \ No newline at end of file diff --git a/java/leveldbjni/leveldbjni/src/test/java/org/fusesource/leveldbjni/test/DBTest.java b/java/leveldbjni/leveldbjni/src/test/java/org/fusesource/leveldbjni/test/DBTest.java deleted file mode 100644 index 4d4a45f43c..0000000000 --- a/java/leveldbjni/leveldbjni/src/test/java/org/fusesource/leveldbjni/test/DBTest.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright (C) 2011, FuseSource Corp. All rights reserved. - * - * http://fusesource.com - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of FuseSource Corp. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package org.fusesource.leveldbjni.test; - -import junit.framework.TestCase; -import org.fusesource.leveldbjni.JniDBFactory; -import org.fusesource.leveldbjni.internal.JniDB; -import org.iq80.leveldb.*; -import org.junit.Test; - -import java.io.File; -import java.io.IOException; -import java.util.*; - -import static org.fusesource.leveldbjni.JniDBFactory.asString; -import static org.fusesource.leveldbjni.JniDBFactory.bytes; - -/** - * A Unit test for the DB class implementation. - * - * @author Hiram Chirino - */ -public class DBTest extends TestCase { - DBFactory factory = JniDBFactory.factory; - - File getTestDirectory(String name) throws IOException { - File rc = new File(new File("test-data"), name); - factory.destroy(rc, new Options().createIfMissing(true)); - rc.mkdirs(); - return rc; - } - - @Test - public void testOpen() throws IOException { - - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - db.close(); - - // Try again.. this time we expect a failure since it exists. - options = new Options().errorIfExists(true); - try { - factory.open(path, options); - fail("Expected exception."); - } catch (IOException e) { - } - - } - - @Test - public void testRepair() throws IOException, DBException { - testCRUD(); - factory.repair(new File(new File("test-data"), getName()), new Options()); - } - - @Test - public void testCRUD() throws IOException, DBException { - - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - WriteOptions wo = new WriteOptions().sync(false); - ReadOptions ro = new ReadOptions().fillCache(true).verifyChecksums(true); - - db.put(bytes("Tampa"), bytes("green")); - db.put(bytes("London"), bytes("red")); - db.put(bytes("New York"), bytes("blue")); - - assertEquals(db.get(bytes("Tampa"), ro), bytes("green")); - assertEquals(db.get(bytes("London"), ro), bytes("red")); - assertEquals(db.get(bytes("New York"), ro), bytes("blue")); - - db.delete(bytes("New York"), wo); - assertNull(db.get(bytes("New York"), ro)); - - // leveldb does not consider deleting something that does not exist an error. - db.delete(bytes("New York"), wo); - - db.close(); - } - - @Test - public void testIterator() throws IOException, DBException { - - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - db.put(bytes("Tampa"), bytes("green")); - db.put(bytes("London"), bytes("red")); - db.put(bytes("New York"), bytes("blue")); - - ArrayList expecting = new ArrayList(); - expecting.add("London"); - expecting.add("New York"); - expecting.add("Tampa"); - - ArrayList actual = new ArrayList(); - - DBIterator iterator = db.iterator(); - for (iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { - actual.add(asString(iterator.peekNext().getKey())); - } - iterator.close(); - assertEquals(expecting, actual); - - db.close(); - } - - @Test - public void testSnapshot() throws IOException, DBException { - - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - db.put(bytes("Tampa"), bytes("green")); - db.put(bytes("London"), bytes("red")); - db.delete(bytes("New York")); - - ReadOptions ro = new ReadOptions().snapshot(db.getSnapshot()); - - db.put(bytes("New York"), bytes("blue")); - - assertEquals(db.get(bytes("Tampa"), ro), bytes("green")); - assertEquals(db.get(bytes("London"), ro), bytes("red")); - - // Should not be able to get "New York" since it was added - // after the snapshot - assertNull(db.get(bytes("New York"), ro)); - - ro.snapshot().close(); - - // Now try again without the snapshot.. - ro.snapshot(null); - assertEquals(db.get(bytes("New York"), ro), bytes("blue")); - - db.close(); - } - - @Test - public void testWriteBatch() throws IOException, DBException { - - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - db.put(bytes("NA"), bytes("Na")); - - WriteBatch batch = db.createWriteBatch(); - batch.delete(bytes("NA")); - batch.put(bytes("Tampa"), bytes("green")); - batch.put(bytes("London"), bytes("red")); - batch.put(bytes("New York"), bytes("blue")); - db.write(batch); - batch.close(); - - ArrayList expecting = new ArrayList(); - expecting.add("London"); - expecting.add("New York"); - expecting.add("Tampa"); - - ArrayList actual = new ArrayList(); - - DBIterator iterator = db.iterator(); - for (iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { - actual.add(asString(iterator.peekNext().getKey())); - } - iterator.close(); - assertEquals(expecting, actual); - - db.close(); - } - - @Test - public void testApproximateSizes() throws IOException, DBException { - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - Random r = new Random(0); - String data=""; - for(int i=0; i < 1024; i++) { - data+= 'a'+r.nextInt(26); - } - for(int i=0; i < 5*1024; i++) { - db.put(bytes("row"+i), bytes(data)); - } - - long[] approximateSizes = db.getApproximateSizes(new Range(bytes("row"), bytes("s"))); - assertNotNull(approximateSizes); - assertEquals(1, approximateSizes.length); - assertTrue("Wrong size", approximateSizes[0] > 0); - - db.close(); - } - - @Test - public void testGetProperty() throws IOException, DBException { - Options options = new Options().createIfMissing(true); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - Random r = new Random(0); - String data=""; - for(int i=0; i < 1024; i++) { - data+= 'a'+r.nextInt(26); - } - for(int i=0; i < 5*1024; i++) { - db.put(bytes("row"+i), bytes(data)); - } - - String stats = db.getProperty("leveldb.stats"); - assertNotNull(stats); - assertTrue(stats.contains("Compactions")); - - db.close(); - } - - @Test - public void testCustomComparator1() throws IOException, DBException { - Options options = new Options().createIfMissing(true); - options.comparator(new DBComparator() { - - public int compare(byte[] key1, byte[] key2) { - return new String(key1).compareTo(new String(key2)); - } - - public String name() { - return getName(); - } - - public byte[] findShortestSeparator(byte[] start, byte[] limit) { - return start; - } - - public byte[] findShortSuccessor(byte[] key) { - return key; - } - }); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - ArrayList expecting = new ArrayList(); - for(int i=0; i < 26; i++) { - String t = ""+ ((char) ('a' + i)); - expecting.add(t); - db.put(bytes(t), bytes(t)); - } - - ArrayList actual = new ArrayList(); - - DBIterator iterator = db.iterator(); - for (iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { - actual.add(asString(iterator.peekNext().getKey())); - } - iterator.close(); - assertEquals(expecting, actual); - - - db.close(); - } - - @Test - public void testCustomComparator2() throws IOException, DBException { - Options options = new Options().createIfMissing(true); - options.comparator(new DBComparator() { - - public int compare(byte[] key1, byte[] key2) { - return new String(key1).compareTo(new String(key2)) * -1; - } - - public String name() { - return getName(); - } - - public byte[] findShortestSeparator(byte[] start, byte[] limit) { - return start; - } - - public byte[] findShortSuccessor(byte[] key) { - return key; - } - }); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - ArrayList expecting = new ArrayList(); - for(int i=0; i < 26; i++) { - String t = ""+ ((char) ('a' + i)); - expecting.add(t); - db.put(bytes(t), bytes(t)); - } - Collections.reverse(expecting); - - ArrayList actual = new ArrayList(); - DBIterator iterator = db.iterator(); - for (iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { - actual.add(asString(iterator.peekNext().getKey())); - } - iterator.close(); - assertEquals(expecting, actual); - - db.close(); - } - - @Test - public void testLogger() throws IOException, InterruptedException, DBException { - final List messages = Collections.synchronizedList(new ArrayList()); - - Options options = new Options().createIfMissing(true); - options.logger(new Logger() { - public void log(String message) { - messages.add(message); - } - }); - - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - - for( int j=0; j < 5; j++) { - Random r = new Random(0); - String data=""; - for(int i=0; i < 1024; i++) { - data+= 'a'+r.nextInt(26); - } - for(int i=0; i < 5*1024; i++) { - db.put(bytes("row"+i), bytes(data)); - } - Thread.sleep(100); - } - - db.close(); - - assertFalse(messages.isEmpty()); - - } - - @Test - public void testCompactRanges() throws IOException, InterruptedException, DBException { - Options options = new Options().createIfMissing(true); - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - if( db instanceof JniDB) { - Random r = new Random(0); - String data=""; - for(int i=0; i < 1024; i++) { - data+= 'a'+r.nextInt(26); - } - for(int i=0; i < 5*1024; i++) { - db.put(bytes("row"+i), bytes(data)); - } - for(int i=0; i < 5*1024; i++) { - db.delete(bytes("row" + i)); - } - - String stats = db.getProperty("leveldb.stats"); - System.out.println(stats); - - // Compactions - // Level Files Size(MB) Time(sec) Read(MB) Write(MB) - // -------------------------------------------------- - assertFalse(stats.contains("1 0 0 0")); - assertFalse(stats.contains("2 0 0 0")); - - // After the compaction, level 1 and 2 should not have any files in it.. - ((JniDB) db).compactRange(null, null); - - stats = db.getProperty("leveldb.stats"); - System.out.println(stats); - assertTrue(stats.contains("1 0 0 0")); - assertTrue(stats.contains("2 0 0 0")); - - } - db.close(); - } - - @Test - public void testSuspendAndResumeCompactions() throws Exception { - Options options = new Options().createIfMissing(true); - File path = getTestDirectory(getName()); - DB db = factory.open(path, options); - db.suspendCompactions(); - db.resumeCompactions(); - db.close(); - } - - public void assertEquals(byte[] arg1, byte[] arg2) { - assertTrue(Arrays.equals(arg1, arg2)); - } -} diff --git a/java/leveldbjni/license.txt b/java/leveldbjni/license.txt deleted file mode 100644 index 8edd375909..0000000000 --- a/java/leveldbjni/license.txt +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2011 FuseSource Corp. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright -notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above -copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the -distribution. - * Neither the name of FuseSource Corp. nor the names of its -contributors may be used to endorse or promote products derived from -this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/java/leveldbjni/pom.xml b/java/leveldbjni/pom.xml deleted file mode 100755 index 755c8dd664..0000000000 --- a/java/leveldbjni/pom.xml +++ /dev/null @@ -1,323 +0,0 @@ - - - - - 4.0.0 - - org.fusesource - fusesource-pom - 1.9 - - - org.fusesource.leveldbjni.fb - leveldbjni-project - 1.5.7 - pom - - ${project.artifactId} - leveldbjni is a jni library for accessing leveldb. - - - leveldbjni - LEVELDBJNI - UTF-8 - 1.6 - 0.4 - nexus.vip.facebook.com:8181 - 1.7 - - http://${project.nexus.hostPort}/nexus/content/repositories/libs-releases-local - - - http://${project.nexus.hostPort}/nexus/content/repositories/libs-snapshots-local - - - - - leveldbjni - - - http://${forge-project-id}.fusesource.org - 2009 - - - github - https://github.com/fusesource/leveldbjni/issues - - - - - ${forge-project-id} dev - ${forge-project-id}-dev@fusesource.org - ${forge-project-id}-dev-subscribe@fusesource.org - - - ${forge-project-id} commits - ${forge-project-id}-commits@fusesource.org - ${forge-project-id}-commits-subscribe@fusesource.org - - - - - - The BSD 3-Clause License - http://www.opensource.org/licenses/BSD-3-Clause - repo - - - - - scm:git:git://github.com/fusesource/leveldbjni.git - scm:git:git@github.com:fusesource/leveldbjni.git - https://github.com/fusesource/leveldbjni - - - - - libs-releases-local - ${project.libs-releases-local-url} - - - libs-snapshots-local - ${project.libs-snapshots-local-url} - - - - - - chirino - Hiram Chirino - hiram@hiramchirino.com - http://hiramchirino.com - GMT-5 - - - - - - junit - junit - 4.7 - test - - - - - - - - - org.apache.maven.plugins - maven-clean-plugin - 2.3 - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 1.5 - 1.5 - - - - - org.apache.maven.plugins - maven-release-plugin - 2.3.1 - - false - true - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.4.3 - - true - once - -ea - false - ${project.build.directory} - - **/*Test.java - - - - - - - - - - org.codehaus.mojo - jxr-maven-plugin - 2.0-beta-1 - - true - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.6 - - *.internal - true - - http://java.sun.com/j2se/1.5.0/docs/api - - - - - org.apache.maven.plugins - maven-project-info-reports-plugin - 2.1.1 - - - - index - sumary - plugins - dependencies - mailing-list - issue-tracking - license - scm - - - - - - org.codehaus.mojo - surefire-report-maven-plugin - 2.0-beta-1 - - - org.apache.maven.plugins - maven-plugin-plugin - 2.5 - - - - - - - - download - - - fusesource.nexus.snapshot - FuseSource Community Snapshot Repository - http://repo.fusesource.com/nexus/content/groups/public-snapshots - - - sonatype-nexus - Sonatype Nexus - https://oss.sonatype.org/content/repositories/public - true - true - - - - - fusesource.nexus.snapshot - FuseSource Community Snapshot Repository - http://repo.fusesource.com/nexus/content/groups/public-snapshots - - - - - - full - - leveldbjni-osx - leveldbjni-linux32 - leveldbjni-linux64 - leveldbjni-win32 - leveldbjni-win64 - leveldbjni-all - - - - - all - - leveldbjni-all - - - - osx - - leveldbjni-osx - - - - - linux32 - - leveldbjni-linux32 - - - - - linux64 - - leveldbjni-linux64 - - - - - win32 - - true - - - leveldbjni-win32 - - - - - win64 - - true - - - leveldbjni-win64 - - - - - diff --git a/java/leveldbjni/readme.md b/java/leveldbjni/readme.md deleted file mode 100644 index 1ca9d42bc7..0000000000 --- a/java/leveldbjni/readme.md +++ /dev/null @@ -1,248 +0,0 @@ -# LevelDB JNI - -## Description - -LevelDB JNI gives you a Java interface to the -[LevelDB](http://code.google.com/p/leveldb/) C++ library -which is a fast key-value storage library written at Google -that provides an ordered mapping from string keys to string values.. - - -## Using as a Maven Dependency - -You just nee to add the following repositories and dependencies to your Maven pom. - - - - fusesource.nexus.snapshot - FuseSource Community Snapshot Repository - http://repo.fusesource.com/nexus/content/groups/public-snapshots - - - - - - org.fusesource.leveldbjni - leveldbjni-all - 1.1 - - - -## API Usage: - -Recommended Package imports: - - import org.iq80.leveldb.*; - import static org.fusesource.leveldbjni.JniDBFactory.*; - import java.io.*; - -Opening and closing the database. - - Options options = new Options(); - options.createIfMissing(true); - DB db = factory.open(new File("example"), options); - try { - // Use the db in here.... - } finally { - // Make sure you close the db to shutdown the - // database and avoid resource leaks. - db.close(); - } - -Putting, Getting, and Deleting key/values. - - db.put(bytes("Tampa"), bytes("rocks")); - String value = asString(db.get(bytes("Tampa"))); - db.delete(wo, bytes("Tampa")); - -Performing Batch/Bulk/Atomic Updates. - - WriteBatch batch = db.createWriteBatch(); - try { - batch.delete(bytes("Denver")); - batch.put(bytes("Tampa"), bytes("green")); - batch.put(bytes("London"), bytes("red")); - - db.write(batch); - } finally { - // Make sure you close the batch to avoid resource leaks. - batch.close(); - } - -Iterating key/values. - - DBIterator iterator = db.iterator(); - try { - for(iterator.seekToFirst(); iterator.hasNext(); iterator.next()) { - String key = asString(iterator.peekNext().getKey()); - String value = asString(iterator.peekNext().getValue()); - System.out.println(key+" = "+value); - } - } finally { - // Make sure you close the iterator to avoid resource leaks. - iterator.close(); - } - -Working against a Snapshot view of the Database. - - ReadOptions ro = new ReadOptions(); - ro.snapshot(db.getSnapshot()); - try { - - // All read operations will now use the same - // consistent view of the data. - ... = db.iterator(ro); - ... = db.get(bytes("Tampa"), ro); - - } finally { - // Make sure you close the snapshot to avoid resource leaks. - ro.snapshot().close(); - } - -Using a custom Comparator. - - DBComparator comparator = new DBComparator(){ - public int compare(byte[] key1, byte[] key2) { - return new String(key1).compareTo(new String(key2)); - } - public String name() { - return "simple"; - } - public byte[] findShortestSeparator(byte[] start, byte[] limit) { - return start; - } - public byte[] findShortSuccessor(byte[] key) { - return key; - } - }; - Options options = new Options(); - options.comparator(comparator); - DB db = factory.open(new File("example"), options); - -Disabling Compression - - Options options = new Options(); - options.compressionType(CompressionType.NONE); - DB db = factory.open(new File("example"), options); - -Configuring the Cache - - Options options = new Options(); - options.cacheSize(100 * 1048576); // 100MB cache - DB db = factory.open(new File("example"), options); - -Getting approximate sizes. - - long[] sizes = db.getApproximateSizes(new Range(bytes("a"), bytes("k")), new Range(bytes("k"), bytes("z"))); - System.out.println("Size: "+sizes[0]+", "+sizes[1]); - -Getting database status. - - String stats = db.getProperty("leveldb.stats"); - System.out.println(stats); - -Getting informational log messages. - - Logger logger = new Logger() { - public void log(String message) { - System.out.println(message); - } - }; - Options options = new Options(); - options.logger(logger); - DB db = factory.open(new File("example"), options); - -Destroying a database. - - Options options = new Options(); - factory.destroy(new File("example"), options); - -Repairing a database. - - Options options = new Options(); - factory.repair(new File("example"), options); - -Using a memory pool to make native memory allocations more efficient: - - JniDBFactory.pushMemoryPool(1024 * 512); - try { - // .. work with the DB in here, - } finally { - JniDBFactory.popMemoryPool(); - } - -## Building - -### Prerequisites - -* GNU compiler toolchain -* [Maven 3](http://maven.apache.org/download.html) - -### Supported Platforms - -The following worked for me on: - - * OS X Lion with X Code 4 - * CentOS 5.6 (32 and 64 bit) - * Ubuntu 12.04 (32 and 64 bit) - * apt-get install autoconf libtool - -### Build Procedure - -Then download the snappy, leveldb, and leveldbjni project source code: - - wget http://snappy.googlecode.com/files/snappy-1.0.5.tar.gz - tar -zxvf snappy-1.0.5.tar.gz - git clone git://github.com/chirino/leveldb.git - git clone git://github.com/fusesource/leveldbjni.git - export SNAPPY_HOME=`cd snappy-1.0.5; pwd` - export LEVELDB_HOME=`cd leveldb; pwd` - export LEVELDBJNI_HOME=`cd leveldbjni; pwd` - - - -Compile the snappy project. This produces a static library. - - cd ${SNAPPY_HOME} - ./configure --disable-shared --with-pic - make - -Patch and Compile the leveldb project. This produces a static library. - - cd ${LEVELDB_HOME} - export LIBRARY_PATH=${SNAPPY_HOME} - export C_INCLUDE_PATH=${LIBRARY_PATH} - export CPLUS_INCLUDE_PATH=${LIBRARY_PATH} - git apply ../leveldbjni/leveldb.patch - make libleveldb.a - -Now use maven to build the leveldbjni project. - - cd ${LEVELDBJNI_HOME} - mvn clean install -P download -P ${platform} - -Replace ${platform} with one of the following platform identifiers (depending on the platform your building on): - -* osx -* linux32 -* linux64 -* win32 -* win64 - -If your platform does not have the right auto-tools levels available -just copy the `leveldbjni-${version}-SNAPSHOT-native-src.zip` artifact -from a platform the does have the tools available then add the -following argument to your maven build: - - -Dnative-src-url=file:leveldbjni-${verision}-SNAPSHOT-native-src.zip - -### Build Results - -* `leveldbjni/target/leveldbjni-${version}.jar` : The java class file to the library. -* `leveldbjni/target/leveldbjni-${version}-native-src.zip` : A GNU style source project which you can use to build the native library on other systems. -* `leveldbjni-${platform}/target/leveldbjni-${platform}-${version}.jar` : A jar file containing the built native library using your currently platform. - diff --git a/java/leveldbjni/releasing.md b/java/leveldbjni/releasing.md deleted file mode 100644 index 1cc797ebed..0000000000 --- a/java/leveldbjni/releasing.md +++ /dev/null @@ -1,30 +0,0 @@ -# How To Release - -Since levedbjni has to be build against multiple platforms, the standard maven release plugin will not work to do the release. - -Once you ready to do the release, create a branch for the release using: - - git co -b ${version}.x - -Update the version number in the poms using: - - mvn -P all org.codehaus.mojo:versions-maven-plugin:1.2:set org.codehaus.mojo:versions-maven-plugin:1.2:commit -DnewVersion="${version}" - git commit -am "Preping for a the ${version} release" - git tag "leveldbjni-${version}" - git push origin "leveldbjni-${version}" - -Now release the non-platform specific artifacts using: - - mvn clean deploy -P release -P download - -Then for each platform, shell into the box check out the "leveldbjni-${version}" tag and then: - - cd $platform - mvn clean deploy -Dleveldb=`cd ../../leveldb; pwd` -Dsnappy=`cd ../../snappy-1.0.3; pwd` -P release -P download - -Finally release the `leveldbjni-all` which uber jars all the previously released artifacts. - - cd leveldbjni-all - mvn clean deploy -P release -P download - -Congrats your done. Make sure your releasing the artifacts in Nexus after each step. \ No newline at end of file diff --git a/scribe/if/gen-cpp/scribe.cpp b/scribe/if/gen-cpp/scribe.cpp deleted file mode 100644 index c632e5a16b..0000000000 --- a/scribe/if/gen-cpp/scribe.cpp +++ /dev/null @@ -1,1012 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "scribe.h" -#include "folly/ScopeGuard.h" - -namespace Tleveldb { - -uint32_t scribe_Log_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->messages.clear(); - uint32_t _size14; - apache::thrift::protocol::TType _etype17; - xfer += iprot->readListBegin(_etype17, _size14); - this->messages.resize(_size14); - uint32_t _i18; - for (_i18 = 0; _i18 < _size14; ++_i18) - { - xfer += this->messages[_i18].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.messages = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_Log_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_Log_args"); - xfer += oprot->writeFieldBegin("messages", apache::thrift::protocol::T_LIST, 1); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->messages.size()); - std::vector ::const_iterator _iter19; - for (_iter19 = this->messages.begin(); _iter19 != this->messages.end(); ++_iter19) - { - xfer += (*_iter19).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_Log_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_Log_pargs"); - xfer += oprot->writeFieldBegin("messages", apache::thrift::protocol::T_LIST, 1); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, (*(this->messages)).size()); - std::vector ::const_iterator _iter20; - for (_iter20 = (*(this->messages)).begin(); _iter20 != (*(this->messages)).end(); ++_iter20) - { - xfer += (*_iter20).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_Log_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast21; - xfer += iprot->readI32(ecast21); - this->success = (ResultCode)ecast21; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_Log_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("scribe_Log_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_Log_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast22; - xfer += iprot->readI32(ecast22); - (*(this->success)) = (ResultCode)ecast22; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogMulti_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->messages.clear(); - uint32_t _size23; - apache::thrift::protocol::TType _etype26; - xfer += iprot->readListBegin(_etype26, _size23); - this->messages.resize(_size23); - uint32_t _i27; - for (_i27 = 0; _i27 < _size23; ++_i27) - { - xfer += this->messages[_i27].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.messages = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogMulti_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_LogMulti_args"); - xfer += oprot->writeFieldBegin("messages", apache::thrift::protocol::T_LIST, 1); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->messages.size()); - std::vector ::const_iterator _iter28; - for (_iter28 = this->messages.begin(); _iter28 != this->messages.end(); ++_iter28) - { - xfer += (*_iter28).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogMulti_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_LogMulti_pargs"); - xfer += oprot->writeFieldBegin("messages", apache::thrift::protocol::T_LIST, 1); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, (*(this->messages)).size()); - std::vector ::const_iterator _iter29; - for (_iter29 = (*(this->messages)).begin(); _iter29 != (*(this->messages)).end(); ++_iter29) - { - xfer += (*_iter29).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogMulti_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->success.clear(); - uint32_t _size30; - apache::thrift::protocol::TType _etype33; - xfer += iprot->readListBegin(_etype33, _size30); - this->success.resize(_size30); - uint32_t _i34; - for (_i34 = 0; _i34 < _size30; ++_i34) - { - int32_t ecast35; - xfer += iprot->readI32(ecast35); - this->success[_i34] = (ResultCode)ecast35; - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogMulti_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("scribe_LogMulti_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_LIST, 0); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_I32, this->success.size()); - std::vector ::const_iterator _iter36; - for (_iter36 = this->success.begin(); _iter36 != this->success.end(); ++_iter36) - { - xfer += oprot->writeI32((int32_t)(*_iter36)); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogMulti_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - (*(this->success)).clear(); - uint32_t _size37; - apache::thrift::protocol::TType _etype40; - xfer += iprot->readListBegin(_etype40, _size37); - (*(this->success)).resize(_size37); - uint32_t _i41; - for (_i41 = 0; _i41 < _size37; ++_i41) - { - int32_t ecast42; - xfer += iprot->readI32(ecast42); - (*(this->success))[_i41] = (ResultCode)ecast42; - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogCompressedMsg_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->compressedMessages); - this->__isset.compressedMessages = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogCompressedMsg_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_LogCompressedMsg_args"); - xfer += oprot->writeFieldBegin("compressedMessages", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->compressedMessages); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogCompressedMsg_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("scribe_LogCompressedMsg_pargs"); - xfer += oprot->writeFieldBegin("compressedMessages", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->compressedMessages))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogCompressedMsg_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast43; - xfer += iprot->readI32(ecast43); - this->success = (ResultCode)ecast43; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t scribe_LogCompressedMsg_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("scribe_LogCompressedMsg_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t scribe_LogCompressedMsg_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast44; - xfer += iprot->readI32(ecast44); - (*(this->success)) = (ResultCode)ecast44; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -int32_t scribeClient::getNextSendSequenceId() -{ - return nextSendSequenceId_++; -} - -int32_t scribeClient::getNextRecvSequenceId() -{ - return nextRecvSequenceId_++; -} - -ResultCode scribeClient::Log(const std::vector & messages) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("scribe.Log", NULL); - - try { - send_Log(messages); - return recv_Log(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "scribe.Log"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "scribe.Log"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void scribeClient::send_Log(const std::vector & messages) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "scribe.Log"); - oprot_->writeMessageBegin("Log", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - scribe_Log_pargs args; - args.messages = &messages; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes45 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "scribe.Log", _bytes45); - return; -} - -ResultCode scribeClient::recv_Log() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "scribe.Log"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Log") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - ResultCode _return; - scribe_Log_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "scribe.Log", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Log failed: unknown result"); -} - -void scribeClient::LogMulti(std::vector & _return, const std::vector & messages) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("scribe.LogMulti", NULL); - - try { - send_LogMulti(messages); - recv_LogMulti(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "scribe.LogMulti"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "scribe.LogMulti"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void scribeClient::send_LogMulti(const std::vector & messages) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "scribe.LogMulti"); - oprot_->writeMessageBegin("LogMulti", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - scribe_LogMulti_pargs args; - args.messages = &messages; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes46 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "scribe.LogMulti", _bytes46); - return; -} - -void scribeClient::recv_LogMulti(std::vector & _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "scribe.LogMulti"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("LogMulti") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - scribe_LogMulti_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "scribe.LogMulti", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "LogMulti failed: unknown result"); -} - -ResultCode scribeClient::LogCompressedMsg(const std::string& compressedMessages) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("scribe.LogCompressedMsg", NULL); - - try { - send_LogCompressedMsg(compressedMessages); - return recv_LogCompressedMsg(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "scribe.LogCompressedMsg"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "scribe.LogCompressedMsg"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void scribeClient::send_LogCompressedMsg(const std::string& compressedMessages) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "scribe.LogCompressedMsg"); - oprot_->writeMessageBegin("LogCompressedMsg", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - scribe_LogCompressedMsg_pargs args; - args.compressedMessages = &compressedMessages; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes47 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "scribe.LogCompressedMsg", _bytes47); - return; -} - -ResultCode scribeClient::recv_LogCompressedMsg() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "scribe.LogCompressedMsg"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("LogCompressedMsg") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - ResultCode _return; - scribe_LogCompressedMsg_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "scribe.LogCompressedMsg", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "LogCompressedMsg failed: unknown result"); -} - -bool scribeProcessor::dispatchCall(::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext) { - ProcessMap::iterator pfn; - pfn = processMap_.find(fname); - if (pfn == processMap_.end()) { - iprot->skip(apache::thrift::protocol::T_STRUCT); - iprot->readMessageEnd(); - iprot->getTransport()->readEnd(); - apache::thrift::TApplicationException x(apache::thrift::TApplicationException::UNKNOWN_METHOD, "Invalid method name: '"+fname+"'"); - oprot->writeMessageBegin(fname, apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return true; - } - const ProcessFunction& pf = pfn->second; - (this->*pf)(seqid, iprot, oprot, connectionContext); - return true; -} - -void scribeProcessor::process_Log(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("scribe.Log", connectionContext)); - - this->preRead(ctx.get(), "scribe.Log"); - scribe_Log_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "scribe.Log", bytes); - - scribe_Log_result result; - try { - result.success = iface_->Log(args.messages); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "scribe.Log"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Log", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "scribe.Log"); - oprot->writeMessageBegin("Log", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "scribe.Log", bytes); - -} - -void scribeProcessor::process_LogMulti(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("scribe.LogMulti", connectionContext)); - - this->preRead(ctx.get(), "scribe.LogMulti"); - scribe_LogMulti_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "scribe.LogMulti", bytes); - - scribe_LogMulti_result result; - try { - iface_->LogMulti(result.success, args.messages); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "scribe.LogMulti"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("LogMulti", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "scribe.LogMulti"); - oprot->writeMessageBegin("LogMulti", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "scribe.LogMulti", bytes); - -} - -void scribeProcessor::process_LogCompressedMsg(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("scribe.LogCompressedMsg", connectionContext)); - - this->preRead(ctx.get(), "scribe.LogCompressedMsg"); - scribe_LogCompressedMsg_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "scribe.LogCompressedMsg", bytes); - - scribe_LogCompressedMsg_result result; - try { - result.success = iface_->LogCompressedMsg(args.compressedMessages); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "scribe.LogCompressedMsg"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("LogCompressedMsg", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "scribe.LogCompressedMsg"); - oprot->writeMessageBegin("LogCompressedMsg", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "scribe.LogCompressedMsg", bytes); - -} - -::boost::shared_ptr< ::apache::thrift::TProcessor > scribeProcessorFactory::getProcessor(::apache::thrift::server::TConnectionContext* ctx) { - ::apache::thrift::ReleaseHandler< scribeIfFactory > cleanup(handlerFactory_); - ::boost::shared_ptr< scribeIf > handler(handlerFactory_->getHandler(ctx), cleanup); - ::boost::shared_ptr< ::apache::thrift::TProcessor > processor(new scribeProcessor(handler)); - return processor; -} -} // namespace diff --git a/scribe/if/gen-cpp/scribe.h b/scribe/if/gen-cpp/scribe.h deleted file mode 100644 index 5f30edfbe1..0000000000 --- a/scribe/if/gen-cpp/scribe.h +++ /dev/null @@ -1,593 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef _Tleveldb_scribe_H -#define _Tleveldb_scribe_H - -#include -#include "scribe_types.h" - -namespace Tleveldb { - -class scribeIf { - public: - virtual ~scribeIf() {} - virtual ResultCode Log(const std::vector & messages) = 0; - virtual void LogMulti(std::vector & _return, const std::vector & messages) = 0; - virtual ResultCode LogCompressedMsg(const std::string& compressedMessages) = 0; -}; - -class scribeIfFactory { - public: - typedef scribeIf Handler; - - virtual ~scribeIfFactory() {} - - virtual scribeIf* getHandler(::apache::thrift::server::TConnectionContext* ctx) = 0; - virtual void releaseHandler(scribeIf* handler) = 0; -}; - -class scribeIfSingletonFactory : virtual public scribeIfFactory { - public: - scribeIfSingletonFactory(const boost::shared_ptr& iface) : iface_(iface) {} - virtual ~scribeIfSingletonFactory() {} - - virtual scribeIf* getHandler(::apache::thrift::server::TConnectionContext*) { - return iface_.get(); - } - virtual void releaseHandler(scribeIf* handler) {} - - protected: - boost::shared_ptr iface_; -}; - -class scribeNull : virtual public scribeIf { - public: - virtual ~scribeNull() {} - ResultCode Log(const std::vector & /* messages */) { - ResultCode _return = (ResultCode)0; - return _return; - } - void LogMulti(std::vector & /* _return */, const std::vector & /* messages */) { - return; - } - ResultCode LogCompressedMsg(const std::string& /* compressedMessages */) { - ResultCode _return = (ResultCode)0; - return _return; - } -}; - -class scribe_Log_args { - public: - - static const uint64_t _reflection_id = 5902265217339133004U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_Log_args() { - } - - scribe_Log_args(const scribe_Log_args&) = default; - scribe_Log_args& operator=(const scribe_Log_args&) = default; - scribe_Log_args(scribe_Log_args&&) = default; - scribe_Log_args& operator=(scribe_Log_args&&) = default; - - void __clear() { - messages.clear(); - __isset.__clear(); - } - - virtual ~scribe_Log_args() throw() {} - - std::vector messages; - - struct __isset { - __isset() { __clear(); } - void __clear() { - messages = false; - } - bool messages; - } __isset; - - bool operator == (const scribe_Log_args & rhs) const - { - if (!(this->messages == rhs.messages)) - return false; - return true; - } - bool operator != (const scribe_Log_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_Log_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_Log_pargs { - public: - - static const uint64_t _reflection_id = 5555604010648986412U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_Log_pargs() throw() {} - - const std::vector * messages; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_Log_result { - public: - - static const uint64_t _reflection_id = 18205781396971565932U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_Log_result() : success(static_cast(0)) { - } - - scribe_Log_result(const scribe_Log_result&) = default; - scribe_Log_result& operator=(const scribe_Log_result&) = default; - scribe_Log_result(scribe_Log_result&&) = default; - scribe_Log_result& operator=(scribe_Log_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~scribe_Log_result() throw() {} - - ResultCode success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const scribe_Log_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const scribe_Log_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_Log_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_Log_presult { - public: - - static const uint64_t _reflection_id = 12945584136895385836U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_Log_presult() throw() {} - - ResultCode* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class scribe_LogMulti_args { - public: - - static const uint64_t _reflection_id = 7590876486278061516U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_LogMulti_args() { - } - - scribe_LogMulti_args(const scribe_LogMulti_args&) = default; - scribe_LogMulti_args& operator=(const scribe_LogMulti_args&) = default; - scribe_LogMulti_args(scribe_LogMulti_args&&) = default; - scribe_LogMulti_args& operator=(scribe_LogMulti_args&&) = default; - - void __clear() { - messages.clear(); - __isset.__clear(); - } - - virtual ~scribe_LogMulti_args() throw() {} - - std::vector messages; - - struct __isset { - __isset() { __clear(); } - void __clear() { - messages = false; - } - bool messages; - } __isset; - - bool operator == (const scribe_LogMulti_args & rhs) const - { - if (!(this->messages == rhs.messages)) - return false; - return true; - } - bool operator != (const scribe_LogMulti_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_LogMulti_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogMulti_pargs { - public: - - static const uint64_t _reflection_id = 9124384543551655628U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_LogMulti_pargs() throw() {} - - const std::vector * messages; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogMulti_result { - public: - - static const uint64_t _reflection_id = 4828367046341273164U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_LogMulti_result() { - } - - scribe_LogMulti_result(const scribe_LogMulti_result&) = default; - scribe_LogMulti_result& operator=(const scribe_LogMulti_result&) = default; - scribe_LogMulti_result(scribe_LogMulti_result&&) = default; - scribe_LogMulti_result& operator=(scribe_LogMulti_result&&) = default; - - void __clear() { - success.clear(); - __isset.__clear(); - } - - virtual ~scribe_LogMulti_result() throw() {} - - std::vector success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const scribe_LogMulti_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const scribe_LogMulti_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_LogMulti_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogMulti_presult { - public: - - static const uint64_t _reflection_id = 5642041737363050316U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_LogMulti_presult() throw() {} - - std::vector * success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class scribe_LogCompressedMsg_args { - public: - - static const uint64_t _reflection_id = 12705053036625273964U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_LogCompressedMsg_args() : compressedMessages("") { - } - - scribe_LogCompressedMsg_args(const scribe_LogCompressedMsg_args&) = default; - scribe_LogCompressedMsg_args& operator=(const scribe_LogCompressedMsg_args&) = default; - scribe_LogCompressedMsg_args(scribe_LogCompressedMsg_args&&) = default; - scribe_LogCompressedMsg_args& operator=(scribe_LogCompressedMsg_args&&) = default; - - void __clear() { - compressedMessages = ""; - __isset.__clear(); - } - - virtual ~scribe_LogCompressedMsg_args() throw() {} - - std::string compressedMessages; - - struct __isset { - __isset() { __clear(); } - void __clear() { - compressedMessages = false; - } - bool compressedMessages; - } __isset; - - bool operator == (const scribe_LogCompressedMsg_args & rhs) const - { - if (!(this->compressedMessages == rhs.compressedMessages)) - return false; - return true; - } - bool operator != (const scribe_LogCompressedMsg_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_LogCompressedMsg_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogCompressedMsg_pargs { - public: - - static const uint64_t _reflection_id = 13645577436870531500U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_LogCompressedMsg_pargs() throw() {} - - const std::string* compressedMessages; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogCompressedMsg_result { - public: - - static const uint64_t _reflection_id = 15026639991904524972U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - scribe_LogCompressedMsg_result() : success(static_cast(0)) { - } - - scribe_LogCompressedMsg_result(const scribe_LogCompressedMsg_result&) = default; - scribe_LogCompressedMsg_result& operator=(const scribe_LogCompressedMsg_result&) = default; - scribe_LogCompressedMsg_result(scribe_LogCompressedMsg_result&&) = default; - scribe_LogCompressedMsg_result& operator=(scribe_LogCompressedMsg_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~scribe_LogCompressedMsg_result() throw() {} - - ResultCode success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const scribe_LogCompressedMsg_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const scribe_LogCompressedMsg_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const scribe_LogCompressedMsg_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class scribe_LogCompressedMsg_presult { - public: - - static const uint64_t _reflection_id = 5311776576442573772U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~scribe_LogCompressedMsg_presult() throw() {} - - ResultCode* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class scribeClient : virtual public scribeIf, virtual public apache::thrift::TClientBase { - public: - scribeClient(boost::shared_ptr prot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(prot), - poprot_(prot) { - iprot_ = prot.get(); - oprot_ = prot.get(); - } - scribeClient(boost::shared_ptr iprot, boost::shared_ptr oprot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(iprot), - poprot_(oprot) { - iprot_ = iprot.get(); - oprot_ = oprot.get(); - } - boost::shared_ptr getInputProtocol() { - return piprot_; - } - boost::shared_ptr getOutputProtocol() { - return poprot_; - } - ResultCode Log(const std::vector & messages); - void send_Log(const std::vector & messages); - ResultCode recv_Log(); - void LogMulti(std::vector & _return, const std::vector & messages); - void send_LogMulti(const std::vector & messages); - void recv_LogMulti(std::vector & _return); - ResultCode LogCompressedMsg(const std::string& compressedMessages); - void send_LogCompressedMsg(const std::string& compressedMessages); - ResultCode recv_LogCompressedMsg(); - - /** - * Disable checking the seqid field in server responses. - * - * This should only be used with broken servers that return incorrect seqid values. - */ - void _disableSequenceIdChecks() { - checkSeqid_ = false; - } - - protected: - bool checkSeqid_; - int32_t nextSendSequenceId_; - int32_t nextRecvSequenceId_; - int32_t getNextSendSequenceId(); - int32_t getNextRecvSequenceId(); - boost::shared_ptr piprot_; - boost::shared_ptr poprot_; - apache::thrift::protocol::TProtocol* iprot_; - apache::thrift::protocol::TProtocol* oprot_; -}; - -class scribeProcessor : public ::apache::thrift::TDispatchProcessor { - protected: - boost::shared_ptr iface_; - virtual bool dispatchCall(apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext); - private: - typedef void (scribeProcessor::*ProcessFunction)(int32_t, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, apache::thrift::server::TConnectionContext*); - typedef std::map ProcessMap; - ProcessMap processMap_; - void process_Log(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_LogMulti(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_LogCompressedMsg(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - public: - scribeProcessor(boost::shared_ptr iface) : - iface_(iface) { - processMap_["Log"] = &scribeProcessor::process_Log; - processMap_["LogMulti"] = &scribeProcessor::process_LogMulti; - processMap_["LogCompressedMsg"] = &scribeProcessor::process_LogCompressedMsg; - } - - virtual ~scribeProcessor() {} - - boost::shared_ptr > getProcessFunctions() { - boost::shared_ptr > rSet(new std::set()); - rSet->insert("scribe.Log"); - rSet->insert("scribe.LogMulti"); - rSet->insert("scribe.LogCompressedMsg"); - return rSet; - } -}; - -class scribeProcessorFactory : public ::apache::thrift::TProcessorFactory { - public: - scribeProcessorFactory(const ::boost::shared_ptr< scribeIfFactory >& handlerFactory) : - handlerFactory_(handlerFactory) {} - - ::boost::shared_ptr< ::apache::thrift::TProcessor > getProcessor(::apache::thrift::server::TConnectionContext* ctx); - - protected: - ::boost::shared_ptr< scribeIfFactory > handlerFactory_; -}; - -class scribeMultiface : virtual public scribeIf { - public: - scribeMultiface(std::vector >& ifaces) : ifaces_(ifaces) { - } - virtual ~scribeMultiface() {} - protected: - std::vector > ifaces_; - scribeMultiface() {} - void add(boost::shared_ptr iface) { - ifaces_.push_back(iface); - } - public: - ResultCode Log(const std::vector & messages) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->Log(messages); - } - return ifaces_[i]->Log(messages); - } - - void LogMulti(std::vector & _return, const std::vector & messages) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->LogMulti(_return, messages); - } - } - - ResultCode LogCompressedMsg(const std::string& compressedMessages) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->LogCompressedMsg(compressedMessages); - } - return ifaces_[i]->LogCompressedMsg(compressedMessages); - } - -}; - -} // namespace - -#endif diff --git a/scribe/if/gen-cpp/scribe_constants.cpp b/scribe/if/gen-cpp/scribe_constants.cpp deleted file mode 100644 index 048069b5ac..0000000000 --- a/scribe/if/gen-cpp/scribe_constants.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "scribe_constants.h" - -namespace Tleveldb { - -const scribeConstants g_scribe_constants; - -scribeConstants::scribeConstants() { - SCRIBE_MAX_MESSAGE_LENGTH = 26214400; -} - -} // namespace diff --git a/scribe/if/gen-cpp/scribe_constants.h b/scribe/if/gen-cpp/scribe_constants.h deleted file mode 100644 index f121080866..0000000000 --- a/scribe/if/gen-cpp/scribe_constants.h +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef scribe_CONSTANTS_H -#define scribe_CONSTANTS_H - -#include "scribe_types.h" - -namespace Tleveldb { - -class scribeConstants { - public: - scribeConstants(); - - int32_t SCRIBE_MAX_MESSAGE_LENGTH; -}; - -extern const scribeConstants g_scribe_constants; - -} // namespace - -#endif diff --git a/scribe/if/gen-cpp/scribe_types.cpp b/scribe/if/gen-cpp/scribe_types.cpp deleted file mode 100644 index 233c3c66d0..0000000000 --- a/scribe/if/gen-cpp/scribe_types.cpp +++ /dev/null @@ -1,513 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "scribe_types.h" - -#include -#include -#include - -namespace Tleveldb { - -int _kResultCodeValues[] = { - OK, - TRY_LATER, - ERROR_DECOMPRESS -}; - -const char* _kResultCodeNames[] = { - "OK", - "TRY_LATER", - "ERROR_DECOMPRESS" -}; - -const std::map _ResultCode_VALUES_TO_NAMES(apache::thrift::TEnumIterator(3, _kResultCodeValues, _kResultCodeNames), apache::thrift::TEnumIterator(-1, NULL, NULL)); - -const std::map _ResultCode_NAMES_TO_VALUES(apache::thrift::TEnumInverseIterator(3, _kResultCodeValues, _kResultCodeNames), apache::thrift::TEnumInverseIterator(-1, NULL, NULL)); - -} // namespace -namespace apache { namespace thrift { -template<> -const char* TEnumTraits< ::Trocksdb::ResultCode>::findName( ::Trocksdb::ResultCode value) { -return findName( ::Trocksdb::_ResultCode_VALUES_TO_NAMES, value); -} - -template<> -bool TEnumTraits< ::Trocksdb::ResultCode>::findValue(const char* name, ::Trocksdb::ResultCode* out) { -return findValue( ::Trocksdb::_ResultCode_NAMES_TO_VALUES, name, out); -} -}} // apache::thrift - -namespace Tleveldb { -// Reflection initializer for struct scribe.SourceInfo -namespace { -void reflectionInitializer_16557823557777806572(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 16557823557777806572U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct scribe.SourceInfo"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "host"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "port"; - dt.fields[2] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "timestamp"; - dt.fields[3] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t SourceInfo::_reflection_id; -void SourceInfo::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_16557823557777806572(schema); -} -uint32_t SourceInfo::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->host); - this->__isset.host = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->port); - this->__isset.port = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->timestamp); - this->__isset.timestamp = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t SourceInfo::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("SourceInfo"); - xfer += oprot->writeFieldBegin("host", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->host); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("port", apache::thrift::protocol::T_I32, 2); - xfer += oprot->writeI32(this->port); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("timestamp", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->timestamp); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(SourceInfo &a, SourceInfo &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.host, b.host); - swap(a.port, b.port); - swap(a.timestamp, b.timestamp); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for map -namespace { -void reflectionInitializer_9246346592659763371(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 9246346592659763371U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "map"; - dt.__isset.mapKeyType = true; - dt.mapKeyType = 1U; - dt.__isset.valueType = true; - dt.valueType = 1U; - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -// Reflection initializer for struct scribe.LogEntry -namespace { -void reflectionInitializer_15053466696968532300(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 15053466696968532300U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_16557823557777806572(schema); // struct scribe.SourceInfo - reflectionInitializer_9246346592659763371(schema); // map - ::apache::thrift::reflection::DataType dt; - dt.name = "struct scribe.LogEntry"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "category"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "message"; - dt.fields[2] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = false; - f.type = 9246346592659763371U; - f.name = "metadata"; - dt.fields[3] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = false; - f.type = 5U; - f.name = "checksum"; - dt.fields[4] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = false; - f.type = 16557823557777806572U; - f.name = "source"; - dt.fields[5] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = false; - f.type = 5U; - f.name = "bucket"; - dt.fields[6] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t LogEntry::_reflection_id; -void LogEntry::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_15053466696968532300(schema); -} -uint32_t LogEntry::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->category); - this->__isset.category = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->message); - this->__isset.message = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_MAP) { - { - this->metadata.clear(); - uint32_t _size0; - apache::thrift::protocol::TType _ktype1; - apache::thrift::protocol::TType _vtype2; - xfer += iprot->readMapBegin(_ktype1, _vtype2, _size0); - uint32_t _i4; - for (_i4 = 0; _i4 < _size0; ++_i4) - { - std::string _key5; - xfer += iprot->readString(_key5); - std::string& _val6 = this->metadata[_key5]; - xfer += iprot->readString(_val6); - } - xfer += iprot->readMapEnd(); - } - this->__isset.metadata = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->checksum); - this->__isset.checksum = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->source.read(iprot); - this->__isset.source = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->bucket); - this->__isset.bucket = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t LogEntry::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("LogEntry"); - xfer += oprot->writeFieldBegin("category", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->category); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("message", apache::thrift::protocol::T_STRING, 2); - xfer += oprot->writeBinary(this->message); - xfer += oprot->writeFieldEnd(); - if (this->__isset.metadata) { - xfer += oprot->writeFieldBegin("metadata", apache::thrift::protocol::T_MAP, 3); - { - xfer += oprot->writeMapBegin(apache::thrift::protocol::T_STRING, apache::thrift::protocol::T_STRING, this->metadata.size()); - std::map ::const_iterator _iter7; - for (_iter7 = this->metadata.begin(); _iter7 != this->metadata.end(); ++_iter7) - { - xfer += oprot->writeString(_iter7->first); - xfer += oprot->writeString(_iter7->second); - } - xfer += oprot->writeMapEnd(); - } - xfer += oprot->writeFieldEnd(); - } - if (this->__isset.checksum) { - xfer += oprot->writeFieldBegin("checksum", apache::thrift::protocol::T_I32, 4); - xfer += oprot->writeI32(this->checksum); - xfer += oprot->writeFieldEnd(); - } - if (this->__isset.source) { - xfer += oprot->writeFieldBegin("source", apache::thrift::protocol::T_STRUCT, 5); - xfer += this->source.write(oprot); - xfer += oprot->writeFieldEnd(); - } - if (this->__isset.bucket) { - xfer += oprot->writeFieldBegin("bucket", apache::thrift::protocol::T_I32, 6); - xfer += oprot->writeI32(this->bucket); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(LogEntry &a, LogEntry &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.category, b.category); - swap(a.message, b.message); - swap(a.metadata, b.metadata); - swap(a.checksum, b.checksum); - swap(a.source, b.source); - swap(a.bucket, b.bucket); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for list -namespace { -void reflectionInitializer_10251729064312664553(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 10251729064312664553U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_15053466696968532300(schema); // struct scribe.LogEntry - ::apache::thrift::reflection::DataType dt; - dt.name = "list"; - dt.__isset.valueType = true; - dt.valueType = 15053466696968532300U; - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -// Reflection initializer for struct scribe.MessageList -namespace { -void reflectionInitializer_5674270912483072844(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 5674270912483072844U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_10251729064312664553(schema); // list - ::apache::thrift::reflection::DataType dt; - dt.name = "struct scribe.MessageList"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 10251729064312664553U; - f.name = "messages"; - dt.fields[1] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t MessageList::_reflection_id; -void MessageList::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_5674270912483072844(schema); -} -uint32_t MessageList::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->messages.clear(); - uint32_t _size8; - apache::thrift::protocol::TType _etype11; - xfer += iprot->readListBegin(_etype11, _size8); - this->messages.resize(_size8); - uint32_t _i12; - for (_i12 = 0; _i12 < _size8; ++_i12) - { - xfer += this->messages[_i12].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.messages = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t MessageList::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("MessageList"); - xfer += oprot->writeFieldBegin("messages", apache::thrift::protocol::T_LIST, 1); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->messages.size()); - std::vector ::const_iterator _iter13; - for (_iter13 = this->messages.begin(); _iter13 != this->messages.end(); ++_iter13) - { - xfer += (*_iter13).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(MessageList &a, MessageList &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.messages, b.messages); - swap(a.__isset, b.__isset); -} - -} // namespace diff --git a/scribe/if/gen-cpp/scribe_types.h b/scribe/if/gen-cpp/scribe_types.h deleted file mode 100644 index 325849a1d0..0000000000 --- a/scribe/if/gen-cpp/scribe_types.h +++ /dev/null @@ -1,247 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef scribe_TYPES_H -#define scribe_TYPES_H - -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace reflection { -class Schema; -}}} - - -namespace Tleveldb { - -enum ResultCode { - OK = 0, - TRY_LATER = 1, - ERROR_DECOMPRESS = 2 -}; - -extern const std::map _ResultCode_VALUES_TO_NAMES; - -extern const std::map _ResultCode_NAMES_TO_VALUES; - -} // namespace -namespace apache { namespace thrift { -template<> -inline constexpr ::Trocksdb::ResultCode TEnumTraits< ::Trocksdb::ResultCode>::min() { -return ::Trocksdb::ResultCode::OK; -} -template<> -inline constexpr ::Trocksdb::ResultCode TEnumTraits< ::Trocksdb::ResultCode>::max() { -return ::Trocksdb::ResultCode::ERROR_DECOMPRESS; -} -}} // apache:thrift - -namespace Tleveldb { -class SourceInfo { - public: - - static const uint64_t _reflection_id = 16557823557777806572U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - SourceInfo() : host(""), port(0), timestamp(0) { - } - - SourceInfo(const SourceInfo&) = default; - SourceInfo& operator=(const SourceInfo&) = default; - SourceInfo(SourceInfo&&) = default; - SourceInfo& operator=(SourceInfo&&) = default; - - void __clear() { - host = ""; - port = 0; - timestamp = 0; - __isset.__clear(); - } - - virtual ~SourceInfo() throw() {} - - std::string host; - int32_t port; - int64_t timestamp; - - struct __isset { - __isset() { __clear(); } - void __clear() { - host = false; - port = false; - timestamp = false; - } - bool host; - bool port; - bool timestamp; - } __isset; - - bool operator == (const SourceInfo & rhs) const - { - if (!(this->host == rhs.host)) - return false; - if (!(this->port == rhs.port)) - return false; - if (!(this->timestamp == rhs.timestamp)) - return false; - return true; - } - bool operator != (const SourceInfo &rhs) const { - return !(*this == rhs); - } - - bool operator < (const SourceInfo & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class SourceInfo; -void swap(SourceInfo &a, SourceInfo &b); - -class LogEntry { - public: - - static const uint64_t _reflection_id = 15053466696968532300U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - LogEntry() : category(""), message(""), checksum(0), bucket(0) { - } - - LogEntry(const LogEntry&) = default; - LogEntry& operator=(const LogEntry&) = default; - LogEntry(LogEntry&&) = default; - LogEntry& operator=(LogEntry&&) = default; - - void __clear() { - category = ""; - message = ""; - metadata.clear(); - checksum = 0; - source.__clear(); - bucket = 0; - __isset.__clear(); - } - - virtual ~LogEntry() throw() {} - - std::string category; - std::string message; - std::map metadata; - int32_t checksum; - SourceInfo source; - int32_t bucket; - - struct __isset { - __isset() { __clear(); } - void __clear() { - category = false; - message = false; - metadata = false; - checksum = false; - source = false; - bucket = false; - } - bool category; - bool message; - bool metadata; - bool checksum; - bool source; - bool bucket; - } __isset; - - bool operator == (const LogEntry & rhs) const - { - if (!(this->category == rhs.category)) - return false; - if (!(this->message == rhs.message)) - return false; - if (__isset.metadata != rhs.__isset.metadata) - return false; - else if (__isset.metadata && !(metadata == rhs.metadata)) - return false; - if (__isset.checksum != rhs.__isset.checksum) - return false; - else if (__isset.checksum && !(checksum == rhs.checksum)) - return false; - if (__isset.source != rhs.__isset.source) - return false; - else if (__isset.source && !(source == rhs.source)) - return false; - if (__isset.bucket != rhs.__isset.bucket) - return false; - else if (__isset.bucket && !(bucket == rhs.bucket)) - return false; - return true; - } - bool operator != (const LogEntry &rhs) const { - return !(*this == rhs); - } - - bool operator < (const LogEntry & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class LogEntry; -void swap(LogEntry &a, LogEntry &b); - -class MessageList { - public: - - static const uint64_t _reflection_id = 5674270912483072844U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - MessageList() { - } - - MessageList(const MessageList&) = default; - MessageList& operator=(const MessageList&) = default; - MessageList(MessageList&&) = default; - MessageList& operator=(MessageList&&) = default; - - void __clear() { - messages.clear(); - __isset.__clear(); - } - - virtual ~MessageList() throw() {} - - std::vector messages; - - struct __isset { - __isset() { __clear(); } - void __clear() { - messages = false; - } - bool messages; - } __isset; - - bool operator == (const MessageList & rhs) const - { - if (!(this->messages == rhs.messages)) - return false; - return true; - } - bool operator != (const MessageList &rhs) const { - return !(*this == rhs); - } - - bool operator < (const MessageList & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class MessageList; -void swap(MessageList &a, MessageList &b); - -} // namespace - -#endif diff --git a/scribe/if/scribe.thrift b/scribe/if/scribe.thrift deleted file mode 100644 index df09a5e785..0000000000 --- a/scribe/if/scribe.thrift +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/local/bin/thrift --cpp --php - -## Copyright (c) 2007-2012 Facebook -## -## 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. -## -## See accompanying file LICENSE or visit the Scribe site at: -## http://developers.facebook.com/scribe/ - -namespace cpp Tleveldb -namespace java Tleveldb - -// Max message length allowed to log through scribe -const i32 SCRIBE_MAX_MESSAGE_LENGTH = 26214400; - -enum ResultCode -{ - OK, - TRY_LATER, - ERROR_DECOMPRESS -} - -struct SourceInfo -{ - 1: binary host, - 2: i32 port, - 3: i64 timestamp -} - -struct LogEntry -{ - 1: binary category, - 2: binary message, - 3: optional map metadata, - 4: optional i32 checksum, - 5: optional SourceInfo source, - 6: optional i32 bucket -} - -struct MessageList -{ - 1: list messages -} - -service scribe -{ - # - # Delivers a list of LogEntry messages to the Scribe server. - # A returned ResultCode of anything other than OK indicates that the - # whole batch was unable to be delivered to the server. - # If data loss is a concern, the caller should buffer and retry the messages. - # - ResultCode Log(1: list messages); - - # - # NOTE: FOR INTERNAL USE ONLY! - # - # Delivers a list of LogEntry messages to the Scribe server, but - # allows partial successes. A list of ResultCodes will be returned to - # indicate the success or failure of each message at the corresponding index. - # If data loss is a concern, the caller should retry only the failed messages. - # - list LogMulti(1: list messages); - - # - # NOTE: FOR INTERNAL USE ONLY! - # - # The same as Log(...) except that the list of messages must first be - # serialized and compressed in some internal format. - # - ResultCode LogCompressedMsg(1: binary compressedMessages); -} diff --git a/scribe/scribe_logger.cc b/scribe/scribe_logger.cc deleted file mode 100644 index 6b65262cd4..0000000000 --- a/scribe/scribe_logger.cc +++ /dev/null @@ -1,82 +0,0 @@ -#include "scribe_logger.h" - -namespace rocksdb { - -const std::string ScribeLogger::COL_SEPERATOR = "\x1"; -const std::string ScribeLogger::DEPLOY_STATS_CATEGORY = "leveldb_deploy_stats"; - -ScribeLogger::ScribeLogger(const std::string& host, int port, - int retry_times, uint32_t retry_intervals) - : host_(host), - port_(port), - retry_times_(retry_times), - retry_intervals_ (retry_intervals) { - shared_ptr socket(new TSocket(host_, port_)); - shared_ptr framedTransport(new TFramedTransport(socket)); - framedTransport->open(); - shared_ptr protocol(new TBinaryProtocol(framedTransport)); - scribe_client_ = new scribeClient(protocol); -} - -void ScribeLogger::Log(const std::string& category, - const std::string& message) { - LogEntry entry; - entry.category = category; - entry.message = message; - - std::vector logs; - logs.push_back(entry); - - logger_mutex_.Lock(); - ResultCode ret = scribe_client_->Log(logs); - int retries_left = retry_times_; - while (ret == TRY_LATER && retries_left > 0) { - Env::Default()->SleepForMicroseconds(retry_intervals_); - ret = scribe_client_->Log(logs); - retries_left--; - } - - logger_mutex_.Unlock(); -} - -void ScribeLogger::MakeScribeMessage(std::string& output, - std::vector& cols) { - int sz = cols.size(); - int i = 0; - for (; i < sz - 1; i++) { - std::string& col = cols.at(i); - output += col; - output += ScribeLogger::COL_SEPERATOR; - } - std::string& col = cols.at(i); - output+=col; -} - -void ScribeLogger::Log_Deploy_Stats( - const std::string& db_version, - const std::string& machine_info, - const std::string& data_dir, - const uint64_t data_size, - const uint32_t file_number, - const std::string& data_size_per_level, - const std::string& file_number_per_level, - const int64_t& ts_unix) { - std::string message; - std::vector cols; - cols.push_back(db_version); - cols.push_back(machine_info); - cols.push_back(data_dir); - cols.push_back(boost::lexical_cast(data_size)); - cols.push_back(boost::lexical_cast(file_number)); - cols.push_back(data_size_per_level); - cols.push_back(file_number_per_level); - cols.push_back(boost::lexical_cast(ts_unix)); - MakeScribeMessage(message, cols); - return Log(ScribeLogger::DEPLOY_STATS_CATEGORY, message); -} - -ScribeLogger::~ScribeLogger(){ - delete scribe_client_; -} - -} diff --git a/scribe/scribe_logger.h b/scribe/scribe_logger.h deleted file mode 100644 index 965a7267e6..0000000000 --- a/scribe/scribe_logger.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef SCRIBE_LOGGER_H_ -#define SCRIBE_LOGGER_H_ - -#include "scribe/if/gen-cpp/scribe.h" -#include "scribe/if/gen-cpp/scribe_types.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/transport/TSocket.h" -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -#include "leveldb/env.h" -#include "port/port.h" -#include "util/stats_logger.h" - -#include "boost/lexical_cast.hpp" - -using namespace Tleveldb; -using Trocksdb::scribeClient; - -using namespace apache::thrift; -using namespace apache::thrift::protocol; -using namespace apache::thrift::transport; -using boost::shared_ptr; - - -using namespace ::Tleveldb; - -namespace rocksdb { - -class ScribeLogger : public StatsLogger{ -private: - std::string host_; - int port_; - int batch_size_; - - scribeClient* scribe_client_; - port::Mutex logger_mutex_; - - int retry_times_; - uint32_t retry_intervals_; - - void MakeScribeMessage(std::string& output, std::vector& cols); - -public: - - static const std::string COL_SEPERATOR; - static const std::string DEPLOY_STATS_CATEGORY; - - ScribeLogger(const std::string& host, int port, - int retry_times=3, uint32_t retry_intervals=1000000); - virtual ~ScribeLogger(); - - virtual void Log(const std::string& category, const std::string& message); - - virtual void Log_Deploy_Stats( - const std::string& db_version, - const std::string& machine_info, - const std::string& data_dir, - const uint64_t data_size, - const uint32_t file_number, - const std::string& data_size_per_level, - const std::string& file_number_per_level, - const int64_t& ts_unix - ); - -}; -} - -#endif /* SCRIBE_LOGGER_H_ */ diff --git a/thrift/README b/thrift/README deleted file mode 100644 index f76c2bbf9b..0000000000 --- a/thrift/README +++ /dev/null @@ -1,25 +0,0 @@ -This directory has the thrift server code that exposes leveldb apis. - -The thrift api is specified in thrift/if/leveldb.thrift. - -The thrift header files are in ./thrift/lib. These are part of -Apache Thrift code base and are needed for compilation of the leveldb -thrift server. The thrift libraries are copied into ./thrift/libs. -If you want to use a different version of thrift, please update these -directories with the corresponding thrift header files and the -compiled thrift libraries. - -If you want to compile leveldb with thrift-server support, please set the following -enviroment variables appropriately: - USE_THRIFT=1 - LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./thrift/libs:./snappy/libs - make clean leveldb_server leveldb_server_test - -You can run the leveldb server unit tests by - ./leveldb_server_test - -You can regenerate the thrift cpp files by doing the following - -cd ./thrift -bin/thrift --gen cpp if/leveldb.thrift - diff --git a/thrift/assoc.h b/thrift/assoc.h deleted file mode 100644 index 1509128994..0000000000 --- a/thrift/assoc.h +++ /dev/null @@ -1,806 +0,0 @@ -/** -* Thrift server that supports operations on the -* Facebook TAO Graph database -* @author Dhruba Borthakur (dhruba@gmail.com) -* Copyright 2012 Facebook -*/ -#ifndef THRIFT_LEVELDB_ASSOC_SERVER_H_ -#define THRIFT_LEVELDB_ASSOC_SERVER_H_ - -#include -#include -#include "openhandles.h" -#include "server_options.h" - -#include "leveldb/db.h" -#include "leveldb/write_batch.h" -#include "util/testharness.h" -#include "port/port.h" -#include "util/mutexlock.h" -#include "util/murmurhash.h" - -using namespace apache::thrift; -using namespace apache::thrift::protocol; -using namespace apache::thrift::transport; -using namespace apache::thrift::server; - -using boost::shared_ptr; - -using namespace ::Tleveldb; - -// -// These are the service methods that processes Association Data. -// Native types are stored in big-endian format, i.e. first bytes -// have most significant bits. - -class AssocServiceHandler : virtual public AssocServiceIf { - public: - - AssocServiceHandler(OpenHandles* openhandles) { - openhandles_ = openhandles; - woptions_sync_.sync = true; - } - - int64_t taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, - int64_t id2, int64_t id1Type, int64_t id2Type, - int64_t timestamp, AssocVisibility visibility, - bool update_count, int64_t dataVersion, const Text& data, - const Text& wormhole_comment) { - rocksdb::DB* db = openhandles_->get(tableName, NULL); - if (db == NULL) { - return Code::kNotFound; - } - int64_t ret = assocPutInternal(tableName, - db, assocType, id1, id2, id1Type, id2Type, - timestamp, visibility, update_count, dataVersion, - data, wormhole_comment); - return ret; - } - - int64_t taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, - int64_t id2, AssocVisibility visibility, bool update_count, - const Text& wormhole_comment) { - rocksdb::DB* db = openhandles_->get(tableName, NULL); - if (db == NULL) { - return Code::kNotFound; - } - return assocDeleteInternal(tableName, db, assocType, id1, id2, visibility, - update_count, wormhole_comment); - return 0; - } - - void taoAssocRangeGet(std::vector & _return, - const Text& tableName, int64_t assocType, int64_t id1, - int64_t start_time, int64_t end_time, int64_t offset, - int64_t limit) { - rocksdb::DB* db = openhandles_->get(tableName, NULL); - if (db == NULL) { - throw generate_exception(tableName, Code::kNotFound, - "taoAssocRangeGet: Unable to open database " , - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - assocRangeGetBytimeInternal(_return, tableName, db, assocType, id1, - start_time, end_time, offset, limit); - } - - void taoAssocGet(std::vector & _return, - const Text& tableName, int64_t assocType, int64_t id1, - const std::vector & id2s) { - rocksdb::DB* db = openhandles_->get(tableName, NULL); - if (db == NULL) { - throw generate_exception(tableName, Code::kNotFound, - "taoAssocGet:Unable to open database " , - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - assocGetInternal(_return, tableName, db, assocType, id1, id2s); - } - - int64_t taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1) { - rocksdb::DB* db = openhandles_->get(tableName, NULL); - if (db == NULL) { - return Code::kNotFound; - } - return assocCountInternal(tableName, db, assocType, id1); - } - - private: - OpenHandles* openhandles_; - rocksdb::ReadOptions roptions_; - rocksdb::WriteOptions woptions_; // write with no sync - rocksdb::WriteOptions woptions_sync_; // write with sync - - // the maximum values returned in a rangeget/multiget call. - const static unsigned int MAX_RANGE_SIZE = 10000; - - // the seed for murmur hash (copied from Hadoop) - const static unsigned int HASHSEED = 0x5bd1e995; - - // A bunch of rowlocks, sharded over the entire rowkey range - // Each rowkey is deterministically mapped to one of these locks. - rocksdb::port::RWMutex rowlocks_[1000]; - - // A helper method that hashes the row key to a lock - rocksdb::port::RWMutex* findRowLock(char* str, int size) { - int index = MurmurHash(str, size, HASHSEED) % sizeof(rowlocks_); - return &rowlocks_[index]; - } - - // - // Inserts an assoc - // If update_count, returns the updated count of the assoc. - // If !update_count, return zero. - // On failure, throws exception - // - int64_t assocPutInternal(const Text& tableName, rocksdb::DB* db, - int64_t assocType, int64_t id1, - int64_t id2, int64_t id1Type, int64_t id2Type, - int64_t ts, AssocVisibility vis, - bool update_count, int64_t dataVersion, const Text& data, - const Text& wormhole_comment) { - rocksdb::WriteBatch batch; - ts = convertTime(ts); // change time to numberofmillis till MAXLONG - - // create the payload for this assoc - int payloadsize = sizeof(id1Type) + sizeof(id2Type) + sizeof(dataVersion) + - sizeof(int32_t) + // store the data size - sizeof(int32_t) + // store the wormhole comment size - data.size() + wormhole_comment.size(); - std::string payload; - payload.reserve(payloadsize); - payload.resize(payloadsize); - makePayload(&payload[0], id1Type, id2Type, dataVersion, data, - wormhole_comment); - - int64_t count = 0; - int64_t oldts; - int8_t oldvis; - bool newassoc = false; // is this assoc new or an overwrite - rocksdb::Status status; - std::string value; - - // create RowKey for 'c' - int maxkeysize = sizeof(id1) + sizeof(assocType) + 1; - std::string dummy1; - dummy1.reserve(maxkeysize); - dummy1.resize(maxkeysize); - char* keybuf = &dummy1[0]; - int rowkeysize = makeRowKey(keybuf, id1, assocType); - int keysize = appendRowKeyForCount(rowkeysize, keybuf); - rocksdb::Slice ckey(keybuf, keysize); - - // find the row lock - rocksdb::port::RWMutex* rowlock = findRowLock(keybuf, rowkeysize); - { - // acquire the row lock - rocksdb::WriteLock l(rowlock); - - // Scan 'c' to get $count if $update_count == true - if (update_count) { - status = db->Get(roptions_, ckey, &value); - if (status.IsNotFound()) { - // nothing to do - } else if (!status.ok() || (value.size() != sizeof(int64_t))) { - throw generate_exception(tableName, Code::kNotFound, - "AssocPut Unable to extract count ", - assocType, id1, id2, id1Type, id2Type, ts, vis); - } else { - extract_int64(&count, (char *)value.c_str()); - } - } - - // Scan 'm'$id2 to get $ts and $vis - maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + sizeof(id2); - std::string dummy2; - dummy2.reserve(maxkeysize); - dummy2.resize(maxkeysize); - keybuf = &dummy2[0]; - rowkeysize = makeRowKey(keybuf, id1, assocType); - keysize = appendRowKeyForMeta(rowkeysize, keybuf, id2); - rocksdb::Slice mkey(keybuf, keysize); - status = db->Get(roptions_, mkey, &value); - if (status.IsNotFound()) { - newassoc = true; - oldvis = UNUSED1; - } else if (!status.ok() || - (value.size() != sizeof(int64_t) + sizeof(int8_t))) { - throw generate_exception(tableName, Code::kNotFound, - "AssocPut Unable to extract m$id2 ", - assocType, id1, id2, id1Type, id2Type, ts, vis); - } - - // make the key 'p'$old_ts$id2 - maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + - sizeof(ts) + sizeof(id2); - std::string dummy3; - dummy3.reserve(maxkeysize); - dummy3.resize(maxkeysize); - keybuf = &dummy3[0]; - rowkeysize = makeRowKey(keybuf, id1, assocType); - - // if ts != oldts, then delete 'p'$old_ts$id2 - if (!newassoc) { - extractTsVisString(&oldts, &oldvis, (char *)value.c_str()); - keysize = appendRowKeyForPayload(rowkeysize, keybuf, oldts, id2); - rocksdb::Slice pkey(keybuf, keysize); - if (ts != oldts) { - batch.Delete(pkey); - } - } - - // store in m$id2 the value of $ts$vis - std::string myvalue; - myvalue.reserve(sizeof(int64_t) + sizeof(int8_t)); - myvalue.resize(sizeof(int64_t) + sizeof(int8_t)); - makeTsVisString(&myvalue[0], ts, vis); - rocksdb::Slice sl(myvalue); - batch.Put(mkey, rocksdb::Slice(myvalue)); - - // store in p$ts$id2 the payload - keybuf = &dummy3[0]; - keysize = appendRowKeyForPayload(rowkeysize, keybuf, ts, id2); - rocksdb::Slice pkeynew(keybuf, keysize); - batch.Put(pkeynew, rocksdb::Slice(payload)); - - // increment count - if (update_count && (newassoc || oldvis != VISIBLE)) { - assert(count >= 0); - count++; - myvalue.reserve(sizeof(int64_t)); - myvalue.resize(sizeof(int64_t)); - makeCountString(&myvalue[0], count); - batch.Put(ckey, rocksdb::Slice(myvalue)); - } - - // We do a write here without sync. This writes it to the - // transaction log but does not sync it. It also makes these - // changes readable by other threads. - status = db->Write(woptions_, &batch); - if (!status.ok()) { - throw generate_exception(tableName, Code::kNotFound, - "AssocPut Unable to batch write ", - assocType, id1, id2, id1Type, id2Type, ts, vis); - } - } // release rowlock - - // Do a sync to the transaction log without holding the rowlock. - // This improves updates for hotrows. The disadvantage is that - // uncommiitted reads might be read by other threads, but that - // should be ok. - batch.Clear(); - status = db->Write(woptions_sync_, &batch); - if (!status.ok()) { - throw generate_exception(tableName, Code::kNotFound, - "AssocPut Unable to batch sync write ", - assocType, id1, id2, id1Type, id2Type, ts, vis); - } - if (update_count) { - assert(count > 0); - return count; - } - return 0; - } - - // - // Deletes an assoc - // If count changes return 1, else returns zero - // On failure, thrws exception - // - int64_t assocDeleteInternal(const Text& tableName, rocksdb::DB* db, - int64_t assocType, int64_t id1, - int64_t id2, AssocVisibility vis, - bool update_count, const Text& wormhole_comment) { - rocksdb::WriteBatch batch; - int return_value = 0; - int64_t count = 0; - int64_t oldts; - int8_t oldvis; - std::string value; - - // make a key for count - int maxkeysize = sizeof(id1) + sizeof(assocType) + 1; - std::string dummy; - dummy.reserve(maxkeysize); - dummy.resize(maxkeysize); - char* keybuf = &dummy[0]; - int rowkeysize = makeRowKey(keybuf, id1, assocType); - rocksdb::Status status; - int keysize = appendRowKeyForCount(rowkeysize, keybuf); - rocksdb::Slice ckey(keybuf, keysize); - - // find the row lock - rocksdb::port::RWMutex* rowlock = findRowLock(keybuf, rowkeysize); - { - // acquire the row lock - rocksdb::WriteLock l(rowlock); - - // Scan 'c' to get $count if $update_count == true - if (update_count) { - status = db->Get(roptions_, ckey, &value); - if (status.IsNotFound()) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete: Unable to find count ", - assocType, id1, id2, 0, 0, 0, vis); - } else if (!status.ok() || (value.size() != sizeof(int64_t))) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete: Unable to extract count ", - assocType, id1, id2, 0, 0, 0, vis); - } else { - extract_int64(&count, (char *)value.c_str()); - } - } - - // Scan 'm'$id2 to get $ts and $vis - maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + sizeof(id2); - std::string dummy2; - dummy2.reserve(maxkeysize); - dummy2.resize(maxkeysize); - keybuf = &dummy2[0]; - rowkeysize = makeRowKey(keybuf, id1, assocType); - keysize = appendRowKeyForMeta(rowkeysize, keybuf, id2); - rocksdb::Slice mkey(keybuf, keysize); - status = db->Get(roptions_, mkey, &value); - if (status.IsNotFound()) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to find column m ", - assocType, id1, id2, 0, 0, 0, vis); - } else if (!status.ok() || - (value.size() != sizeof(int64_t) + sizeof(int8_t))) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to extract m$id2 ", - assocType, id1, id2, 0, 0, 0, vis); - } - extractTsVisString(&oldts, &oldvis, (char *)value.c_str()); - - // Create d'$id2 - maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + sizeof(id2); - std::string dummy3; - dummy3.reserve(maxkeysize); - dummy3.resize(maxkeysize); - keybuf = &dummy3[0]; - rowkeysize = makeRowKey(keybuf, id1, assocType); - keysize = appendRowKeyForDelete(rowkeysize, keybuf, id2); - rocksdb::Slice dkey(keybuf, keysize); - - // create key for 'p' - maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + - sizeof(oldts) + sizeof(id2); - std::string dummy4; - dummy4.reserve(maxkeysize); - dummy4.resize(maxkeysize); - keybuf = &dummy4[0]; - rowkeysize = makeRowKey(keybuf, id1, assocType); - keysize = appendRowKeyForPayload(rowkeysize, keybuf, oldts, id2); - rocksdb::Slice pkey(keybuf, keysize); - - // if this is a hard delete, then delete all columns - if (vis == AssocVisibility::HARD_DELETE) { - batch.Delete(ckey); - batch.Delete(mkey); - batch.Delete(dkey); - batch.Delete(pkey); - } else if (vis == AssocVisibility::DELETED) { - if (oldvis != AssocVisibility::DELETED) { - // change vis in m$id2 - std::string mvalue; - mvalue.reserve(sizeof(int64_t) + sizeof(int8_t)); - mvalue.resize(sizeof(int64_t) + sizeof(int8_t)); - makeTsVisString(&mvalue[0], oldts, vis); - batch.Put(mkey, rocksdb::Slice(mvalue)); - } - - // scan p$tsid2 to get payload - // do we need to modify payload with new wormhole comments? - std::string pvalue; - status = db->Get(roptions_, pkey, &pvalue); - if (status.IsNotFound()) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to find p ", - assocType, id1, id2, 0, 0, oldts, vis); - } else if (!status.ok() || - (value.size() != sizeof(int64_t) + sizeof(int8_t))) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to extract p ", - assocType, id1, id2, 0, 0, oldts, vis); - } - - // store payload in d$id2 - batch.Put(dkey, rocksdb::Slice(pvalue)); - - // delete p$ts$id2 - batch.Delete(pkey); - } - if (update_count && oldvis == AssocVisibility::VISIBLE) { - return_value = 1; - assert(count >= 1); - count--; - std::string myvalue; - myvalue.reserve(sizeof(int64_t)); - myvalue.resize(sizeof(int64_t)); - makeCountString(&myvalue[0], count); - batch.Put(ckey, rocksdb::Slice(myvalue)); - } - status = db->Write(woptions_, &batch); // write with no sync - if (!status.ok()) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to Batch Write ", - assocType, id1, id2, 0, 0, oldts, vis); - } - } // release rowlock - - // Do a sync write after releasing the rowlock. This - // improves performance for hotrow updates. - batch.Clear(); - status = db->Write(woptions_sync_, &batch); - if (!status.ok()) { - throw generate_exception(tableName, Code::kNotFound, - "assocDelete Unable to Batch sync Write ", - assocType, id1, id2, 0, 0, oldts, vis); - } - if (update_count) { - assert(count >= 0); - return count; - } - return return_value; - } - - int64_t assocCountInternal(const Text& tableName, rocksdb::DB* db, - int64_t assocType, int64_t id1) { - // create key to query - int maxkeysize = sizeof(id1) + sizeof(assocType) + 1; - std::string dummy; - dummy.reserve(maxkeysize); - dummy.resize(maxkeysize); - char* keybuf = &dummy[0]; - int rowkeysize = makeRowKey(keybuf, id1, assocType); - int keysize = appendRowKeyForCount(rowkeysize, keybuf); // column 'c' - rocksdb::Slice ckey(keybuf, keysize); - - // Query database to find value - rocksdb::Status status; - std::string value; - int64_t count; - status = db->Get(roptions_, ckey, &value); - - // parse results retrieved from database - if (status.IsNotFound()) { - return 0; // non existant assoc - } else if (!status.ok()) { - throw generate_exception(tableName, Code::kNotFound, - "assocCountInternal Unable to find count ", - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - if (value.size() != sizeof(int64_t)) { - printf("expected %ld got %ld\n", sizeof(int64_t), value.size()); - throw generate_exception(tableName, Code::kNotFound, - "assocCountInternal Bad sizes for count ", - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - extract_int64(&count, (char *)value.c_str()); - return count; - } - - void assocRangeGetBytimeInternal(std::vector & _return, - const Text& tableName, rocksdb::DB* db, - int64_t assocType, int64_t id1, - int64_t start_time, int64_t end_time, int64_t offset, - int64_t limit) { - if (start_time < end_time) { - throw generate_exception(tableName, Code::kNotFound, - "assocRangeGetBytimeInternal:Bad starttime and endtime\n", - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - - int64_t ts, id2; - std::string wormhole; - - // convert times to time-till-LONGMAX - int64_t startTime = convertTime(start_time); - int64_t endTime = convertTime(end_time); - - // create max key to query - int maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + sizeof(ts) + - sizeof(id2); - std::string dummy; - dummy.reserve(maxkeysize); - dummy.resize(maxkeysize); - - // create rowkey - char* keybuf = &dummy[0]; - int rowkeysize = makeRowKey(keybuf, id1, assocType); - - // Position scan at 'p'$ts$id2 where ts = startTime and id2 = 0 - id2 = 0; - int keysize = appendRowKeyForPayload(rowkeysize, keybuf, startTime, id2); - rocksdb::Slice pkey(keybuf, keysize); - rocksdb::Iterator* iter = db->NewIterator(roptions_); - - for (iter->Seek(pkey); iter->Valid() && limit > 0 ; iter->Next()) { - // skip over records that the caller is not interested in - if (offset > 0) { - offset--; - continue; - } - ASSERT_GE(iter->key().size_, (unsigned int)rowkeysize); - - // extract the timestamp and id1 from the key - extractRowKeyP(&ts, &id2, rowkeysize, (char*)(iter->key().data_)); - ASSERT_GE(ts, startTime); - if (ts > endTime) { - break; - } - - // allocate a new slot in the result set. - _return.resize(_return.size() + 1); - TaoAssocGetResult* result = &_return.back(); - - // Fill up new element in result set. - result->id2 = id2; - result->time = convertTime(ts); - extractPayload((char*)iter->value().data_, &result->id1Type, - &result->id2Type, - &result->dataVersion, result->data, wormhole); - limit--; - } - } - - void assocGetInternal(std::vector & _return, - const Text& tableName, - rocksdb::DB* db, - int64_t assocType, int64_t id1, - const std::vector & id2s) { - int64_t ts, id2; - - if (id2s.size() > MAX_RANGE_SIZE) { - throw generate_exception(tableName, Code::kNotFound, - "assocGetInternal Ids2 cannot be gteater than 10K.", - assocType, id1, 0, 0, 0, 0, Trocksdb::UNUSED1); - } - // allocate the entire result buffer. - _return.reserve(id2s.size()); - - // create max key to query - int maxkeysize = sizeof(id1) + sizeof(assocType) + 1 + sizeof(ts) + - sizeof(id2); - std::string dummy; - dummy.reserve(maxkeysize); - dummy.resize(maxkeysize); - - // create rowkey - char* keybuf = &dummy[0]; - int rowkeysize = makeRowKey(keybuf, id1, assocType); - rocksdb::Iterator* iter = db->NewIterator(roptions_); - - for (unsigned int index = 0; index < id2s.size(); index++) { - int64_t ts; - int8_t oldvis; - rocksdb::Status status; - std::string wormhole; - - // query column 'm'$id2 - id2 = id2s[index]; - int keysize = appendRowKeyForMeta(rowkeysize, keybuf, id2); - rocksdb::Slice ckey(keybuf, keysize); - iter->Seek(ckey); - if (!iter->Valid()) { - throw generate_exception(tableName, Code::kNotFound, - "Unable to find m$id2 ", - assocType, id1, id2, 0, 0, 0, Trocksdb::UNUSED1); - } - if (ckey != iter->key()) { - continue; // non existant assoc - } - rocksdb::Slice value = iter->value(); - if (value.size() != sizeof(int64_t) + sizeof(int8_t)) { - throw generate_exception(tableName, Code::kNotFound, - "Unable to find m$id2 ", - assocType, id1, id2, 0, 0, 0, Trocksdb::UNUSED1); - } - - extractTsVisString(&ts, &oldvis, (char*)value.data_); - if(oldvis != AssocVisibility::VISIBLE) { - continue; - } - ASSERT_NE(ts, 0); - - // this assoc is visible, scan 'p'$ts$id2 to retrieve payload. - keysize = appendRowKeyForPayload(rowkeysize, keybuf, ts, id2); - rocksdb::Slice pkey(keybuf, keysize); - iter->Seek(pkey); - if (!iter->Valid() || (pkey != iter->key())) { - throw generate_exception(tableName, Code::kNotFound, - "Unable to find p$ts$id2 ", - assocType, id1, id2, 0, 0, ts, Trocksdb::UNUSED1); - } - - // allocate a new slot in the result set. - _return.resize(_return.size() + 1); - TaoAssocGetResult* result = &_return.back(); - - // Fill up new element in result set. - result->id2 = id2; - result->time = convertTime(ts); - extractPayload((char *)iter->value().data_, &result->id1Type, - &result->id2Type, - &result->dataVersion, result->data, wormhole); - } - } - - // fill the row key and returns the size of the key - inline int makeRowKey(char* dest, int64_t id1, int64_t assocType) { - dest = copy_int64_switch_endian(dest, id1); - dest = copy_int64_switch_endian(dest, assocType); - return sizeof(id1) + sizeof(assocType); - } - - // fill the row key +'c' and returns the size of the key - inline int appendRowKeyForCount(int rowkeysize, char* dest) { - dest += rowkeysize; - *dest = 'c'; - return rowkeysize + 1; - } - - // fill the row key +'p' + $ts$id2 and returns the size of the key - inline int appendRowKeyForPayload(int rowkeysize, char* dest, - int64_t ts, int64_t id2) { - dest += rowkeysize; - *dest++ = 'p'; - dest = copy_int64_switch_endian(dest, ts); - dest = copy_int64_switch_endian(dest, id2); - return rowkeysize + sizeof(ts) + sizeof(id2) + 1; - } - - // extract the timestamp and id2 from the key p$ts$id2 - inline void extractRowKeyP(int64_t* ts, int64_t* id, - int rowkeysize, char* src) { - src += rowkeysize; // skip over the rowkey - ASSERT_EQ(*src, 'p'); - src++; - extract_int64(ts, src); src += sizeof(*ts); - extract_int64(id, src); src += sizeof(*id); - } - - // fill the row key +'m' + id2 and returns the size of the key - inline int appendRowKeyForMeta(int rowkeysize, char* dest, - int64_t id2) { - dest += rowkeysize; - *dest++ = 'm'; - dest = copy_int64_switch_endian(dest, id2); - return rowkeysize + sizeof(id2) + 1; - } - - // fill the row key +'d' + id2 and returns the size of the key - inline int appendRowKeyForDelete(int rowkeysize, char* dest, - int64_t id2) { - dest += rowkeysize; - *dest++ = 'd'; - dest = copy_int64_switch_endian(dest, id2); - return rowkeysize + sizeof(id2) + 1; - } - - // encode id1Type, id2Type, dataversion, etc into the payload - void makePayload(char* dest, int64_t id1Type, int64_t id2Type, - int64_t dataVersion, const Text& data, - const Text& wormhole_comment) { - int32_t datasize = data.size(); - int32_t wormhole_commentsize = wormhole_comment.size(); - - dest = copy_int64_switch_endian(dest, id1Type); - dest = copy_int64_switch_endian(dest, id2Type); - dest = copy_int64_switch_endian(dest, dataVersion); - dest = copy_int32(dest, datasize); - dest = copy_int32(dest, wormhole_commentsize); - memcpy(dest, data.data(), data.size()); - dest += data.size(); - memcpy(dest, wormhole_comment.data(), wormhole_comment.size()); - dest += wormhole_comment.size(); - } - - // extract id1Type, id2Type, dataversion, etc from payload - void extractPayload(char* dest, int64_t* id1Type, int64_t* id2Type, - int64_t* dataVersion, Text& data, - Text& wormhole_comment) { - int32_t datasize, wormsize; - extract_int64(id1Type, dest); dest += sizeof(*id1Type); - extract_int64(id2Type, dest); dest += sizeof(*id2Type); - extract_int64(dataVersion, dest); dest += sizeof(*dataVersion); - extract_int32(&datasize, dest); dest += sizeof(datasize); - extract_int32(&wormsize, dest); dest += sizeof(wormsize); - - data.assign(dest, datasize); dest += datasize; - wormhole_comment.assign(dest, wormsize); dest += wormsize; - } - - // fill the timestamp and visibility - inline void makeTsVisString(char* dest, int64_t ts, int8_t vis) { - dest = copy_int64_switch_endian(dest, ts); - *dest = vis; - } - - // extracts the timestamp and visibility from a byte stream - inline void extractTsVisString(int64_t* ts, int8_t* vis, char* src) { - extract_int64(ts, src); - extract_int8(vis, src + sizeof(*ts)); - } - - // fill the count value - inline void makeCountString(char* dest, int64_t count) { - dest = copy_int64_switch_endian(dest, count); - } - - // - // Switch endianess of the id and copy it to dest. - // Returns the updated destination address - // - inline char* copy_int64_switch_endian(char* dest, int64_t id) { - char* src = (char *)&id + sizeof(id) - 1; - for (unsigned int i = 0; i < sizeof(id); i++) { - *dest++ = *src--; - } - return dest; - } - - // extracts a int64 type from the char stream. Swaps endianness. - inline void extract_int64(int64_t* dest, char* src) { - char* d = (char *)dest; - src += sizeof(int64_t) - 1; - for (unsigned int i = 0; i < sizeof(uint64_t); i++) { - *d++ = *src--; - } - } - - // - // copy a 4 byte quantity to byte stream. swap endianess. - // - inline char* copy_int32(char* dest, int32_t id) { - char* src = (char *)&id + sizeof(id) - 1; - for (unsigned int i = 0; i < sizeof(id); i++) { - *dest++ = *src--; - } - return dest; - } - - // extract a 4 byte quantity from a byte stream - inline void extract_int32(int32_t* dest, char* src) { - char* d = (char *)dest; - src += sizeof(int32_t) - 1; - for (unsigned int i = 0; i < sizeof(*dest); i++) { - *d++ = *src--; - } - } - - // extracts a 1 byte integer from the char stream. - inline void extract_int8(int8_t* dest, char* src) { - *dest = *(int8_t *)src; - } - - // convert a timestamp from an ever-increasing number to - // a decreasing number. All stored timestamps in this database - // are MAXLONG - timestamp. Thus, a backward-scan in time - // is converted to a forward scan in the database. - inline int64_t convertTime(int64_t ts) { - return LONG_MAX - ts; - } - - - // generate an exception message - LeveldbException generate_exception(const Text& tableName, - Code errorCode, const char* message, - int64_t assocType, int64_t id1, - int64_t id2, int64_t id1Type, int64_t id2Type, - int64_t ts, AssocVisibility vis) { - char result[1024]; - sprintf(result, - "id1=%ld assocType=%ld id2=%ld id1Type=%ld id2Type=%ld ts=%ld vis=%d ", - id1, assocType, id2, id1Type, id2Type, ts, vis); - fprintf(stderr, "assoc_server error table %s: %s errorCode=%d %s", - tableName.c_str(), message, errorCode, result); - - LeveldbException e; - e.errorCode = errorCode; - e.message = message; - throw e; - } - -}; - -#endif // THRIFT_LEVELDB_ASSOC_SERVER_H_ diff --git a/thrift/bin/thrift b/thrift/bin/thrift deleted file mode 100755 index a286845037..0000000000 Binary files a/thrift/bin/thrift and /dev/null differ diff --git a/thrift/folly/Likely.h b/thrift/folly/Likely.h deleted file mode 100644 index c535e8aefa..0000000000 --- a/thrift/folly/Likely.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2012 Facebook, 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. - */ - -/** - * Compiler hints to indicate the fast path of an "if" branch: whether - * the if condition is likely to be true or false. - * - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef FOLLY_BASE_LIKELY_H_ -#define FOLLY_BASE_LIKELY_H_ - -#undef LIKELY -#undef UNLIKELY - -#if defined(__GNUC__) && __GNUC__ >= 4 -#define LIKELY(x) (__builtin_expect((x), 1)) -#define UNLIKELY(x) (__builtin_expect((x), 0)) -#else -#define LIKELY(x) (x) -#define UNLIKELY(x) (x) -#endif - -#endif /* FOLLY_BASE_LIKELY_H_ */ - diff --git a/thrift/folly/Preprocessor.h b/thrift/folly/Preprocessor.h deleted file mode 100644 index d0ff340363..0000000000 --- a/thrift/folly/Preprocessor.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2012 Facebook, 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. - */ - -// @author: Andrei Alexandrescu - -#ifndef FOLLY_PREPROCESSOR_ -#define FOLLY_PREPROCESSOR_ - -/** - * Necessarily evil preprocessor-related amenities. - */ - -/** - * FB_ONE_OR_NONE(hello, world) expands to hello and - * FB_ONE_OR_NONE(hello) expands to nothing. This macro is used to - * insert or eliminate text based on the presence of another argument. - */ -#define FB_ONE_OR_NONE(a, ...) FB_THIRD(a, ## __VA_ARGS__, a) -#define FB_THIRD(a, b, ...) __VA_ARGS__ - -/** - * Helper macro that extracts the first argument out of a list of any - * number of arguments. - */ -#define FB_ARG_1(a, ...) a - -/** - * Helper macro that extracts the second argument out of a list of any - * number of arguments. If only one argument is given, it returns - * that. - */ -#define FB_ARG_2_OR_1(...) FB_ARG_2_OR_1_IMPL(__VA_ARGS__, __VA_ARGS__) -// Support macro for the above -#define FB_ARG_2_OR_1_IMPL(a, b, ...) b - -/** - * FB_ANONYMOUS_VARIABLE(str) introduces an identifier starting with - * str and ending with a number that varies with the line. - */ -#ifndef FB_ANONYMOUS_VARIABLE -#define FB_CONCATENATE_IMPL(s1, s2) s1##s2 -#define FB_CONCATENATE(s1, s2) FB_CONCATENATE_IMPL(s1, s2) -#ifdef __COUNTER__ -#define FB_ANONYMOUS_VARIABLE(str) FB_CONCATENATE(str, __COUNTER__) -#else -#define FB_ANONYMOUS_VARIABLE(str) FB_CONCATENATE(str, __LINE__) -#endif -#endif - -/** - * Use FB_STRINGIZE(name) when you'd want to do what #name does inside - * another macro expansion. - */ -#define FB_STRINGIZE(name) #name - - -#endif // FOLLY_PREPROCESSOR_ diff --git a/thrift/folly/ScopeGuard.h b/thrift/folly/ScopeGuard.h deleted file mode 100644 index 9578f7b067..0000000000 --- a/thrift/folly/ScopeGuard.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * Copyright 2012 Facebook, 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. - */ - -#ifndef FOLLY_SCOPEGUARD_H_ -#define FOLLY_SCOPEGUARD_H_ - -#include -#include -#include -#include -//#include - -#include "folly/Preprocessor.h" - -namespace folly { - -/** - * ScopeGuard is a general implementation of the "Initilization is - * Resource Acquisition" idiom. Basically, it guarantees that a function - * is executed upon leaving the currrent scope unless otherwise told. - * - * The makeGuard() function is used to create a new ScopeGuard object. - * It can be instantiated with a lambda function, a std::function, - * a functor, or a void(*)() function pointer. - * - * - * Usage example: Add a friend to memory iff it is also added to the db. - * - * void User::addFriend(User& newFriend) { - * // add the friend to memory - * friends_.push_back(&newFriend); - * - * // If the db insertion that follows fails, we should - * // remove it from memory. - * // (You could also declare this as "auto guard = makeGuard(...)") - * ScopeGuard guard = makeGuard([&] { friends_.pop_back(); }); - * - * // this will throw an exception upon error, which - * // makes the ScopeGuard execute UserCont::pop_back() - * // once the Guard's destructor is called. - * db_->addFriend(GetName(), newFriend.GetName()); - * - * // an exception was not thrown, so don't execute - * // the Guard. - * guard.dismiss(); - * } - * - * Examine ScopeGuardTest.cpp for some more sample usage. - * - * Stolen from: - * Andrei's and Petru Marginean's CUJ article: - * http://drdobbs.com/184403758 - * and the loki library: - * http://loki-lib.sourceforge.net/index.php?n=Idioms.ScopeGuardPointer - * and triendl.kj article: - * http://www.codeproject.com/KB/cpp/scope_guard.aspx - */ -class ScopeGuardImplBase { - public: - void dismiss() noexcept { - dismissed_ = true; - } - - protected: - ScopeGuardImplBase() - : dismissed_(false) {} - - ScopeGuardImplBase(ScopeGuardImplBase&& other) - : dismissed_(other.dismissed_) { - other.dismissed_ = true; - } - - bool dismissed_; -}; - -template -class ScopeGuardImpl : public ScopeGuardImplBase { - public: - explicit ScopeGuardImpl(const FunctionType& fn) - : function_(fn) {} - - explicit ScopeGuardImpl(FunctionType&& fn) - : function_(std::move(fn)) {} - - ScopeGuardImpl(ScopeGuardImpl&& other) - : ScopeGuardImplBase(std::move(other)), - function_(std::move(other.function_)) { - } - - ~ScopeGuardImpl() noexcept { - if (!dismissed_) { - execute(); - } - } - -private: - void* operator new(size_t) = delete; - - void execute() noexcept { - try { - function_(); - } catch (const std::exception& ex) { - std::cout << "ScopeGuard cleanup function threw a " << - typeid(ex).name() << "exception: " << ex.what(); - } catch (...) { - std::cout << "ScopeGuard cleanup function threw a non-exception object"; - } - } - - FunctionType function_; -}; - -template -ScopeGuardImpl::type> -makeGuard(FunctionType&& fn) { - return ScopeGuardImpl::type>( - std::forward(fn)); -} - -/** - * This is largely unneeded if you just use auto for your guards. - */ -typedef ScopeGuardImplBase&& ScopeGuard; - -namespace detail { -/** - * Internal use for the macro SCOPE_EXIT below - */ -enum class ScopeGuardOnExit {}; - -template -ScopeGuardImpl::type> -operator+(detail::ScopeGuardOnExit, FunctionType&& fn) { - return ScopeGuardImpl::type>( - std::forward(fn)); -} -} // namespace detail - -} // folly - -#define SCOPE_EXIT \ - auto FB_ANONYMOUS_VARIABLE(SCOPE_EXIT_STATE) \ - = ::folly::detail::ScopeGuardOnExit() + [&] - -#endif // FOLLY_SCOPEGUARD_H_ diff --git a/thrift/folly/experimental/io/IOBuf.h b/thrift/folly/experimental/io/IOBuf.h deleted file mode 100644 index 1a416e69b8..0000000000 --- a/thrift/folly/experimental/io/IOBuf.h +++ /dev/null @@ -1,1050 +0,0 @@ -/* - * Copyright 2012 Facebook, 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. - */ - -#ifndef FOLLY_IO_IOBUF_H_ -#define FOLLY_IO_IOBUF_H_ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace folly { - -/** - * An IOBuf is a pointer to a buffer of data. - * - * IOBuf objects are intended to be used primarily for networking code, and are - * modelled somewhat after FreeBSD's mbuf data structure, and Linux's sk_buff - * structure. - * - * IOBuf objects facilitate zero-copy network programming, by allowing multiple - * IOBuf objects to point to the same underlying buffer of data, using a - * reference count to track when the buffer is no longer needed and can be - * freed. - * - * - * Data Layout - * ----------- - * - * The IOBuf itself is a small object containing a pointer to the buffer and - * information about which segment of the buffer contains valid data. - * - * The data layout looks like this: - * - * +-------+ - * | IOBuf | - * +-------+ - * / - * | - * v - * +------------+--------------------+-----------+ - * | headroom | data | tailroom | - * +------------+--------------------+-----------+ - * ^ ^ ^ ^ - * buffer() data() tail() bufferEnd() - * - * The length() method returns the length of the valid data; capacity() - * returns the entire capacity of the buffer (from buffer() to bufferEnd()). - * The headroom() and tailroom() methods return the amount of unused capacity - * available before and after the data. - * - * - * Buffer Sharing - * -------------- - * - * The buffer itself is reference counted, and multiple IOBuf objects may point - * to the same buffer. Each IOBuf may point to a different section of valid - * data within the underlying buffer. For example, if multiple protocol - * requests are read from the network into a single buffer, a separate IOBuf - * may be created for each request, all sharing the same underlying buffer. - * - * In other words, when multiple IOBufs share the same underlying buffer, the - * data() and tail() methods on each IOBuf may point to a different segment of - * the data. However, the buffer() and bufferEnd() methods will point to the - * same location for all IOBufs sharing the same underlying buffer. - * - * +-----------+ +---------+ - * | IOBuf 1 | | IOBuf 2 | - * +-----------+ +---------+ - * | | _____/ | - * data | tail |/ data | tail - * v v v - * +-------------------------------------+ - * | | | | | - * +-------------------------------------+ - * - * If you only read data from an IOBuf, you don't need to worry about other - * IOBuf objects possibly sharing the same underlying buffer. However, if you - * ever write to the buffer you need to first ensure that no other IOBufs point - * to the same buffer. The unshare() method may be used to ensure that you - * have an unshared buffer. - * - * - * IOBuf Chains - * ------------ - * - * IOBuf objects also contain pointers to next and previous IOBuf objects. - * This can be used to represent a single logical piece of data that its stored - * in non-contiguous chunks in separate buffers. - * - * A single IOBuf object can only belong to one chain at a time. - * - * IOBuf chains are always circular. The "prev" pointer in the head of the - * chain points to the tail of the chain. However, it is up to the user to - * decide which IOBuf is the head. Internally the IOBuf code does not care - * which element is the head. - * - * The lifetime of all IOBufs in the chain are linked: when one element in the - * chain is deleted, all other chained elements are also deleted. Conceptually - * it is simplest to treat this as if the head of the chain owns all other - * IOBufs in the chain. When you delete the head of the chain, it will delete - * the other elements as well. For this reason, prependChain() and - * appendChain() take ownership of of the new elements being added to this - * chain. - * - * When the coalesce() method is used to coalesce an entire IOBuf chain into a - * single IOBuf, all other IOBufs in the chain are eliminated and automatically - * deleted. The unshare() method may coalesce the chain; if it does it will - * similarly delete all IOBufs eliminated from the chain. - * - * As discussed in the following section, it is up to the user to maintain a - * lock around the entire IOBuf chain if multiple threads need to access the - * chain. IOBuf does not provide any internal locking. - * - * - * Synchronization - * --------------- - * - * When used in multithread programs, a single IOBuf object should only be used - * in a single thread at a time. If a caller uses a single IOBuf across - * multiple threads the caller is responsible for using an external lock to - * synchronize access to the IOBuf. - * - * Two separate IOBuf objects may be accessed concurrently in separate threads - * without locking, even if they point to the same underlying buffer. The - * buffer reference count is always accessed atomically, and no other - * operations should affect other IOBufs that point to the same data segment. - * The caller is responsible for using unshare() to ensure that the data buffer - * is not shared by other IOBufs before writing to it, and this ensures that - * the data itself is not modified in one thread while also being accessed from - * another thread. - * - * For IOBuf chains, no two IOBufs in the same chain should be accessed - * simultaneously in separate threads. The caller must maintain a lock around - * the entire chain if the chain, or individual IOBufs in the chain, may be - * accessed by multiple threads. - * - * - * IOBuf Object Allocation/Sharing - * ------------------------------- - * - * IOBuf objects themselves are always allocated on the heap. The IOBuf - * constructors are private, so IOBuf objects may not be created on the stack. - * In part this is done since some IOBuf objects use small-buffer optimization - * and contain the buffer data immediately after the IOBuf object itself. The - * coalesce() and unshare() methods also expect to be able to delete subsequent - * IOBuf objects in the chain if they are no longer needed due to coalescing. - * - * The IOBuf structure also does not provide room for an intrusive refcount on - * the IOBuf object itself, only the underlying data buffer is reference - * counted. If users want to share the same IOBuf object between multiple - * parts of the code, they are responsible for managing this sharing on their - * own. (For example, by using a shared_ptr. Alternatively, users always have - * the option of using clone() to create a second IOBuf that points to the same - * underlying buffer.) - * - * With jemalloc, allocating small objects like IOBuf objects should be - * relatively fast, and the cost of allocating IOBuf objects on the heap and - * cloning new IOBufs should be relatively cheap. - */ -namespace detail { -// Is T a unique_ptr<> to a standard-layout type? -template struct IsUniquePtrToSL - : public std::false_type { }; -template -struct IsUniquePtrToSL< - std::unique_ptr, - typename std::enable_if::value>::type> - : public std::true_type { }; -} // namespace detail - -class IOBuf { - public: - typedef void (*FreeFunction)(void* buf, void* userData); - - /** - * Allocate a new IOBuf object with the requested capacity. - * - * Returns a new IOBuf object that must be (eventually) deleted by the - * caller. The returned IOBuf may actually have slightly more capacity than - * requested. - * - * The data pointer will initially point to the start of the newly allocated - * buffer, and will have a data length of 0. - * - * Throws std::bad_alloc on error. - */ - static std::unique_ptr create(uint32_t capacity); - - /** - * Create a new IOBuf pointing to an existing data buffer. - * - * The new IOBuffer will assume ownership of the buffer, and free it by - * calling the specified FreeFunction when the last IOBuf pointing to this - * buffer is destroyed. The function will be called with a pointer to the - * buffer as the first argument, and the supplied userData value as the - * second argument. The free function must never throw exceptions. - * - * If no FreeFunction is specified, the buffer will be freed using free(). - * - * The IOBuf data pointer will initially point to the start of the buffer, - * and the length will be the full capacity of the buffer. - * - * On error, std::bad_alloc will be thrown. If freeOnError is true (the - * default) the buffer will be freed before throwing the error. - */ - static std::unique_ptr takeOwnership(void* buf, uint32_t capacity, - FreeFunction freeFn = NULL, - void* userData = NULL, - bool freeOnError = true); - - /** - * Create a new IOBuf pointing to an existing data buffer made up of - * count objects of a given standard-layout type. - * - * This is dangerous -- it is essentially equivalent to doing - * reinterpret_cast on your data -- but it's often useful - * for serialization / deserialization. - * - * The new IOBuffer will assume ownership of the buffer, and free it - * appropriately (by calling the UniquePtr's custom deleter, or by calling - * delete or delete[] appropriately if there is no custom deleter) - * when the buffer is destroyed. The custom deleter, if any, must never - * throw exceptions. - * - * The IOBuf data pointer will initially point to the start of the buffer, - * and the length will be the full capacity of the buffer (count * - * sizeof(T)). - * - * On error, std::bad_alloc will be thrown, and the buffer will be freed - * before throwing the error. - */ - template - static typename std::enable_if::value, - std::unique_ptr>::type - takeOwnership(UniquePtr&& buf, size_t count=1); - - /** - * Create a new IOBuf object that points to an existing user-owned buffer. - * - * This should only be used when the caller knows the lifetime of the IOBuf - * object ahead of time and can ensure that all IOBuf objects that will point - * to this buffer will be destroyed before the buffer itself is destroyed. - * - * This buffer will not be freed automatically when the last IOBuf - * referencing it is destroyed. It is the caller's responsibility to free - * the buffer after the last IOBuf has been destroyed. - * - * The IOBuf data pointer will initially point to the start of the buffer, - * and the length will be the full capacity of the buffer. - * - * An IOBuf created using wrapBuffer() will always be reported as shared. - * unshare() may be used to create a writable copy of the buffer. - * - * On error, std::bad_alloc will be thrown. - */ - static std::unique_ptr wrapBuffer(const void* buf, uint32_t capacity); - - /** - * Convenience function to create a new IOBuf object that copies data from a - * user-supplied buffer, optionally allocating a given amount of - * headroom and tailroom. - */ - static std::unique_ptr copyBuffer(const void* buf, uint32_t size, - uint32_t headroom=0, - uint32_t minTailroom=0); - - /** - * Convenience function to free a chain of IOBufs held by a unique_ptr. - */ - static void destroy(std::unique_ptr&& data) { - auto destroyer = std::move(data); - } - - /** - * Destroy this IOBuf. - * - * Deleting an IOBuf will automatically destroy all IOBufs in the chain. - * (See the comments above regarding the ownership model of IOBuf chains. - * All subsequent IOBufs in the chain are considered to be owned by the head - * of the chain. Users should only explicitly delete the head of a chain.) - * - * When each individual IOBuf is destroyed, it will release its reference - * count on the underlying buffer. If it was the last user of the buffer, - * the buffer will be freed. - */ - ~IOBuf(); - - /** - * Check whether the chain is empty (i.e., whether the IOBufs in the - * chain have a total data length of zero). - * - * This method is semantically equivalent to - * i->computeChainDataLength()==0 - * but may run faster because it can short-circuit as soon as it - * encounters a buffer with length()!=0 - */ - bool empty() const; - - /** - * Get the pointer to the start of the data. - */ - const uint8_t* data() const { - return data_; - } - - /** - * Get a writable pointer to the start of the data. - * - * The caller is responsible for calling unshare() first to ensure that it is - * actually safe to write to the buffer. - */ - uint8_t* writableData() { - return data_; - } - - /** - * Get the pointer to the end of the data. - */ - const uint8_t* tail() const { - return data_ + length_; - } - - /** - * Get a writable pointer to the end of the data. - * - * The caller is responsible for calling unshare() first to ensure that it is - * actually safe to write to the buffer. - */ - uint8_t* writableTail() { - return data_ + length_; - } - - /** - * Get the data length. - */ - uint32_t length() const { - return length_; - } - - /** - * Get the amount of head room. - * - * Returns the number of bytes in the buffer before the start of the data. - */ - uint32_t headroom() const { - return data_ - buffer(); - } - - /** - * Get the amount of tail room. - * - * Returns the number of bytes in the buffer after the end of the data. - */ - uint32_t tailroom() const { - return bufferEnd() - tail(); - } - - /** - * Get the pointer to the start of the buffer. - * - * Note that this is the pointer to the very beginning of the usable buffer, - * not the start of valid data within the buffer. Use the data() method to - * get a pointer to the start of the data within the buffer. - */ - const uint8_t* buffer() const { - return (flags_ & kFlagExt) ? ext_.buf : int_.buf; - } - - /** - * Get a writable pointer to the start of the buffer. - * - * The caller is responsible for calling unshare() first to ensure that it is - * actually safe to write to the buffer. - */ - uint8_t* writableBuffer() { - return (flags_ & kFlagExt) ? ext_.buf : int_.buf; - } - - /** - * Get the pointer to the end of the buffer. - * - * Note that this is the pointer to the very end of the usable buffer, - * not the end of valid data within the buffer. Use the tail() method to - * get a pointer to the end of the data within the buffer. - */ - const uint8_t* bufferEnd() const { - return (flags_ & kFlagExt) ? - ext_.buf + ext_.capacity : - int_.buf + kMaxInternalDataSize; - } - - /** - * Get the total size of the buffer. - * - * This returns the total usable length of the buffer. Use the length() - * method to get the length of the actual valid data in this IOBuf. - */ - uint32_t capacity() const { - return (flags_ & kFlagExt) ? ext_.capacity : kMaxInternalDataSize; - } - - /** - * Get a pointer to the next IOBuf in this chain. - */ - IOBuf* next() { - return next_; - } - const IOBuf* next() const { - return next_; - } - - /** - * Get a pointer to the previous IOBuf in this chain. - */ - IOBuf* prev() { - return prev_; - } - const IOBuf* prev() const { - return prev_; - } - - /** - * Shift the data forwards in the buffer. - * - * This shifts the data pointer forwards in the buffer to increase the - * headroom. This is commonly used to increase the headroom in a newly - * allocated buffer. - * - * The caller is responsible for ensuring that there is sufficient - * tailroom in the buffer before calling advance(). - * - * If there is a non-zero data length, advance() will use memmove() to shift - * the data forwards in the buffer. In this case, the caller is responsible - * for making sure the buffer is unshared, so it will not affect other IOBufs - * that may be sharing the same underlying buffer. - */ - void advance(uint32_t amount) { - // In debug builds, assert if there is a problem. - assert(amount <= tailroom()); - - if (length_ > 0) { - memmove(data_ + amount, data_, length_); - } - data_ += amount; - } - - /** - * Shift the data backwards in the buffer. - * - * The caller is responsible for ensuring that there is sufficient headroom - * in the buffer before calling retreat(). - * - * If there is a non-zero data length, retreat() will use memmove() to shift - * the data backwards in the buffer. In this case, the caller is responsible - * for making sure the buffer is unshared, so it will not affect other IOBufs - * that may be sharing the same underlying buffer. - */ - void retreat(uint32_t amount) { - // In debug builds, assert if there is a problem. - assert(amount <= headroom()); - - if (length_ > 0) { - memmove(data_ - amount, data_, length_); - } - data_ -= amount; - } - - /** - * Adjust the data pointer to include more valid data at the beginning. - * - * This moves the data pointer backwards to include more of the available - * buffer. The caller is responsible for ensuring that there is sufficient - * headroom for the new data. The caller is also responsible for populating - * this section with valid data. - * - * This does not modify any actual data in the buffer. - */ - void prepend(uint32_t amount) { - CHECK(amount <= headroom()); - data_ -= amount; - } - - /** - * Adjust the tail pointer to include more valid data at the end. - * - * This moves the tail pointer forwards to include more of the available - * buffer. The caller is responsible for ensuring that there is sufficient - * tailroom for the new data. The caller is also responsible for populating - * this section with valid data. - * - * This does not modify any actual data in the buffer. - */ - void append(uint32_t amount) { - CHECK(amount <= tailroom()); - length_ += amount; - } - - /** - * Adjust the data pointer forwards to include less valid data. - * - * This moves the data pointer forwards so that the first amount bytes are no - * longer considered valid data. The caller is responsible for ensuring that - * amount is less than or equal to the actual data length. - * - * This does not modify any actual data in the buffer. - */ - void trimStart(uint32_t amount) { - CHECK(amount <= length_); - data_ += amount; - length_ -= amount; - } - - /** - * Adjust the tail pointer backwards to include less valid data. - * - * This moves the tail pointer backwards so that the last amount bytes are no - * longer considered valid data. The caller is responsible for ensuring that - * amount is less than or equal to the actual data length. - * - * This does not modify any actual data in the buffer. - */ - void trimEnd(uint32_t amount) { - CHECK(amount <= length_); - length_ -= amount; - } - - /** - * Clear the buffer. - * - * Postcondition: headroom() == 0, length() == 0, tailroom() == capacity() - */ - void clear() { - data_ = writableBuffer(); - length_ = 0; - } - - /** - * Ensure that this buffer has at least minHeadroom headroom bytes and at - * least minTailroom tailroom bytes. The buffer must be writable - * (you must call unshare() before this, if necessary). - * - * Postcondition: headroom() >= minHeadroom, tailroom() >= minTailroom, - * the data (between data() and data() + length()) is preserved. - */ - void reserve(uint32_t minHeadroom, uint32_t minTailroom) { - // Maybe we don't need to do anything. - if (headroom() >= minHeadroom && tailroom() >= minTailroom) { - return; - } - // If the buffer is empty but we have enough total room (head + tail), - // move the data_ pointer around. - if (length() == 0 && - headroom() + tailroom() >= minHeadroom + minTailroom) { - data_ = writableBuffer() + minHeadroom; - return; - } - // Bah, we have to do actual work. - reserveSlow(minHeadroom, minTailroom); - } - - /** - * Return true if this IOBuf is part of a chain of multiple IOBufs, or false - * if this is the only IOBuf in its chain. - */ - bool isChained() const { - assert((next_ == this) == (prev_ == this)); - return next_ != this; - } - - /** - * Get the number of IOBufs in this chain. - * - * Beware that this method has to walk the entire chain. - * Use isChained() if you just want to check if this IOBuf is part of a chain - * or not. - */ - uint32_t countChainElements() const; - - /** - * Get the length of all the data in this IOBuf chain. - * - * Beware that this method has to walk the entire chain. - */ - uint64_t computeChainDataLength() const; - - /** - * Insert another IOBuf chain immediately before this IOBuf. - * - * For example, if there are two IOBuf chains (A, B, C) and (D, E, F), - * and B->prependChain(D) is called, the (D, E, F) chain will be subsumed - * and become part of the chain starting at A, which will now look like - * (A, D, E, F, B, C) - * - * Note that since IOBuf chains are circular, head->prependChain(other) can - * be used to append the other chain at the very end of the chain pointed to - * by head. For example, if there are two IOBuf chains (A, B, C) and - * (D, E, F), and A->prependChain(D) is called, the chain starting at A will - * now consist of (A, B, C, D, E, F) - * - * The elements in the specified IOBuf chain will become part of this chain, - * and will be owned by the head of this chain. When this chain is - * destroyed, all elements in the supplied chain will also be destroyed. - * - * For this reason, appendChain() only accepts an rvalue-reference to a - * unique_ptr(), to make it clear that it is taking ownership of the supplied - * chain. If you have a raw pointer, you can pass in a new temporary - * unique_ptr around the raw pointer. If you have an existing, - * non-temporary unique_ptr, you must call std::move(ptr) to make it clear - * that you are destroying the original pointer. - */ - void prependChain(std::unique_ptr&& iobuf); - - /** - * Append another IOBuf chain immediately after this IOBuf. - * - * For example, if there are two IOBuf chains (A, B, C) and (D, E, F), - * and B->appendChain(D) is called, the (D, E, F) chain will be subsumed - * and become part of the chain starting at A, which will now look like - * (A, B, D, E, F, C) - * - * The elements in the specified IOBuf chain will become part of this chain, - * and will be owned by the head of this chain. When this chain is - * destroyed, all elements in the supplied chain will also be destroyed. - * - * For this reason, appendChain() only accepts an rvalue-reference to a - * unique_ptr(), to make it clear that it is taking ownership of the supplied - * chain. If you have a raw pointer, you can pass in a new temporary - * unique_ptr around the raw pointer. If you have an existing, - * non-temporary unique_ptr, you must call std::move(ptr) to make it clear - * that you are destroying the original pointer. - */ - void appendChain(std::unique_ptr&& iobuf) { - // Just use prependChain() on the next element in our chain - next_->prependChain(std::move(iobuf)); - } - - /** - * Remove this IOBuf from its current chain. - * - * Since ownership of all elements an IOBuf chain is normally maintained by - * the head of the chain, unlink() transfers ownership of this IOBuf from the - * chain and gives it to the caller. A new unique_ptr to the IOBuf is - * returned to the caller. The caller must store the returned unique_ptr (or - * call release() on it) to take ownership, otherwise the IOBuf will be - * immediately destroyed. - * - * Since unlink transfers ownership of the IOBuf to the caller, be careful - * not to call unlink() on the head of a chain if you already maintain - * ownership on the head of the chain via other means. The pop() method - * is a better choice for that situation. - */ - std::unique_ptr unlink() { - next_->prev_ = prev_; - prev_->next_ = next_; - prev_ = this; - next_ = this; - return std::unique_ptr(this); - } - - /** - * Remove this IOBuf from its current chain and return a unique_ptr to - * the IOBuf that formerly followed it in the chain. - */ - std::unique_ptr pop() { - IOBuf *next = next_; - next_->prev_ = prev_; - prev_->next_ = next_; - prev_ = this; - next_ = this; - return std::unique_ptr((next == this) ? NULL : next); - } - - /** - * Remove a subchain from this chain. - * - * Remove the subchain starting at head and ending at tail from this chain. - * - * Returns a unique_ptr pointing to head. (In other words, ownership of the - * head of the subchain is transferred to the caller.) If the caller ignores - * the return value and lets the unique_ptr be destroyed, the subchain will - * be immediately destroyed. - * - * The subchain referenced by the specified head and tail must be part of the - * same chain as the current IOBuf, but must not contain the current IOBuf. - * However, the specified head and tail may be equal to each other (i.e., - * they may be a subchain of length 1). - */ - std::unique_ptr separateChain(IOBuf* head, IOBuf* tail) { - assert(head != this); - assert(tail != this); - - head->prev_->next_ = tail->next_; - tail->next_->prev_ = head->prev_; - - head->prev_ = tail; - tail->next_ = head; - - return std::unique_ptr(head); - } - - /** - * Return true if at least one of the IOBufs in this chain are shared, - * or false if all of the IOBufs point to unique buffers. - * - * Use isSharedOne() to only check this IOBuf rather than the entire chain. - */ - bool isShared() const { - const IOBuf* current = this; - while (true) { - if (current->isSharedOne()) { - return true; - } - current = current->next_; - if (current == this) { - return false; - } - } - } - - /** - * Return true if other IOBufs are also pointing to the buffer used by this - * IOBuf, and false otherwise. - * - * If this IOBuf points at a buffer owned by another (non-IOBuf) part of the - * code (i.e., if the IOBuf was created using wrapBuffer(), or was cloned - * from such an IOBuf), it is always considered shared. - * - * This only checks the current IOBuf, and not other IOBufs in the chain. - */ - bool isSharedOne() const { - // If this is a user-owned buffer, it is always considered shared - if (flags_ & kFlagUserOwned) { - return true; - } - - if (flags_ & kFlagExt) { - return ext_.sharedInfo->refcount.load(std::memory_order_acquire) > 1; - } else { - return false; - } - } - - /** - * Ensure that this IOBuf has a unique buffer that is not shared by other - * IOBufs. - * - * unshare() operates on an entire chain of IOBuf objects. If the chain is - * shared, it may also coalesce the chain when making it unique. If the - * chain is coalesced, subsequent IOBuf objects in the current chain will be - * automatically deleted. - * - * Note that buffers owned by other (non-IOBuf) users are automatically - * considered shared. - * - * Throws std::bad_alloc on error. On error the IOBuf chain will be - * unmodified. - * - * Currently unshare may also throw std::overflow_error if it tries to - * coalesce. (TODO: In the future it would be nice if unshare() were smart - * enough not to coalesce the entire buffer if the data is too large. - * However, in practice this seems unlikely to become an issue.) - */ - void unshare() { - if (isChained()) { - unshareChained(); - } else { - unshareOne(); - } - } - - /** - * Ensure that this IOBuf has a unique buffer that is not shared by other - * IOBufs. - * - * unshareOne() operates on a single IOBuf object. This IOBuf will have a - * unique buffer after unshareOne() returns, but other IOBufs in the chain - * may still be shared after unshareOne() returns. - * - * Throws std::bad_alloc on error. On error the IOBuf will be unmodified. - */ - void unshareOne() { - if (isSharedOne()) { - unshareOneSlow(); - } - } - - /** - * Coalesce this IOBuf chain into a single buffer. - * - * This method moves all of the data in this IOBuf chain into a single - * contiguous buffer, if it is not already in one buffer. After coalesce() - * returns, this IOBuf will be a chain of length one. Other IOBufs in the - * chain will be automatically deleted. - * - * After coalescing, the IOBuf will have at least as much headroom as the - * first IOBuf in the chain, and at least as much tailroom as the last IOBuf - * in the chain. - * - * Throws std::bad_alloc on error. On error the IOBuf chain will be - * unmodified. Throws std::overflow_error if the length of the entire chain - * larger than can be described by a uint32_t capacity. - */ - void coalesce() { - if (!isChained()) { - return; - } - coalesceSlow(); - } - - /** - * Ensure that this chain has at least maxLength bytes available as a - * contiguous memory range. - * - * This method coalesces whole buffers in the chain into this buffer as - * necessary until this buffer's length() is at least maxLength. - * - * After coalescing, the IOBuf will have at least as much headroom as the - * first IOBuf in the chain, and at least as much tailroom as the last IOBuf - * that was coalesced. - * - * Throws std::bad_alloc on error. On error the IOBuf chain will be - * unmodified. Throws std::overflow_error if the length of the coalesced - * portion of the chain is larger than can be described by a uint32_t - * capacity. (Although maxLength is uint32_t, gather() doesn't split - * buffers, so coalescing whole buffers may result in a capacity that can't - * be described in uint32_t. - * - * Upon return, either enough of the chain was coalesced into a contiguous - * region, or the entire chain was coalesced. That is, - * length() >= maxLength || !isChained() is true. - */ - void gather(uint32_t maxLength) { - if (!isChained() || length_ >= maxLength) { - return; - } - coalesceSlow(maxLength); - } - - /** - * Return a new IOBuf chain sharing the same data as this chain. - * - * The new IOBuf chain will normally point to the same underlying data - * buffers as the original chain. (The one exception to this is if some of - * the IOBufs in this chain contain small internal data buffers which cannot - * be shared.) - */ - std::unique_ptr clone() const; - - /** - * Return a new IOBuf with the same data as this IOBuf. - * - * The new IOBuf returned will not be part of a chain (even if this IOBuf is - * part of a larger chain). - */ - std::unique_ptr cloneOne() const; - - // Overridden operator new and delete. - // These directly use malloc() and free() to allocate the space for IOBuf - // objects. This is needed since IOBuf::create() manually uses malloc when - // allocating IOBuf objects with an internal buffer. - void* operator new(size_t size); - void* operator new(size_t size, void* ptr); - void operator delete(void* ptr); - - private: - enum FlagsEnum { - kFlagExt = 0x1, - kFlagUserOwned = 0x2, - kFlagFreeSharedInfo = 0x4, - }; - - // Values for the ExternalBuf type field. - // We currently don't really use this for anything, other than to have it - // around for debugging purposes. We store it at the moment just because we - // have the 4 extra bytes in the ExternalBuf struct that would just be - // padding otherwise. - enum ExtBufTypeEnum { - kExtAllocated = 0, - kExtUserSupplied = 1, - kExtUserOwned = 2, - }; - - struct SharedInfo { - SharedInfo(); - SharedInfo(FreeFunction fn, void* arg); - - // A pointer to a function to call to free the buffer when the refcount - // hits 0. If this is NULL, free() will be used instead. - FreeFunction freeFn; - void* userData; - std::atomic refcount; - }; - struct ExternalBuf { - uint32_t capacity; - uint32_t type; - uint8_t* buf; - // SharedInfo may be NULL if kFlagUserOwned is set. It is non-NULL - // in all other cases. - SharedInfo* sharedInfo; - }; - struct InternalBuf { - uint8_t buf[] __attribute__((aligned)); - }; - - // The maximum size for an IOBuf object, including any internal data buffer - static const uint32_t kMaxIOBufSize = 256; - static const uint32_t kMaxInternalDataSize; - - // Forbidden copy constructor and assignment opererator - IOBuf(IOBuf const &); - IOBuf& operator=(IOBuf const &); - - /** - * Create a new IOBuf with internal data. - * - * end is a pointer to the end of the IOBuf's internal data buffer. - */ - explicit IOBuf(uint8_t* end); - - /** - * Create a new IOBuf pointing to an external buffer. - * - * The caller is responsible for holding a reference count for this new - * IOBuf. The IOBuf constructor does not automatically increment the - * reference count. - */ - IOBuf(ExtBufTypeEnum type, uint32_t flags, - uint8_t* buf, uint32_t capacity, - uint8_t* data, uint32_t length, - SharedInfo* sharedInfo); - - void unshareOneSlow(); - void unshareChained(); - void coalesceSlow(size_t maxLength=std::numeric_limits::max()); - void decrementRefcount(); - void reserveSlow(uint32_t minHeadroom, uint32_t minTailroom); - - static size_t goodExtBufferSize(uint32_t minCapacity); - static void initExtBuffer(uint8_t* buf, size_t mallocSize, - SharedInfo** infoReturn, - uint32_t* capacityReturn); - static void allocExtBuffer(uint32_t minCapacity, - uint8_t** bufReturn, - SharedInfo** infoReturn, - uint32_t* capacityReturn); - - /* - * Member variables - */ - - /* - * Links to the next and the previous IOBuf in this chain. - * - * The chain is circularly linked (the last element in the chain points back - * at the head), and next_ and prev_ can never be NULL. If this IOBuf is the - * only element in the chain, next_ and prev_ will both point to this. - */ - IOBuf* next_; - IOBuf* prev_; - - /* - * A pointer to the start of the data referenced by this IOBuf, and the - * length of the data. - * - * This may refer to any subsection of the actual buffer capacity. - */ - uint8_t* data_; - uint32_t length_; - uint32_t flags_; - - union { - ExternalBuf ext_; - InternalBuf int_; - }; - - struct DeleterBase { - virtual ~DeleterBase() { } - virtual void dispose(void* p) = 0; - }; - - template - struct UniquePtrDeleter : public DeleterBase { - typedef typename UniquePtr::pointer Pointer; - typedef typename UniquePtr::deleter_type Deleter; - - explicit UniquePtrDeleter(Deleter deleter) : deleter_(std::move(deleter)){ } - void dispose(void* p) { - try { - deleter_(static_cast(p)); - delete this; - } catch (...) { - abort(); - } - } - - private: - Deleter deleter_; - }; - - static void freeUniquePtrBuffer(void* ptr, void* userData) { - static_cast(userData)->dispose(ptr); - } -}; - -template -typename std::enable_if::value, - std::unique_ptr>::type -IOBuf::takeOwnership(UniquePtr&& buf, size_t count) { - size_t size = count * sizeof(typename UniquePtr::element_type); - CHECK_LT(size, size_t(std::numeric_limits::max())); - auto deleter = new UniquePtrDeleter(buf.get_deleter()); - return takeOwnership(buf.release(), - size, - &IOBuf::freeUniquePtrBuffer, - deleter); -} - -inline std::unique_ptr IOBuf::copyBuffer( - const void* data, uint32_t size, uint32_t headroom, - uint32_t minTailroom) { - uint32_t capacity = headroom + size + minTailroom; - std::unique_ptr buf = create(capacity); - buf->advance(headroom); - memcpy(buf->writableData(), data, size); - buf->append(size); - return buf; -} - -} // folly - -#endif // FOLLY_IO_IOBUF_H_ diff --git a/thrift/folly/experimental/io/IOBufQueue.h b/thrift/folly/experimental/io/IOBufQueue.h deleted file mode 100644 index 283cd3ac5d..0000000000 --- a/thrift/folly/experimental/io/IOBufQueue.h +++ /dev/null @@ -1,201 +0,0 @@ -/* - * Copyright 2012 Facebook, 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. - */ - -#ifndef FOLLY_IO_IOBUF_QUEUE_H -#define FOLLY_IO_IOBUF_QUEUE_H - -#include "folly/experimental/io/IOBuf.h" - -#include -#include - -namespace folly { - -/** - * An IOBufQueue encapsulates a chain of IOBufs and provides - * convenience functions to append data to the back of the chain - * and remove data from the front. - */ -class IOBufQueue { - public: - struct Options { - Options() : cacheChainLength(false) { } - bool cacheChainLength; - }; - - explicit IOBufQueue(const Options& options = Options()); - - /** - * Add a buffer or buffer chain to the end of this queue. The - * queue takes ownership of buf. - */ - void append(std::unique_ptr&& buf); - - /** - * Add a queue to the end of this queue. The queue takes ownership of - * all buffers from the other queue. - */ - void append(IOBufQueue& other); - void append(IOBufQueue&& other) { - append(other); // call lvalue reference overload, above - } - - /** - * Copy len bytes, starting at buf, to the end of this queue. - * The caller retains ownership of the source data. - */ - void append(const void* buf, size_t len); - - /** - * Copy a string to the end of this queue. - * The caller retains ownership of the source data. - */ - void append(const std::string& buf) { - append(buf.data(), buf.length()); - } - - /** - * Append a chain of IOBuf objects that point to consecutive regions - * within buf. - * - * Just like IOBuf::wrapBuffer, this should only be used when the caller - * knows ahead of time and can ensure that all IOBuf objects that will point - * to this buffer will be destroyed before the buffer itself is destroyed; - * all other caveats from wrapBuffer also apply. - * - * Every buffer except for the last will wrap exactly blockSize bytes. - * Importantly, this method may be used to wrap buffers larger than 4GB. - */ - void wrapBuffer(const void* buf, size_t len, - uint32_t blockSize=(1U << 31)); // default block size: 2GB - - /** - * Obtain a writable block of contiguous bytes at the end of this - * queue, allocating more space if necessary. The amount of space - * reserved will be between min and max, inclusive; the IOBufQueue - * implementation may pick a value in that range that makes efficient - * use of already-allocated internal space. - * - * If the caller subsequently writes anything into the returned space, - * it must call the postallocate() method. - * - * @return The starting address of the block and the length in bytes. - * - * @note The point of the preallocate()/postallocate() mechanism is - * to support I/O APIs such as Thrift's TAsyncSocket::ReadCallback - * that request a buffer from the application and then, in a later - * callback, tell the application how much of the buffer they've - * filled with data. - */ - std::pair preallocate(uint32_t min, uint32_t max); - - /** - * Tell the queue that the caller has written data into the first n - * bytes provided by the previous preallocate() call. - * - * @note n should be less than or equal to the size returned by - * preallocate(). If n is zero, the caller may skip the call - * to postallocate(). If n is nonzero, the caller must not - * invoke any other non-const methods on this IOBufQueue between - * the call to preallocate and the call to postallocate(). - */ - void postallocate(uint32_t n); - - /** - * Obtain a writable block of n contiguous bytes, allocating more space - * if necessary, and mark it as used. The caller can fill it later. - */ - void* allocate(uint32_t n) { - void* p = preallocate(n, n).first; - postallocate(n); - return p; - } - - /** - * Split off the first n bytes of the queue into a separate IOBuf chain, - * and transfer ownership of the new chain to the caller. The IOBufQueue - * retains ownership of everything after the split point. - * - * @warning If the split point lies in the middle of some IOBuf within - * the chain, this function may, as an implementation detail, - * clone that IOBuf. - * - * @throws std::underflow_error if n exceeds the number of bytes - * in the queue. - */ - std::unique_ptr split(size_t n); - - /** - * Similar to IOBuf::trimStart, but works on the whole queue. Will - * pop off buffers that have been completely trimmed. - */ - void trimStart(size_t amount); - - /** - * Similar to IOBuf::trimEnd, but works on the whole queue. Will - * pop off buffers that have been completely trimmed. - */ - void trimEnd(size_t amount); - - /** - * Transfer ownership of the queue's entire IOBuf chain to the caller. - */ - std::unique_ptr&& move() { - chainLength_ = 0; - return std::move(head_); - } - - /** - * Access - */ - const folly::IOBuf* front() const { - return head_.get(); - } - - /** - * Total chain length, only valid if cacheLength was specified in the - * constructor. - */ - size_t chainLength() const { - if (!options_.cacheChainLength) { - throw std::invalid_argument("IOBufQueue: chain length not cached"); - } - return chainLength_; - } - - const Options& options() const { - return options_; - } - - /** Movable */ - IOBufQueue(IOBufQueue&&); - IOBufQueue& operator=(IOBufQueue&&); - - private: - static const size_t kChainLengthNotCached = (size_t)-1; - /** Not copyable */ - IOBufQueue(const IOBufQueue&) = delete; - IOBufQueue& operator=(const IOBufQueue&) = delete; - - Options options_; - size_t chainLength_; - /** Everything that has been appended but not yet discarded or moved out */ - std::unique_ptr head_; -}; - -} // folly - -#endif // FOLLY_IO_IOBUF_QUEUE_H diff --git a/thrift/folly/experimental/io/check.h b/thrift/folly/experimental/io/check.h deleted file mode 100644 index 52324a39d0..0000000000 --- a/thrift/folly/experimental/io/check.h +++ /dev/null @@ -1,2 +0,0 @@ -#define CHECK(a) -#define CHECK_LT(a, b) diff --git a/thrift/gen-cpp/AssocService.cpp b/thrift/gen-cpp/AssocService.cpp deleted file mode 100644 index 006a426e92..0000000000 --- a/thrift/gen-cpp/AssocService.cpp +++ /dev/null @@ -1,2135 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "AssocService.h" -#include "folly/ScopeGuard.h" - -namespace Tleveldb { - -uint32_t AssocService_taoAssocPut_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->tableName); - this->__isset.tableName = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->assocType); - this->__isset.assocType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1); - this->__isset.id1 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id2); - this->__isset.id2 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1Type); - this->__isset.id1Type = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id2Type); - this->__isset.id2Type = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 7: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->timestamp); - this->__isset.timestamp = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 8: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast41; - xfer += iprot->readI32(ecast41); - this->visibility = (AssocVisibility)ecast41; - this->__isset.visibility = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 9: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->update_count); - this->__isset.update_count = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 10: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->dataVersion); - this->__isset.dataVersion = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 11: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->data); - this->__isset.data = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 12: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->wormhole_comment); - this->__isset.wormhole_comment = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocPut_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocPut_args"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->tableName); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->assocType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id1); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64(this->id2); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1Type", apache::thrift::protocol::T_I64, 5); - xfer += oprot->writeI64(this->id1Type); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2Type", apache::thrift::protocol::T_I64, 6); - xfer += oprot->writeI64(this->id2Type); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("timestamp", apache::thrift::protocol::T_I64, 7); - xfer += oprot->writeI64(this->timestamp); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("visibility", apache::thrift::protocol::T_I32, 8); - xfer += oprot->writeI32((int32_t)this->visibility); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("update_count", apache::thrift::protocol::T_BOOL, 9); - xfer += oprot->writeBool(this->update_count); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dataVersion", apache::thrift::protocol::T_I64, 10); - xfer += oprot->writeI64(this->dataVersion); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("data", apache::thrift::protocol::T_STRING, 11); - xfer += oprot->writeBinary(this->data); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("wormhole_comment", apache::thrift::protocol::T_STRING, 12); - xfer += oprot->writeBinary(this->wormhole_comment); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocPut_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocPut_pargs"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->tableName))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64((*(this->assocType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64((*(this->id1))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64((*(this->id2))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1Type", apache::thrift::protocol::T_I64, 5); - xfer += oprot->writeI64((*(this->id1Type))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2Type", apache::thrift::protocol::T_I64, 6); - xfer += oprot->writeI64((*(this->id2Type))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("timestamp", apache::thrift::protocol::T_I64, 7); - xfer += oprot->writeI64((*(this->timestamp))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("visibility", apache::thrift::protocol::T_I32, 8); - xfer += oprot->writeI32((int32_t)(*(this->visibility))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("update_count", apache::thrift::protocol::T_BOOL, 9); - xfer += oprot->writeBool((*(this->update_count))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dataVersion", apache::thrift::protocol::T_I64, 10); - xfer += oprot->writeI64((*(this->dataVersion))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("data", apache::thrift::protocol::T_STRING, 11); - xfer += oprot->writeBinary((*(this->data))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("wormhole_comment", apache::thrift::protocol::T_STRING, 12); - xfer += oprot->writeBinary((*(this->wormhole_comment))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocPut_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->success); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocPut_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("AssocService_taoAssocPut_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I64, 0); - xfer += oprot->writeI64(this->success); - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.io) { - xfer += oprot->writeFieldBegin("io", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->io.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocPut_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64((*(this->success))); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocDelete_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->tableName); - this->__isset.tableName = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->assocType); - this->__isset.assocType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1); - this->__isset.id1 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id2); - this->__isset.id2 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast42; - xfer += iprot->readI32(ecast42); - this->visibility = (AssocVisibility)ecast42; - this->__isset.visibility = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->update_count); - this->__isset.update_count = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 7: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->wormhole_comment); - this->__isset.wormhole_comment = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocDelete_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocDelete_args"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->tableName); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->assocType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id1); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64(this->id2); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("visibility", apache::thrift::protocol::T_I32, 5); - xfer += oprot->writeI32((int32_t)this->visibility); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("update_count", apache::thrift::protocol::T_BOOL, 6); - xfer += oprot->writeBool(this->update_count); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("wormhole_comment", apache::thrift::protocol::T_STRING, 7); - xfer += oprot->writeBinary(this->wormhole_comment); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocDelete_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocDelete_pargs"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->tableName))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64((*(this->assocType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64((*(this->id1))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64((*(this->id2))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("visibility", apache::thrift::protocol::T_I32, 5); - xfer += oprot->writeI32((int32_t)(*(this->visibility))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("update_count", apache::thrift::protocol::T_BOOL, 6); - xfer += oprot->writeBool((*(this->update_count))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("wormhole_comment", apache::thrift::protocol::T_STRING, 7); - xfer += oprot->writeBinary((*(this->wormhole_comment))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocDelete_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->success); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocDelete_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("AssocService_taoAssocDelete_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I64, 0); - xfer += oprot->writeI64(this->success); - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.io) { - xfer += oprot->writeFieldBegin("io", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->io.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocDelete_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64((*(this->success))); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->tableName); - this->__isset.tableName = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->assocType); - this->__isset.assocType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1); - this->__isset.id1 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->start_time); - this->__isset.start_time = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->end_time); - this->__isset.end_time = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->offset); - this->__isset.offset = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 7: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->limit); - this->__isset.limit = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocRangeGet_args"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->tableName); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->assocType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id1); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("start_time", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64(this->start_time); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("end_time", apache::thrift::protocol::T_I64, 5); - xfer += oprot->writeI64(this->end_time); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("offset", apache::thrift::protocol::T_I64, 6); - xfer += oprot->writeI64(this->offset); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("limit", apache::thrift::protocol::T_I64, 7); - xfer += oprot->writeI64(this->limit); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocRangeGet_pargs"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->tableName))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64((*(this->assocType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64((*(this->id1))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("start_time", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64((*(this->start_time))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("end_time", apache::thrift::protocol::T_I64, 5); - xfer += oprot->writeI64((*(this->end_time))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("offset", apache::thrift::protocol::T_I64, 6); - xfer += oprot->writeI64((*(this->offset))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("limit", apache::thrift::protocol::T_I64, 7); - xfer += oprot->writeI64((*(this->limit))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->success.clear(); - uint32_t _size43; - apache::thrift::protocol::TType _etype46; - xfer += iprot->readListBegin(_etype46, _size43); - this->success.resize(_size43); - uint32_t _i47; - for (_i47 = 0; _i47 < _size43; ++_i47) - { - xfer += this->success[_i47].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("AssocService_taoAssocRangeGet_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_LIST, 0); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->success.size()); - std::vector ::const_iterator _iter48; - for (_iter48 = this->success.begin(); _iter48 != this->success.end(); ++_iter48) - { - xfer += (*_iter48).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.io) { - xfer += oprot->writeFieldBegin("io", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->io.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocRangeGet_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - (*(this->success)).clear(); - uint32_t _size49; - apache::thrift::protocol::TType _etype52; - xfer += iprot->readListBegin(_etype52, _size49); - (*(this->success)).resize(_size49); - uint32_t _i53; - for (_i53 = 0; _i53 < _size49; ++_i53) - { - xfer += (*(this->success))[_i53].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocGet_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->tableName); - this->__isset.tableName = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->assocType); - this->__isset.assocType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1); - this->__isset.id1 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->id2s.clear(); - uint32_t _size54; - apache::thrift::protocol::TType _etype57; - xfer += iprot->readListBegin(_etype57, _size54); - this->id2s.resize(_size54); - uint32_t _i58; - for (_i58 = 0; _i58 < _size54; ++_i58) - { - xfer += iprot->readI64(this->id2s[_i58]); - } - xfer += iprot->readListEnd(); - } - this->__isset.id2s = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocGet_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocGet_args"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->tableName); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->assocType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id1); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2s", apache::thrift::protocol::T_LIST, 4); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_I64, this->id2s.size()); - std::vector ::const_iterator _iter59; - for (_iter59 = this->id2s.begin(); _iter59 != this->id2s.end(); ++_iter59) - { - xfer += oprot->writeI64((*_iter59)); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocGet_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocGet_pargs"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->tableName))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64((*(this->assocType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64((*(this->id1))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2s", apache::thrift::protocol::T_LIST, 4); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_I64, (*(this->id2s)).size()); - std::vector ::const_iterator _iter60; - for (_iter60 = (*(this->id2s)).begin(); _iter60 != (*(this->id2s)).end(); ++_iter60) - { - xfer += oprot->writeI64((*_iter60)); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocGet_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->success.clear(); - uint32_t _size61; - apache::thrift::protocol::TType _etype64; - xfer += iprot->readListBegin(_etype64, _size61); - this->success.resize(_size61); - uint32_t _i65; - for (_i65 = 0; _i65 < _size61; ++_i65) - { - xfer += this->success[_i65].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocGet_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("AssocService_taoAssocGet_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_LIST, 0); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->success.size()); - std::vector ::const_iterator _iter66; - for (_iter66 = this->success.begin(); _iter66 != this->success.end(); ++_iter66) - { - xfer += (*_iter66).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.io) { - xfer += oprot->writeFieldBegin("io", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->io.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocGet_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_LIST) { - { - (*(this->success)).clear(); - uint32_t _size67; - apache::thrift::protocol::TType _etype70; - xfer += iprot->readListBegin(_etype70, _size67); - (*(this->success)).resize(_size67); - uint32_t _i71; - for (_i71 = 0; _i71 < _size67; ++_i71) - { - xfer += (*(this->success))[_i71].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocCount_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->tableName); - this->__isset.tableName = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->assocType); - this->__isset.assocType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1); - this->__isset.id1 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocCount_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocCount_args"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->tableName); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->assocType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id1); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocCount_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("AssocService_taoAssocCount_pargs"); - xfer += oprot->writeFieldBegin("tableName", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->tableName))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("assocType", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64((*(this->assocType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64((*(this->id1))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocCount_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->success); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t AssocService_taoAssocCount_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("AssocService_taoAssocCount_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I64, 0); - xfer += oprot->writeI64(this->success); - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.io) { - xfer += oprot->writeFieldBegin("io", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->io.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t AssocService_taoAssocCount_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64((*(this->success))); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->io.read(iprot); - this->__isset.io = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -int32_t AssocServiceClient::getNextSendSequenceId() -{ - return nextSendSequenceId_++; -} - -int32_t AssocServiceClient::getNextRecvSequenceId() -{ - return nextRecvSequenceId_++; -} - -int64_t AssocServiceClient::taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("AssocService.taoAssocPut", NULL); - - try { - send_taoAssocPut(tableName, assocType, id1, id2, id1Type, id2Type, timestamp, visibility, update_count, dataVersion, data, wormhole_comment); - return recv_taoAssocPut(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocPut"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocPut"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void AssocServiceClient::send_taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "AssocService.taoAssocPut"); - oprot_->writeMessageBegin("taoAssocPut", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - AssocService_taoAssocPut_pargs args; - args.tableName = &tableName; - args.assocType = &assocType; - args.id1 = &id1; - args.id2 = &id2; - args.id1Type = &id1Type; - args.id2Type = &id2Type; - args.timestamp = ×tamp; - args.visibility = &visibility; - args.update_count = &update_count; - args.dataVersion = &dataVersion; - args.data = &data; - args.wormhole_comment = &wormhole_comment; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes72 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "AssocService.taoAssocPut", _bytes72); - return; -} - -int64_t AssocServiceClient::recv_taoAssocPut() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "AssocService.taoAssocPut"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("taoAssocPut") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - int64_t _return; - AssocService_taoAssocPut_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "AssocService.taoAssocPut", bytes); - - if (result.__isset.success) { - return _return; - } - if (result.__isset.io) { - throw result.io; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "taoAssocPut failed: unknown result"); -} - -int64_t AssocServiceClient::taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("AssocService.taoAssocDelete", NULL); - - try { - send_taoAssocDelete(tableName, assocType, id1, id2, visibility, update_count, wormhole_comment); - return recv_taoAssocDelete(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocDelete"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocDelete"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void AssocServiceClient::send_taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "AssocService.taoAssocDelete"); - oprot_->writeMessageBegin("taoAssocDelete", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - AssocService_taoAssocDelete_pargs args; - args.tableName = &tableName; - args.assocType = &assocType; - args.id1 = &id1; - args.id2 = &id2; - args.visibility = &visibility; - args.update_count = &update_count; - args.wormhole_comment = &wormhole_comment; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes73 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "AssocService.taoAssocDelete", _bytes73); - return; -} - -int64_t AssocServiceClient::recv_taoAssocDelete() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "AssocService.taoAssocDelete"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("taoAssocDelete") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - int64_t _return; - AssocService_taoAssocDelete_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "AssocService.taoAssocDelete", bytes); - - if (result.__isset.success) { - return _return; - } - if (result.__isset.io) { - throw result.io; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "taoAssocDelete failed: unknown result"); -} - -void AssocServiceClient::taoAssocRangeGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("AssocService.taoAssocRangeGet", NULL); - - try { - send_taoAssocRangeGet(tableName, assocType, id1, start_time, end_time, offset, limit); - recv_taoAssocRangeGet(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocRangeGet"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocRangeGet"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void AssocServiceClient::send_taoAssocRangeGet(const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "AssocService.taoAssocRangeGet"); - oprot_->writeMessageBegin("taoAssocRangeGet", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - AssocService_taoAssocRangeGet_pargs args; - args.tableName = &tableName; - args.assocType = &assocType; - args.id1 = &id1; - args.start_time = &start_time; - args.end_time = &end_time; - args.offset = &offset; - args.limit = &limit; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes74 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "AssocService.taoAssocRangeGet", _bytes74); - return; -} - -void AssocServiceClient::recv_taoAssocRangeGet(std::vector & _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "AssocService.taoAssocRangeGet"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("taoAssocRangeGet") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - AssocService_taoAssocRangeGet_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "AssocService.taoAssocRangeGet", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - if (result.__isset.io) { - throw result.io; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "taoAssocRangeGet failed: unknown result"); -} - -void AssocServiceClient::taoAssocGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("AssocService.taoAssocGet", NULL); - - try { - send_taoAssocGet(tableName, assocType, id1, id2s); - recv_taoAssocGet(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocGet"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocGet"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void AssocServiceClient::send_taoAssocGet(const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "AssocService.taoAssocGet"); - oprot_->writeMessageBegin("taoAssocGet", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - AssocService_taoAssocGet_pargs args; - args.tableName = &tableName; - args.assocType = &assocType; - args.id1 = &id1; - args.id2s = &id2s; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes75 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "AssocService.taoAssocGet", _bytes75); - return; -} - -void AssocServiceClient::recv_taoAssocGet(std::vector & _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "AssocService.taoAssocGet"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("taoAssocGet") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - AssocService_taoAssocGet_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "AssocService.taoAssocGet", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - if (result.__isset.io) { - throw result.io; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "taoAssocGet failed: unknown result"); -} - -int64_t AssocServiceClient::taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("AssocService.taoAssocCount", NULL); - - try { - send_taoAssocCount(tableName, assocType, id1); - return recv_taoAssocCount(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocCount"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "AssocService.taoAssocCount"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void AssocServiceClient::send_taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "AssocService.taoAssocCount"); - oprot_->writeMessageBegin("taoAssocCount", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - AssocService_taoAssocCount_pargs args; - args.tableName = &tableName; - args.assocType = &assocType; - args.id1 = &id1; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes76 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "AssocService.taoAssocCount", _bytes76); - return; -} - -int64_t AssocServiceClient::recv_taoAssocCount() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "AssocService.taoAssocCount"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("taoAssocCount") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - int64_t _return; - AssocService_taoAssocCount_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "AssocService.taoAssocCount", bytes); - - if (result.__isset.success) { - return _return; - } - if (result.__isset.io) { - throw result.io; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "taoAssocCount failed: unknown result"); -} - -bool AssocServiceProcessor::dispatchCall(::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext) { - ProcessMap::iterator pfn; - pfn = processMap_.find(fname); - if (pfn == processMap_.end()) { - iprot->skip(apache::thrift::protocol::T_STRUCT); - iprot->readMessageEnd(); - iprot->getTransport()->readEnd(); - apache::thrift::TApplicationException x(apache::thrift::TApplicationException::UNKNOWN_METHOD, "Invalid method name: '"+fname+"'"); - oprot->writeMessageBegin(fname, apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return true; - } - const ProcessFunction& pf = pfn->second; - (this->*pf)(seqid, iprot, oprot, connectionContext); - return true; -} - -void AssocServiceProcessor::process_taoAssocPut(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("AssocService.taoAssocPut", connectionContext)); - - this->preRead(ctx.get(), "AssocService.taoAssocPut"); - AssocService_taoAssocPut_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "AssocService.taoAssocPut", bytes); - - AssocService_taoAssocPut_result result; - try { - result.success = iface_->taoAssocPut(args.tableName, args.assocType, args.id1, args.id2, args.id1Type, args.id2Type, args.timestamp, args.visibility, args.update_count, args.dataVersion, args.data, args.wormhole_comment); - result.__isset.success = true; - } catch (IOError &io) { - result.io = io; - result.__isset.io = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "AssocService.taoAssocPut"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("taoAssocPut", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "AssocService.taoAssocPut"); - oprot->writeMessageBegin("taoAssocPut", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "AssocService.taoAssocPut", bytes); - -} - -void AssocServiceProcessor::process_taoAssocDelete(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("AssocService.taoAssocDelete", connectionContext)); - - this->preRead(ctx.get(), "AssocService.taoAssocDelete"); - AssocService_taoAssocDelete_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "AssocService.taoAssocDelete", bytes); - - AssocService_taoAssocDelete_result result; - try { - result.success = iface_->taoAssocDelete(args.tableName, args.assocType, args.id1, args.id2, args.visibility, args.update_count, args.wormhole_comment); - result.__isset.success = true; - } catch (IOError &io) { - result.io = io; - result.__isset.io = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "AssocService.taoAssocDelete"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("taoAssocDelete", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "AssocService.taoAssocDelete"); - oprot->writeMessageBegin("taoAssocDelete", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "AssocService.taoAssocDelete", bytes); - -} - -void AssocServiceProcessor::process_taoAssocRangeGet(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("AssocService.taoAssocRangeGet", connectionContext)); - - this->preRead(ctx.get(), "AssocService.taoAssocRangeGet"); - AssocService_taoAssocRangeGet_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "AssocService.taoAssocRangeGet", bytes); - - AssocService_taoAssocRangeGet_result result; - try { - iface_->taoAssocRangeGet(result.success, args.tableName, args.assocType, args.id1, args.start_time, args.end_time, args.offset, args.limit); - result.__isset.success = true; - } catch (IOError &io) { - result.io = io; - result.__isset.io = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "AssocService.taoAssocRangeGet"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("taoAssocRangeGet", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "AssocService.taoAssocRangeGet"); - oprot->writeMessageBegin("taoAssocRangeGet", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "AssocService.taoAssocRangeGet", bytes); - -} - -void AssocServiceProcessor::process_taoAssocGet(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("AssocService.taoAssocGet", connectionContext)); - - this->preRead(ctx.get(), "AssocService.taoAssocGet"); - AssocService_taoAssocGet_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "AssocService.taoAssocGet", bytes); - - AssocService_taoAssocGet_result result; - try { - iface_->taoAssocGet(result.success, args.tableName, args.assocType, args.id1, args.id2s); - result.__isset.success = true; - } catch (IOError &io) { - result.io = io; - result.__isset.io = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "AssocService.taoAssocGet"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("taoAssocGet", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "AssocService.taoAssocGet"); - oprot->writeMessageBegin("taoAssocGet", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "AssocService.taoAssocGet", bytes); - -} - -void AssocServiceProcessor::process_taoAssocCount(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("AssocService.taoAssocCount", connectionContext)); - - this->preRead(ctx.get(), "AssocService.taoAssocCount"); - AssocService_taoAssocCount_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "AssocService.taoAssocCount", bytes); - - AssocService_taoAssocCount_result result; - try { - result.success = iface_->taoAssocCount(args.tableName, args.assocType, args.id1); - result.__isset.success = true; - } catch (IOError &io) { - result.io = io; - result.__isset.io = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "AssocService.taoAssocCount"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("taoAssocCount", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "AssocService.taoAssocCount"); - oprot->writeMessageBegin("taoAssocCount", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "AssocService.taoAssocCount", bytes); - -} - -::boost::shared_ptr< ::apache::thrift::TProcessor > AssocServiceProcessorFactory::getProcessor(::apache::thrift::server::TConnectionContext* ctx) { - ::apache::thrift::ReleaseHandler< AssocServiceIfFactory > cleanup(handlerFactory_); - ::boost::shared_ptr< AssocServiceIf > handler(handlerFactory_->getHandler(ctx), cleanup); - ::boost::shared_ptr< ::apache::thrift::TProcessor > processor(new AssocServiceProcessor(handler)); - return processor; -} -} // namespace - diff --git a/thrift/gen-cpp/AssocService.h b/thrift/gen-cpp/AssocService.h deleted file mode 100644 index ad588eac39..0000000000 --- a/thrift/gen-cpp/AssocService.h +++ /dev/null @@ -1,1132 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef _Tleveldb_AssocService_H -#define _Tleveldb_AssocService_H - -#include -#include "leveldb_types.h" - -namespace Tleveldb { - -class AssocServiceIf { - public: - virtual ~AssocServiceIf() {} - virtual int64_t taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment) = 0; - virtual int64_t taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment) = 0; - virtual void taoAssocRangeGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit) = 0; - virtual void taoAssocGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s) = 0; - virtual int64_t taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1) = 0; -}; - -class AssocServiceIfFactory { - public: - typedef AssocServiceIf Handler; - - virtual ~AssocServiceIfFactory() {} - - virtual AssocServiceIf* getHandler(::apache::thrift::server::TConnectionContext* ctx) = 0; - virtual void releaseHandler(AssocServiceIf* handler) = 0; -}; - -class AssocServiceIfSingletonFactory : virtual public AssocServiceIfFactory { - public: - AssocServiceIfSingletonFactory(const boost::shared_ptr& iface) : iface_(iface) {} - virtual ~AssocServiceIfSingletonFactory() {} - - virtual AssocServiceIf* getHandler(::apache::thrift::server::TConnectionContext*) { - return iface_.get(); - } - virtual void releaseHandler(AssocServiceIf* handler) {} - - protected: - boost::shared_ptr iface_; -}; - -class AssocServiceNull : virtual public AssocServiceIf { - public: - virtual ~AssocServiceNull() {} - int64_t taoAssocPut(const Text& /* tableName */, int64_t /* assocType */, int64_t /* id1 */, int64_t /* id2 */, int64_t /* id1Type */, int64_t /* id2Type */, int64_t /* timestamp */, AssocVisibility /* visibility */, bool /* update_count */, int64_t /* dataVersion */, const Text& /* data */, const Text& /* wormhole_comment */) { - int64_t _return = 0; - return _return; - } - int64_t taoAssocDelete(const Text& /* tableName */, int64_t /* assocType */, int64_t /* id1 */, int64_t /* id2 */, AssocVisibility /* visibility */, bool /* update_count */, const Text& /* wormhole_comment */) { - int64_t _return = 0; - return _return; - } - void taoAssocRangeGet(std::vector & /* _return */, const Text& /* tableName */, int64_t /* assocType */, int64_t /* id1 */, int64_t /* start_time */, int64_t /* end_time */, int64_t /* offset */, int64_t /* limit */) { - return; - } - void taoAssocGet(std::vector & /* _return */, const Text& /* tableName */, int64_t /* assocType */, int64_t /* id1 */, const std::vector & /* id2s */) { - return; - } - int64_t taoAssocCount(const Text& /* tableName */, int64_t /* assocType */, int64_t /* id1 */) { - int64_t _return = 0; - return _return; - } -}; - -class AssocService_taoAssocPut_args { - public: - - static const uint64_t _reflection_id = 3290305132890847884U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocPut_args() : tableName(""), assocType(0), id1(0), id2(0), id1Type(0), id2Type(0), timestamp(0), visibility(static_cast(0)), update_count(0), dataVersion(0), data(""), wormhole_comment("") { - } - - AssocService_taoAssocPut_args(const AssocService_taoAssocPut_args&) = default; - AssocService_taoAssocPut_args& operator=(const AssocService_taoAssocPut_args&) = default; - AssocService_taoAssocPut_args(AssocService_taoAssocPut_args&&) = default; - AssocService_taoAssocPut_args& operator=(AssocService_taoAssocPut_args&&) = default; - - void __clear() { - tableName = ""; - assocType = 0; - id1 = 0; - id2 = 0; - id1Type = 0; - id2Type = 0; - timestamp = 0; - visibility = static_cast(0); - update_count = 0; - dataVersion = 0; - data = ""; - wormhole_comment = ""; - __isset.__clear(); - } - - virtual ~AssocService_taoAssocPut_args() throw() {} - - Text tableName; - int64_t assocType; - int64_t id1; - int64_t id2; - int64_t id1Type; - int64_t id2Type; - int64_t timestamp; - AssocVisibility visibility; - bool update_count; - int64_t dataVersion; - Text data; - Text wormhole_comment; - - struct __isset { - __isset() { __clear(); } - void __clear() { - tableName = false; - assocType = false; - id1 = false; - id2 = false; - id1Type = false; - id2Type = false; - timestamp = false; - visibility = false; - update_count = false; - dataVersion = false; - data = false; - wormhole_comment = false; - } - bool tableName; - bool assocType; - bool id1; - bool id2; - bool id1Type; - bool id2Type; - bool timestamp; - bool visibility; - bool update_count; - bool dataVersion; - bool data; - bool wormhole_comment; - } __isset; - - bool operator == (const AssocService_taoAssocPut_args & rhs) const - { - if (!(this->tableName == rhs.tableName)) - return false; - if (!(this->assocType == rhs.assocType)) - return false; - if (!(this->id1 == rhs.id1)) - return false; - if (!(this->id2 == rhs.id2)) - return false; - if (!(this->id1Type == rhs.id1Type)) - return false; - if (!(this->id2Type == rhs.id2Type)) - return false; - if (!(this->timestamp == rhs.timestamp)) - return false; - if (!(this->visibility == rhs.visibility)) - return false; - if (!(this->update_count == rhs.update_count)) - return false; - if (!(this->dataVersion == rhs.dataVersion)) - return false; - if (!(this->data == rhs.data)) - return false; - if (!(this->wormhole_comment == rhs.wormhole_comment)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocPut_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocPut_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocPut_pargs { - public: - - static const uint64_t _reflection_id = 7425952401724740620U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocPut_pargs() throw() {} - - const Text* tableName; - const int64_t* assocType; - const int64_t* id1; - const int64_t* id2; - const int64_t* id1Type; - const int64_t* id2Type; - const int64_t* timestamp; - const AssocVisibility* visibility; - const bool* update_count; - const int64_t* dataVersion; - const Text* data; - const Text* wormhole_comment; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocPut_result { - public: - - static const uint64_t _reflection_id = 6526721986074776780U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocPut_result() : success(0) { - } - - AssocService_taoAssocPut_result(const AssocService_taoAssocPut_result&) = default; - AssocService_taoAssocPut_result& operator=(const AssocService_taoAssocPut_result&) = default; - AssocService_taoAssocPut_result(AssocService_taoAssocPut_result&&) = default; - AssocService_taoAssocPut_result& operator=(AssocService_taoAssocPut_result&&) = default; - - void __clear() { - success = 0; - io.__clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocPut_result() throw() {} - - int64_t success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - bool operator == (const AssocService_taoAssocPut_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->io == rhs.io)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocPut_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocPut_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocPut_presult { - public: - - static const uint64_t _reflection_id = 12671665598022141484U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocPut_presult() throw() {} - - int64_t* success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class AssocService_taoAssocDelete_args { - public: - - static const uint64_t _reflection_id = 10270079889653832204U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocDelete_args() : tableName(""), assocType(0), id1(0), id2(0), visibility(static_cast(0)), update_count(0), wormhole_comment("") { - } - - AssocService_taoAssocDelete_args(const AssocService_taoAssocDelete_args&) = default; - AssocService_taoAssocDelete_args& operator=(const AssocService_taoAssocDelete_args&) = default; - AssocService_taoAssocDelete_args(AssocService_taoAssocDelete_args&&) = default; - AssocService_taoAssocDelete_args& operator=(AssocService_taoAssocDelete_args&&) = default; - - void __clear() { - tableName = ""; - assocType = 0; - id1 = 0; - id2 = 0; - visibility = static_cast(0); - update_count = 0; - wormhole_comment = ""; - __isset.__clear(); - } - - virtual ~AssocService_taoAssocDelete_args() throw() {} - - Text tableName; - int64_t assocType; - int64_t id1; - int64_t id2; - AssocVisibility visibility; - bool update_count; - Text wormhole_comment; - - struct __isset { - __isset() { __clear(); } - void __clear() { - tableName = false; - assocType = false; - id1 = false; - id2 = false; - visibility = false; - update_count = false; - wormhole_comment = false; - } - bool tableName; - bool assocType; - bool id1; - bool id2; - bool visibility; - bool update_count; - bool wormhole_comment; - } __isset; - - bool operator == (const AssocService_taoAssocDelete_args & rhs) const - { - if (!(this->tableName == rhs.tableName)) - return false; - if (!(this->assocType == rhs.assocType)) - return false; - if (!(this->id1 == rhs.id1)) - return false; - if (!(this->id2 == rhs.id2)) - return false; - if (!(this->visibility == rhs.visibility)) - return false; - if (!(this->update_count == rhs.update_count)) - return false; - if (!(this->wormhole_comment == rhs.wormhole_comment)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocDelete_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocDelete_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocDelete_pargs { - public: - - static const uint64_t _reflection_id = 4795542044867620812U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocDelete_pargs() throw() {} - - const Text* tableName; - const int64_t* assocType; - const int64_t* id1; - const int64_t* id2; - const AssocVisibility* visibility; - const bool* update_count; - const Text* wormhole_comment; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocDelete_result { - public: - - static const uint64_t _reflection_id = 12133907334276134572U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocDelete_result() : success(0) { - } - - AssocService_taoAssocDelete_result(const AssocService_taoAssocDelete_result&) = default; - AssocService_taoAssocDelete_result& operator=(const AssocService_taoAssocDelete_result&) = default; - AssocService_taoAssocDelete_result(AssocService_taoAssocDelete_result&&) = default; - AssocService_taoAssocDelete_result& operator=(AssocService_taoAssocDelete_result&&) = default; - - void __clear() { - success = 0; - io.__clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocDelete_result() throw() {} - - int64_t success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - bool operator == (const AssocService_taoAssocDelete_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->io == rhs.io)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocDelete_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocDelete_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocDelete_presult { - public: - - static const uint64_t _reflection_id = 14125941752039435212U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocDelete_presult() throw() {} - - int64_t* success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class AssocService_taoAssocRangeGet_args { - public: - - static const uint64_t _reflection_id = 1735721774207336108U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocRangeGet_args() : tableName(""), assocType(0), id1(0), start_time(0), end_time(0), offset(0), limit(0) { - } - - AssocService_taoAssocRangeGet_args(const AssocService_taoAssocRangeGet_args&) = default; - AssocService_taoAssocRangeGet_args& operator=(const AssocService_taoAssocRangeGet_args&) = default; - AssocService_taoAssocRangeGet_args(AssocService_taoAssocRangeGet_args&&) = default; - AssocService_taoAssocRangeGet_args& operator=(AssocService_taoAssocRangeGet_args&&) = default; - - void __clear() { - tableName = ""; - assocType = 0; - id1 = 0; - start_time = 0; - end_time = 0; - offset = 0; - limit = 0; - __isset.__clear(); - } - - virtual ~AssocService_taoAssocRangeGet_args() throw() {} - - Text tableName; - int64_t assocType; - int64_t id1; - int64_t start_time; - int64_t end_time; - int64_t offset; - int64_t limit; - - struct __isset { - __isset() { __clear(); } - void __clear() { - tableName = false; - assocType = false; - id1 = false; - start_time = false; - end_time = false; - offset = false; - limit = false; - } - bool tableName; - bool assocType; - bool id1; - bool start_time; - bool end_time; - bool offset; - bool limit; - } __isset; - - bool operator == (const AssocService_taoAssocRangeGet_args & rhs) const - { - if (!(this->tableName == rhs.tableName)) - return false; - if (!(this->assocType == rhs.assocType)) - return false; - if (!(this->id1 == rhs.id1)) - return false; - if (!(this->start_time == rhs.start_time)) - return false; - if (!(this->end_time == rhs.end_time)) - return false; - if (!(this->offset == rhs.offset)) - return false; - if (!(this->limit == rhs.limit)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocRangeGet_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocRangeGet_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocRangeGet_pargs { - public: - - static const uint64_t _reflection_id = 5056015852824808108U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocRangeGet_pargs() throw() {} - - const Text* tableName; - const int64_t* assocType; - const int64_t* id1; - const int64_t* start_time; - const int64_t* end_time; - const int64_t* offset; - const int64_t* limit; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocRangeGet_result { - public: - - static const uint64_t _reflection_id = 100254754914408876U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocRangeGet_result() { - } - - AssocService_taoAssocRangeGet_result(const AssocService_taoAssocRangeGet_result&) = default; - AssocService_taoAssocRangeGet_result& operator=(const AssocService_taoAssocRangeGet_result&) = default; - AssocService_taoAssocRangeGet_result(AssocService_taoAssocRangeGet_result&&) = default; - AssocService_taoAssocRangeGet_result& operator=(AssocService_taoAssocRangeGet_result&&) = default; - - void __clear() { - success.clear(); - io.__clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocRangeGet_result() throw() {} - - std::vector success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - bool operator == (const AssocService_taoAssocRangeGet_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->io == rhs.io)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocRangeGet_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocRangeGet_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocRangeGet_presult { - public: - - static const uint64_t _reflection_id = 10811387055164057228U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocRangeGet_presult() throw() {} - - std::vector * success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class AssocService_taoAssocGet_args { - public: - - static const uint64_t _reflection_id = 16546497730627888492U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocGet_args() : tableName(""), assocType(0), id1(0) { - } - - AssocService_taoAssocGet_args(const AssocService_taoAssocGet_args&) = default; - AssocService_taoAssocGet_args& operator=(const AssocService_taoAssocGet_args&) = default; - AssocService_taoAssocGet_args(AssocService_taoAssocGet_args&&) = default; - AssocService_taoAssocGet_args& operator=(AssocService_taoAssocGet_args&&) = default; - - void __clear() { - tableName = ""; - assocType = 0; - id1 = 0; - id2s.clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocGet_args() throw() {} - - Text tableName; - int64_t assocType; - int64_t id1; - std::vector id2s; - - struct __isset { - __isset() { __clear(); } - void __clear() { - tableName = false; - assocType = false; - id1 = false; - id2s = false; - } - bool tableName; - bool assocType; - bool id1; - bool id2s; - } __isset; - - bool operator == (const AssocService_taoAssocGet_args & rhs) const - { - if (!(this->tableName == rhs.tableName)) - return false; - if (!(this->assocType == rhs.assocType)) - return false; - if (!(this->id1 == rhs.id1)) - return false; - if (!(this->id2s == rhs.id2s)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocGet_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocGet_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocGet_pargs { - public: - - static const uint64_t _reflection_id = 9292472387579296684U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocGet_pargs() throw() {} - - const Text* tableName; - const int64_t* assocType; - const int64_t* id1; - const std::vector * id2s; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocGet_result { - public: - - static const uint64_t _reflection_id = 330126441639238892U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocGet_result() { - } - - AssocService_taoAssocGet_result(const AssocService_taoAssocGet_result&) = default; - AssocService_taoAssocGet_result& operator=(const AssocService_taoAssocGet_result&) = default; - AssocService_taoAssocGet_result(AssocService_taoAssocGet_result&&) = default; - AssocService_taoAssocGet_result& operator=(AssocService_taoAssocGet_result&&) = default; - - void __clear() { - success.clear(); - io.__clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocGet_result() throw() {} - - std::vector success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - bool operator == (const AssocService_taoAssocGet_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->io == rhs.io)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocGet_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocGet_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocGet_presult { - public: - - static const uint64_t _reflection_id = 230475374475192236U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocGet_presult() throw() {} - - std::vector * success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class AssocService_taoAssocCount_args { - public: - - static const uint64_t _reflection_id = 769199732449473196U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocCount_args() : tableName(""), assocType(0), id1(0) { - } - - AssocService_taoAssocCount_args(const AssocService_taoAssocCount_args&) = default; - AssocService_taoAssocCount_args& operator=(const AssocService_taoAssocCount_args&) = default; - AssocService_taoAssocCount_args(AssocService_taoAssocCount_args&&) = default; - AssocService_taoAssocCount_args& operator=(AssocService_taoAssocCount_args&&) = default; - - void __clear() { - tableName = ""; - assocType = 0; - id1 = 0; - __isset.__clear(); - } - - virtual ~AssocService_taoAssocCount_args() throw() {} - - Text tableName; - int64_t assocType; - int64_t id1; - - struct __isset { - __isset() { __clear(); } - void __clear() { - tableName = false; - assocType = false; - id1 = false; - } - bool tableName; - bool assocType; - bool id1; - } __isset; - - bool operator == (const AssocService_taoAssocCount_args & rhs) const - { - if (!(this->tableName == rhs.tableName)) - return false; - if (!(this->assocType == rhs.assocType)) - return false; - if (!(this->id1 == rhs.id1)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocCount_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocCount_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocCount_pargs { - public: - - static const uint64_t _reflection_id = 4871158744897524556U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocCount_pargs() throw() {} - - const Text* tableName; - const int64_t* assocType; - const int64_t* id1; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocCount_result { - public: - - static const uint64_t _reflection_id = 824429928060194060U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - AssocService_taoAssocCount_result() : success(0) { - } - - AssocService_taoAssocCount_result(const AssocService_taoAssocCount_result&) = default; - AssocService_taoAssocCount_result& operator=(const AssocService_taoAssocCount_result&) = default; - AssocService_taoAssocCount_result(AssocService_taoAssocCount_result&&) = default; - AssocService_taoAssocCount_result& operator=(AssocService_taoAssocCount_result&&) = default; - - void __clear() { - success = 0; - io.__clear(); - __isset.__clear(); - } - - virtual ~AssocService_taoAssocCount_result() throw() {} - - int64_t success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - bool operator == (const AssocService_taoAssocCount_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->io == rhs.io)) - return false; - return true; - } - bool operator != (const AssocService_taoAssocCount_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const AssocService_taoAssocCount_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class AssocService_taoAssocCount_presult { - public: - - static const uint64_t _reflection_id = 7130695620086441804U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~AssocService_taoAssocCount_presult() throw() {} - - int64_t* success; - IOError io; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - io = false; - } - bool success; - bool io; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class AssocServiceClient : virtual public AssocServiceIf, virtual public apache::thrift::TClientBase { - public: - AssocServiceClient(boost::shared_ptr prot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(prot), - poprot_(prot) { - iprot_ = prot.get(); - oprot_ = prot.get(); - } - AssocServiceClient(boost::shared_ptr iprot, boost::shared_ptr oprot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(iprot), - poprot_(oprot) { - iprot_ = iprot.get(); - oprot_ = oprot.get(); - } - boost::shared_ptr getInputProtocol() { - return piprot_; - } - boost::shared_ptr getOutputProtocol() { - return poprot_; - } - int64_t taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment); - void send_taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment); - int64_t recv_taoAssocPut(); - int64_t taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment); - void send_taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment); - int64_t recv_taoAssocDelete(); - void taoAssocRangeGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit); - void send_taoAssocRangeGet(const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit); - void recv_taoAssocRangeGet(std::vector & _return); - void taoAssocGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s); - void send_taoAssocGet(const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s); - void recv_taoAssocGet(std::vector & _return); - int64_t taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1); - void send_taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1); - int64_t recv_taoAssocCount(); - - /** - * Disable checking the seqid field in server responses. - * - * This should only be used with broken servers that return incorrect seqid values. - */ - void _disableSequenceIdChecks() { - checkSeqid_ = false; - } - - protected: - bool checkSeqid_; - int32_t nextSendSequenceId_; - int32_t nextRecvSequenceId_; - int32_t getNextSendSequenceId(); - int32_t getNextRecvSequenceId(); - boost::shared_ptr piprot_; - boost::shared_ptr poprot_; - apache::thrift::protocol::TProtocol* iprot_; - apache::thrift::protocol::TProtocol* oprot_; -}; - -class AssocServiceProcessor : public ::apache::thrift::TDispatchProcessor { - protected: - boost::shared_ptr iface_; - virtual bool dispatchCall(apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext); - private: - typedef void (AssocServiceProcessor::*ProcessFunction)(int32_t, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, apache::thrift::server::TConnectionContext*); - typedef std::map ProcessMap; - ProcessMap processMap_; - void process_taoAssocPut(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_taoAssocDelete(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_taoAssocRangeGet(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_taoAssocGet(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_taoAssocCount(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - public: - AssocServiceProcessor(boost::shared_ptr iface) : - iface_(iface) { - processMap_["taoAssocPut"] = &AssocServiceProcessor::process_taoAssocPut; - processMap_["taoAssocDelete"] = &AssocServiceProcessor::process_taoAssocDelete; - processMap_["taoAssocRangeGet"] = &AssocServiceProcessor::process_taoAssocRangeGet; - processMap_["taoAssocGet"] = &AssocServiceProcessor::process_taoAssocGet; - processMap_["taoAssocCount"] = &AssocServiceProcessor::process_taoAssocCount; - } - - virtual ~AssocServiceProcessor() {} - - boost::shared_ptr > getProcessFunctions() { - boost::shared_ptr > rSet(new std::set()); - rSet->insert("AssocService.taoAssocPut"); - rSet->insert("AssocService.taoAssocDelete"); - rSet->insert("AssocService.taoAssocRangeGet"); - rSet->insert("AssocService.taoAssocGet"); - rSet->insert("AssocService.taoAssocCount"); - return rSet; - } -}; - -class AssocServiceProcessorFactory : public ::apache::thrift::TProcessorFactory { - public: - AssocServiceProcessorFactory(const ::boost::shared_ptr< AssocServiceIfFactory >& handlerFactory) : - handlerFactory_(handlerFactory) {} - - ::boost::shared_ptr< ::apache::thrift::TProcessor > getProcessor(::apache::thrift::server::TConnectionContext* ctx); - - protected: - ::boost::shared_ptr< AssocServiceIfFactory > handlerFactory_; -}; - -class AssocServiceMultiface : virtual public AssocServiceIf { - public: - AssocServiceMultiface(std::vector >& ifaces) : ifaces_(ifaces) { - } - virtual ~AssocServiceMultiface() {} - protected: - std::vector > ifaces_; - AssocServiceMultiface() {} - void add(boost::shared_ptr iface) { - ifaces_.push_back(iface); - } - public: - int64_t taoAssocPut(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, int64_t id1Type, int64_t id2Type, int64_t timestamp, AssocVisibility visibility, bool update_count, int64_t dataVersion, const Text& data, const Text& wormhole_comment) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->taoAssocPut(tableName, assocType, id1, id2, id1Type, id2Type, timestamp, visibility, update_count, dataVersion, data, wormhole_comment); - } - return ifaces_[i]->taoAssocPut(tableName, assocType, id1, id2, id1Type, id2Type, timestamp, visibility, update_count, dataVersion, data, wormhole_comment); - } - - int64_t taoAssocDelete(const Text& tableName, int64_t assocType, int64_t id1, int64_t id2, AssocVisibility visibility, bool update_count, const Text& wormhole_comment) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->taoAssocDelete(tableName, assocType, id1, id2, visibility, update_count, wormhole_comment); - } - return ifaces_[i]->taoAssocDelete(tableName, assocType, id1, id2, visibility, update_count, wormhole_comment); - } - - void taoAssocRangeGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, int64_t start_time, int64_t end_time, int64_t offset, int64_t limit) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->taoAssocRangeGet(_return, tableName, assocType, id1, start_time, end_time, offset, limit); - } - } - - void taoAssocGet(std::vector & _return, const Text& tableName, int64_t assocType, int64_t id1, const std::vector & id2s) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->taoAssocGet(_return, tableName, assocType, id1, id2s); - } - } - - int64_t taoAssocCount(const Text& tableName, int64_t assocType, int64_t id1) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->taoAssocCount(tableName, assocType, id1); - } - return ifaces_[i]->taoAssocCount(tableName, assocType, id1); - } - -}; - -} // namespace - -#endif diff --git a/thrift/gen-cpp/DB.cpp b/thrift/gen-cpp/DB.cpp deleted file mode 100644 index c82cbf240e..0000000000 --- a/thrift/gen-cpp/DB.cpp +++ /dev/null @@ -1,4162 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "DB.h" -#include "folly/ScopeGuard.h" - -namespace Tleveldb { - -uint32_t DB_Open_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->dbname); - this->__isset.dbname = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dboptions.read(iprot); - this->__isset.dboptions = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Open_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Open_args"); - xfer += oprot->writeFieldBegin("dbname", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->dbname); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dboptions", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->dboptions.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Open_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Open_pargs"); - xfer += oprot->writeFieldBegin("dbname", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary((*(this->dbname))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dboptions", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->dboptions)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Open_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->se.read(iprot); - this->__isset.se = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Open_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Open_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } else if (this->__isset.se) { - xfer += oprot->writeFieldBegin("se", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->se.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Open_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->se.read(iprot); - this->__isset.se = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Close_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->dbname); - this->__isset.dbname = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Close_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Close_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dbname", apache::thrift::protocol::T_STRING, 2); - xfer += oprot->writeBinary(this->dbname); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Close_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Close_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dbname", apache::thrift::protocol::T_STRING, 2); - xfer += oprot->writeBinary((*(this->dbname))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Close_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast6; - xfer += iprot->readI32(ecast6); - this->success = (Code)ecast6; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Close_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Close_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Close_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast7; - xfer += iprot->readI32(ecast7); - (*(this->success)) = (Code)ecast7; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Put_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->keyvalue.read(iprot); - this->__isset.keyvalue = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->options.read(iprot); - this->__isset.options = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Put_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Put_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("keyvalue", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->keyvalue.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->options.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Put_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Put_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("keyvalue", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->keyvalue)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += (*(this->options)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Put_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast8; - xfer += iprot->readI32(ecast8); - this->success = (Code)ecast8; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Put_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Put_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Put_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast9; - xfer += iprot->readI32(ecast9); - (*(this->success)) = (Code)ecast9; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Delete_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->key.read(iprot); - this->__isset.key = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->options.read(iprot); - this->__isset.options = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Delete_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Delete_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("key", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->key.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->options.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Delete_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Delete_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("key", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->key)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += (*(this->options)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Delete_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast10; - xfer += iprot->readI32(ecast10); - this->success = (Code)ecast10; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Delete_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Delete_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Delete_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast11; - xfer += iprot->readI32(ecast11); - (*(this->success)) = (Code)ecast11; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Write_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_LIST) { - { - this->batch.clear(); - uint32_t _size12; - apache::thrift::protocol::TType _etype15; - xfer += iprot->readListBegin(_etype15, _size12); - this->batch.resize(_size12); - uint32_t _i16; - for (_i16 = 0; _i16 < _size12; ++_i16) - { - xfer += this->batch[_i16].read(iprot); - } - xfer += iprot->readListEnd(); - } - this->__isset.batch = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->options.read(iprot); - this->__isset.options = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Write_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Write_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("batch", apache::thrift::protocol::T_LIST, 2); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, this->batch.size()); - std::vector ::const_iterator _iter17; - for (_iter17 = this->batch.begin(); _iter17 != this->batch.end(); ++_iter17) - { - xfer += (*_iter17).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->options.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Write_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Write_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("batch", apache::thrift::protocol::T_LIST, 2); - { - xfer += oprot->writeListBegin(apache::thrift::protocol::T_STRUCT, (*(this->batch)).size()); - std::vector ::const_iterator _iter18; - for (_iter18 = (*(this->batch)).begin(); _iter18 != (*(this->batch)).end(); ++_iter18) - { - xfer += (*_iter18).write(oprot); - } - xfer += oprot->writeListEnd(); - } - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += (*(this->options)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Write_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast19; - xfer += iprot->readI32(ecast19); - this->success = (Code)ecast19; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Write_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Write_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Write_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast20; - xfer += iprot->readI32(ecast20); - (*(this->success)) = (Code)ecast20; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Get_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->inputkey.read(iprot); - this->__isset.inputkey = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->options.read(iprot); - this->__isset.options = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Get_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Get_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("inputkey", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->inputkey.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->options.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Get_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_Get_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("inputkey", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->inputkey)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 3); - xfer += (*(this->options)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Get_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_Get_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_Get_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_Get_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_NewIterator_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->options.read(iprot); - this->__isset.options = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast21; - xfer += iprot->readI32(ecast21); - this->iteratorType = (IteratorType)ecast21; - this->__isset.iteratorType = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->target.read(iprot); - this->__isset.target = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_NewIterator_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_NewIterator_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->options.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iteratorType", apache::thrift::protocol::T_I32, 3); - xfer += oprot->writeI32((int32_t)this->iteratorType); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("target", apache::thrift::protocol::T_STRUCT, 4); - xfer += this->target.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_NewIterator_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_NewIterator_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("options", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->options)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iteratorType", apache::thrift::protocol::T_I32, 3); - xfer += oprot->writeI32((int32_t)(*(this->iteratorType))); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("target", apache::thrift::protocol::T_STRUCT, 4); - xfer += (*(this->target)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_NewIterator_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_NewIterator_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_NewIterator_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_NewIterator_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_DeleteIterator_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->iterator.read(iprot); - this->__isset.iterator = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_DeleteIterator_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_DeleteIterator_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->iterator.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_DeleteIterator_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_DeleteIterator_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->iterator)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_DeleteIterator_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast22; - xfer += iprot->readI32(ecast22); - this->success = (Code)ecast22; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_DeleteIterator_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_DeleteIterator_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_DeleteIterator_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast23; - xfer += iprot->readI32(ecast23); - (*(this->success)) = (Code)ecast23; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetNext_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->iterator.read(iprot); - this->__isset.iterator = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetNext_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetNext_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->iterator.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetNext_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetNext_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->iterator)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetNext_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetNext_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_GetNext_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetNext_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetPrev_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->iterator.read(iprot); - this->__isset.iterator = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetPrev_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetPrev_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->iterator.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetPrev_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetPrev_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->iterator)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetPrev_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetPrev_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_GetPrev_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetPrev_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetSnapshot_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetSnapshot_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetSnapshot_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetSnapshot_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_GetSnapshot_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetSnapshot_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->success.read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_GetSnapshot_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_GetSnapshot_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_STRUCT, 0); - xfer += this->success.write(oprot); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_GetSnapshot_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += (*(this->success)).read(iprot); - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_ReleaseSnapshot_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->snapshot.read(iprot); - this->__isset.snapshot = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_ReleaseSnapshot_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_ReleaseSnapshot_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("snapshot", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->snapshot.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_ReleaseSnapshot_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_ReleaseSnapshot_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("snapshot", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->snapshot)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_ReleaseSnapshot_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast24; - xfer += iprot->readI32(ecast24); - this->success = (Code)ecast24; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_ReleaseSnapshot_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_ReleaseSnapshot_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_ReleaseSnapshot_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast25; - xfer += iprot->readI32(ecast25); - (*(this->success)) = (Code)ecast25; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_CompactRange_args::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->dbhandle.read(iprot); - this->__isset.dbhandle = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->start.read(iprot); - this->__isset.start = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->endhere.read(iprot); - this->__isset.endhere = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_CompactRange_args::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_CompactRange_args"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->dbhandle.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("start", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->start.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("endhere", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->endhere.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_CompactRange_pargs::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DB_CompactRange_pargs"); - xfer += oprot->writeFieldBegin("dbhandle", apache::thrift::protocol::T_STRUCT, 1); - xfer += (*(this->dbhandle)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("start", apache::thrift::protocol::T_STRUCT, 2); - xfer += (*(this->start)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("endhere", apache::thrift::protocol::T_STRUCT, 3); - xfer += (*(this->endhere)).write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_CompactRange_result::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast26; - xfer += iprot->readI32(ecast26); - this->success = (Code)ecast26; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DB_CompactRange_result::write(apache::thrift::protocol::TProtocol* oprot) const { - - uint32_t xfer = 0; - - xfer += oprot->writeStructBegin("DB_CompactRange_result"); - - if (this->__isset.success) { - xfer += oprot->writeFieldBegin("success", apache::thrift::protocol::T_I32, 0); - xfer += oprot->writeI32((int32_t)this->success); - xfer += oprot->writeFieldEnd(); - } - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -uint32_t DB_CompactRange_presult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 0: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast27; - xfer += iprot->readI32(ecast27); - (*(this->success)) = (Code)ecast27; - this->__isset.success = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -int32_t DBClient::getNextSendSequenceId() -{ - return nextSendSequenceId_++; -} - -int32_t DBClient::getNextRecvSequenceId() -{ - return nextRecvSequenceId_++; -} - -void DBClient::Open(DBHandle& _return, const Text& dbname, const DBOptions& dboptions) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Open", NULL); - - try { - send_Open(dbname, dboptions); - recv_Open(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Open"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Open"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Open(const Text& dbname, const DBOptions& dboptions) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Open"); - oprot_->writeMessageBegin("Open", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Open_pargs args; - args.dbname = &dbname; - args.dboptions = &dboptions; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes28 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Open", _bytes28); - return; -} - -void DBClient::recv_Open(DBHandle& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Open"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Open") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_Open_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Open", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - if (result.__isset.se) { - throw result.se; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Open failed: unknown result"); -} - -Code DBClient::Close(const DBHandle& dbhandle, const Text& dbname) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Close", NULL); - - try { - send_Close(dbhandle, dbname); - return recv_Close(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Close"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Close"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Close(const DBHandle& dbhandle, const Text& dbname) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Close"); - oprot_->writeMessageBegin("Close", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Close_pargs args; - args.dbhandle = &dbhandle; - args.dbname = &dbname; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes29 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Close", _bytes29); - return; -} - -Code DBClient::recv_Close() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Close"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Close") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_Close_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Close", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Close failed: unknown result"); -} - -Code DBClient::Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Put", NULL); - - try { - send_Put(dbhandle, keyvalue, options); - return recv_Put(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Put"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Put"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Put"); - oprot_->writeMessageBegin("Put", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Put_pargs args; - args.dbhandle = &dbhandle; - args.keyvalue = &keyvalue; - args.options = &options; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes30 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Put", _bytes30); - return; -} - -Code DBClient::recv_Put() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Put"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Put") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_Put_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Put", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Put failed: unknown result"); -} - -Code DBClient::Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Delete", NULL); - - try { - send_Delete(dbhandle, key, options); - return recv_Delete(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Delete"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Delete"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Delete"); - oprot_->writeMessageBegin("Delete", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Delete_pargs args; - args.dbhandle = &dbhandle; - args.key = &key; - args.options = &options; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes31 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Delete", _bytes31); - return; -} - -Code DBClient::recv_Delete() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Delete"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Delete") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_Delete_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Delete", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Delete failed: unknown result"); -} - -Code DBClient::Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Write", NULL); - - try { - send_Write(dbhandle, batch, options); - return recv_Write(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Write"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Write"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Write"); - oprot_->writeMessageBegin("Write", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Write_pargs args; - args.dbhandle = &dbhandle; - args.batch = &batch; - args.options = &options; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes32 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Write", _bytes32); - return; -} - -Code DBClient::recv_Write() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Write"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Write") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_Write_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Write", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Write failed: unknown result"); -} - -void DBClient::Get(ResultItem& _return, const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.Get", NULL); - - try { - send_Get(dbhandle, inputkey, options); - recv_Get(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.Get"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.Get"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_Get(const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.Get"); - oprot_->writeMessageBegin("Get", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_Get_pargs args; - args.dbhandle = &dbhandle; - args.inputkey = &inputkey; - args.options = &options; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes33 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.Get", _bytes33); - return; -} - -void DBClient::recv_Get(ResultItem& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.Get"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("Get") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_Get_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.Get", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "Get failed: unknown result"); -} - -void DBClient::NewIterator(ResultIterator& _return, const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.NewIterator", NULL); - - try { - send_NewIterator(dbhandle, options, iteratorType, target); - recv_NewIterator(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.NewIterator"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.NewIterator"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_NewIterator(const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.NewIterator"); - oprot_->writeMessageBegin("NewIterator", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_NewIterator_pargs args; - args.dbhandle = &dbhandle; - args.options = &options; - args.iteratorType = &iteratorType; - args.target = ⌖ - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes34 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.NewIterator", _bytes34); - return; -} - -void DBClient::recv_NewIterator(ResultIterator& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.NewIterator"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("NewIterator") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_NewIterator_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.NewIterator", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "NewIterator failed: unknown result"); -} - -Code DBClient::DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.DeleteIterator", NULL); - - try { - send_DeleteIterator(dbhandle, iterator); - return recv_DeleteIterator(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.DeleteIterator"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.DeleteIterator"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.DeleteIterator"); - oprot_->writeMessageBegin("DeleteIterator", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_DeleteIterator_pargs args; - args.dbhandle = &dbhandle; - args.iterator = &iterator; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes35 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.DeleteIterator", _bytes35); - return; -} - -Code DBClient::recv_DeleteIterator() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.DeleteIterator"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("DeleteIterator") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_DeleteIterator_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.DeleteIterator", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "DeleteIterator failed: unknown result"); -} - -void DBClient::GetNext(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.GetNext", NULL); - - try { - send_GetNext(dbhandle, iterator); - recv_GetNext(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.GetNext"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.GetNext"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_GetNext(const DBHandle& dbhandle, const Iterator& iterator) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.GetNext"); - oprot_->writeMessageBegin("GetNext", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_GetNext_pargs args; - args.dbhandle = &dbhandle; - args.iterator = &iterator; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes36 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.GetNext", _bytes36); - return; -} - -void DBClient::recv_GetNext(ResultPair& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.GetNext"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("GetNext") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_GetNext_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.GetNext", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "GetNext failed: unknown result"); -} - -void DBClient::GetPrev(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.GetPrev", NULL); - - try { - send_GetPrev(dbhandle, iterator); - recv_GetPrev(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.GetPrev"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.GetPrev"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_GetPrev(const DBHandle& dbhandle, const Iterator& iterator) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.GetPrev"); - oprot_->writeMessageBegin("GetPrev", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_GetPrev_pargs args; - args.dbhandle = &dbhandle; - args.iterator = &iterator; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes37 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.GetPrev", _bytes37); - return; -} - -void DBClient::recv_GetPrev(ResultPair& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.GetPrev"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("GetPrev") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_GetPrev_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.GetPrev", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "GetPrev failed: unknown result"); -} - -void DBClient::GetSnapshot(ResultSnapshot& _return, const DBHandle& dbhandle) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.GetSnapshot", NULL); - - try { - send_GetSnapshot(dbhandle); - recv_GetSnapshot(_return); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.GetSnapshot"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.GetSnapshot"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_GetSnapshot(const DBHandle& dbhandle) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.GetSnapshot"); - oprot_->writeMessageBegin("GetSnapshot", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_GetSnapshot_pargs args; - args.dbhandle = &dbhandle; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes38 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.GetSnapshot", _bytes38); - return; -} - -void DBClient::recv_GetSnapshot(ResultSnapshot& _return) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.GetSnapshot"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("GetSnapshot") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - DB_GetSnapshot_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.GetSnapshot", bytes); - - if (result.__isset.success) { - // _return pointer has now been filled - return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "GetSnapshot failed: unknown result"); -} - -Code DBClient::ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.ReleaseSnapshot", NULL); - - try { - send_ReleaseSnapshot(dbhandle, snapshot); - return recv_ReleaseSnapshot(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.ReleaseSnapshot"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.ReleaseSnapshot"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.ReleaseSnapshot"); - oprot_->writeMessageBegin("ReleaseSnapshot", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_ReleaseSnapshot_pargs args; - args.dbhandle = &dbhandle; - args.snapshot = &snapshot; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes39 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.ReleaseSnapshot", _bytes39); - return; -} - -Code DBClient::recv_ReleaseSnapshot() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.ReleaseSnapshot"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("ReleaseSnapshot") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_ReleaseSnapshot_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.ReleaseSnapshot", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "ReleaseSnapshot failed: unknown result"); -} - -Code DBClient::CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere) -{ - folly::ScopeGuard g = folly::makeGuard([&] { this->clearClientContextStack(); }); - this->generateClientContextStack("DB.CompactRange", NULL); - - try { - send_CompactRange(dbhandle, start, endhere); - return recv_CompactRange(); - } catch(apache::thrift::transport::TTransportException& ex) { - this->handlerError(this->getClientContextStack(), "DB.CompactRange"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - throw; - } catch(apache::thrift::TApplicationException& ex) { - if (ex.getType() == apache::thrift::TApplicationException::BAD_SEQUENCE_ID) { - this->handlerError(this->getClientContextStack(), "DB.CompactRange"); - iprot_->getTransport()->close(); - oprot_->getTransport()->close(); - } - throw; - } -} - -void DBClient::send_CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere) -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - this->preWrite(ctx, "DB.CompactRange"); - oprot_->writeMessageBegin("CompactRange", apache::thrift::protocol::T_CALL, getNextSendSequenceId()); - - DB_CompactRange_pargs args; - args.dbhandle = &dbhandle; - args.start = &start; - args.endhere = &endhere; - args.write(oprot_); - - oprot_->writeMessageEnd(); - uint32_t _bytes40 = oprot_->getTransport()->writeEnd(); - oprot_->getTransport()->flush(); - this->postWrite(ctx, "DB.CompactRange", _bytes40); - return; -} - -Code DBClient::recv_CompactRange() -{ - apache::thrift::ContextStack* ctx = this->getClientContextStack(); - uint32_t bytes; - int32_t rseqid = 0; - int32_t eseqid = getNextRecvSequenceId(); - std::string fname; - apache::thrift::protocol::TMessageType mtype; - this->preRead(ctx, "DB.CompactRange"); - - iprot_->readMessageBegin(fname, mtype, rseqid); - if (this->checkSeqid_ && rseqid != eseqid) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::BAD_SEQUENCE_ID); - } - if (mtype == apache::thrift::protocol::T_EXCEPTION) { - apache::thrift::TApplicationException x; - x.read(iprot_); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw x; - } - if (mtype != apache::thrift::protocol::T_REPLY) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::INVALID_MESSAGE_TYPE); - } - if (fname.compare("CompactRange") != 0) { - iprot_->skip(apache::thrift::protocol::T_STRUCT); - iprot_->readMessageEnd(); - iprot_->getTransport()->readEnd(); - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::WRONG_METHOD_NAME); - } - Code _return; - DB_CompactRange_presult result; - result.success = &_return; - result.read(iprot_); - iprot_->readMessageEnd(); - bytes = iprot_->getTransport()->readEnd(); - this->postRead(ctx, "DB.CompactRange", bytes); - - if (result.__isset.success) { - return _return; - } - throw apache::thrift::TApplicationException(apache::thrift::TApplicationException::MISSING_RESULT, "CompactRange failed: unknown result"); -} - -bool DBProcessor::dispatchCall(::apache::thrift::protocol::TProtocol* iprot, ::apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext) { - ProcessMap::iterator pfn; - pfn = processMap_.find(fname); - if (pfn == processMap_.end()) { - iprot->skip(apache::thrift::protocol::T_STRUCT); - iprot->readMessageEnd(); - iprot->getTransport()->readEnd(); - apache::thrift::TApplicationException x(apache::thrift::TApplicationException::UNKNOWN_METHOD, "Invalid method name: '"+fname+"'"); - oprot->writeMessageBegin(fname, apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return true; - } - const ProcessFunction& pf = pfn->second; - (this->*pf)(seqid, iprot, oprot, connectionContext); - return true; -} - -void DBProcessor::process_Open(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Open", connectionContext)); - - this->preRead(ctx.get(), "DB.Open"); - DB_Open_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Open", bytes); - - DB_Open_result result; - try { - iface_->Open(result.success, args.dbname, args.dboptions); - result.__isset.success = true; - } catch (LeveldbException &se) { - result.se = se; - result.__isset.se = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Open"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Open", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Open"); - oprot->writeMessageBegin("Open", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Open", bytes); - -} - -void DBProcessor::process_Close(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Close", connectionContext)); - - this->preRead(ctx.get(), "DB.Close"); - DB_Close_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Close", bytes); - - DB_Close_result result; - try { - result.success = iface_->Close(args.dbhandle, args.dbname); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Close"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Close", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Close"); - oprot->writeMessageBegin("Close", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Close", bytes); - -} - -void DBProcessor::process_Put(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Put", connectionContext)); - - this->preRead(ctx.get(), "DB.Put"); - DB_Put_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Put", bytes); - - DB_Put_result result; - try { - result.success = iface_->Put(args.dbhandle, args.keyvalue, args.options); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Put"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Put", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Put"); - oprot->writeMessageBegin("Put", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Put", bytes); - -} - -void DBProcessor::process_Delete(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Delete", connectionContext)); - - this->preRead(ctx.get(), "DB.Delete"); - DB_Delete_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Delete", bytes); - - DB_Delete_result result; - try { - result.success = iface_->Delete(args.dbhandle, args.key, args.options); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Delete"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Delete", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Delete"); - oprot->writeMessageBegin("Delete", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Delete", bytes); - -} - -void DBProcessor::process_Write(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Write", connectionContext)); - - this->preRead(ctx.get(), "DB.Write"); - DB_Write_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Write", bytes); - - DB_Write_result result; - try { - result.success = iface_->Write(args.dbhandle, args.batch, args.options); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Write"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Write", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Write"); - oprot->writeMessageBegin("Write", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Write", bytes); - -} - -void DBProcessor::process_Get(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.Get", connectionContext)); - - this->preRead(ctx.get(), "DB.Get"); - DB_Get_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.Get", bytes); - - DB_Get_result result; - try { - iface_->Get(result.success, args.dbhandle, args.inputkey, args.options); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.Get"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("Get", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.Get"); - oprot->writeMessageBegin("Get", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.Get", bytes); - -} - -void DBProcessor::process_NewIterator(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.NewIterator", connectionContext)); - - this->preRead(ctx.get(), "DB.NewIterator"); - DB_NewIterator_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.NewIterator", bytes); - - DB_NewIterator_result result; - try { - iface_->NewIterator(result.success, args.dbhandle, args.options, args.iteratorType, args.target); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.NewIterator"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("NewIterator", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.NewIterator"); - oprot->writeMessageBegin("NewIterator", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.NewIterator", bytes); - -} - -void DBProcessor::process_DeleteIterator(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.DeleteIterator", connectionContext)); - - this->preRead(ctx.get(), "DB.DeleteIterator"); - DB_DeleteIterator_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.DeleteIterator", bytes); - - DB_DeleteIterator_result result; - try { - result.success = iface_->DeleteIterator(args.dbhandle, args.iterator); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.DeleteIterator"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("DeleteIterator", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.DeleteIterator"); - oprot->writeMessageBegin("DeleteIterator", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.DeleteIterator", bytes); - -} - -void DBProcessor::process_GetNext(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.GetNext", connectionContext)); - - this->preRead(ctx.get(), "DB.GetNext"); - DB_GetNext_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.GetNext", bytes); - - DB_GetNext_result result; - try { - iface_->GetNext(result.success, args.dbhandle, args.iterator); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.GetNext"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("GetNext", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.GetNext"); - oprot->writeMessageBegin("GetNext", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.GetNext", bytes); - -} - -void DBProcessor::process_GetPrev(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.GetPrev", connectionContext)); - - this->preRead(ctx.get(), "DB.GetPrev"); - DB_GetPrev_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.GetPrev", bytes); - - DB_GetPrev_result result; - try { - iface_->GetPrev(result.success, args.dbhandle, args.iterator); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.GetPrev"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("GetPrev", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.GetPrev"); - oprot->writeMessageBegin("GetPrev", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.GetPrev", bytes); - -} - -void DBProcessor::process_GetSnapshot(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.GetSnapshot", connectionContext)); - - this->preRead(ctx.get(), "DB.GetSnapshot"); - DB_GetSnapshot_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.GetSnapshot", bytes); - - DB_GetSnapshot_result result; - try { - iface_->GetSnapshot(result.success, args.dbhandle); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.GetSnapshot"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("GetSnapshot", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.GetSnapshot"); - oprot->writeMessageBegin("GetSnapshot", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.GetSnapshot", bytes); - -} - -void DBProcessor::process_ReleaseSnapshot(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.ReleaseSnapshot", connectionContext)); - - this->preRead(ctx.get(), "DB.ReleaseSnapshot"); - DB_ReleaseSnapshot_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.ReleaseSnapshot", bytes); - - DB_ReleaseSnapshot_result result; - try { - result.success = iface_->ReleaseSnapshot(args.dbhandle, args.snapshot); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.ReleaseSnapshot"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("ReleaseSnapshot", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.ReleaseSnapshot"); - oprot->writeMessageBegin("ReleaseSnapshot", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.ReleaseSnapshot", bytes); - -} - -void DBProcessor::process_CompactRange(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext) -{ - std::unique_ptr ctx(this->getContextStack("DB.CompactRange", connectionContext)); - - this->preRead(ctx.get(), "DB.CompactRange"); - DB_CompactRange_args args; - args.read(iprot); - iprot->readMessageEnd(); - uint32_t bytes = iprot->getTransport()->readEnd(); - - this->postRead(ctx.get(), "DB.CompactRange", bytes); - - DB_CompactRange_result result; - try { - result.success = iface_->CompactRange(args.dbhandle, args.start, args.endhere); - result.__isset.success = true; - } catch (const std::exception& e) { - this->handlerError(ctx.get(), "DB.CompactRange"); - - - apache::thrift::TApplicationException x(e.what()); - oprot->writeMessageBegin("CompactRange", apache::thrift::protocol::T_EXCEPTION, seqid); - x.write(oprot); - oprot->writeMessageEnd(); - oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - return; - } - - this->preWrite(ctx.get(), "DB.CompactRange"); - oprot->writeMessageBegin("CompactRange", apache::thrift::protocol::T_REPLY, seqid); - result.write(oprot); - oprot->writeMessageEnd(); - bytes = oprot->getTransport()->writeEnd(); - oprot->getTransport()->flush(); - - this->postWrite(ctx.get(), "DB.CompactRange", bytes); - -} - -::boost::shared_ptr< ::apache::thrift::TProcessor > DBProcessorFactory::getProcessor(::apache::thrift::server::TConnectionContext* ctx) { - ::apache::thrift::ReleaseHandler< DBIfFactory > cleanup(handlerFactory_); - ::boost::shared_ptr< DBIf > handler(handlerFactory_->getHandler(ctx), cleanup); - ::boost::shared_ptr< ::apache::thrift::TProcessor > processor(new DBProcessor(handler)); - return processor; -} -} // namespace - diff --git a/thrift/gen-cpp/DB.h b/thrift/gen-cpp/DB.h deleted file mode 100644 index 37cf3d1e14..0000000000 --- a/thrift/gen-cpp/DB.h +++ /dev/null @@ -1,2225 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef _Tleveldb_DB_H -#define _Tleveldb_DB_H - -#include -#include "leveldb_types.h" - -namespace Tleveldb { - -class DBIf { - public: - virtual ~DBIf() {} - virtual void Open(DBHandle& _return, const Text& dbname, const DBOptions& dboptions) = 0; - virtual Code Close(const DBHandle& dbhandle, const Text& dbname) = 0; - virtual Code Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options) = 0; - virtual Code Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options) = 0; - virtual Code Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options) = 0; - virtual void Get(ResultItem& _return, const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options) = 0; - virtual void NewIterator(ResultIterator& _return, const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target) = 0; - virtual Code DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator) = 0; - virtual void GetNext(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) = 0; - virtual void GetPrev(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) = 0; - virtual void GetSnapshot(ResultSnapshot& _return, const DBHandle& dbhandle) = 0; - virtual Code ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot) = 0; - virtual Code CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere) = 0; -}; - -class DBIfFactory { - public: - typedef DBIf Handler; - - virtual ~DBIfFactory() {} - - virtual DBIf* getHandler(::apache::thrift::server::TConnectionContext* ctx) = 0; - virtual void releaseHandler(DBIf* handler) = 0; -}; - -class DBIfSingletonFactory : virtual public DBIfFactory { - public: - DBIfSingletonFactory(const boost::shared_ptr& iface) : iface_(iface) {} - virtual ~DBIfSingletonFactory() {} - - virtual DBIf* getHandler(::apache::thrift::server::TConnectionContext*) { - return iface_.get(); - } - virtual void releaseHandler(DBIf* handler) {} - - protected: - boost::shared_ptr iface_; -}; - -class DBNull : virtual public DBIf { - public: - virtual ~DBNull() {} - void Open(DBHandle& /* _return */, const Text& /* dbname */, const DBOptions& /* dboptions */) { - return; - } - Code Close(const DBHandle& /* dbhandle */, const Text& /* dbname */) { - Code _return = (Code)0; - return _return; - } - Code Put(const DBHandle& /* dbhandle */, const kv& /* keyvalue */, const WriteOptions& /* options */) { - Code _return = (Code)0; - return _return; - } - Code Delete(const DBHandle& /* dbhandle */, const Slice& /* key */, const WriteOptions& /* options */) { - Code _return = (Code)0; - return _return; - } - Code Write(const DBHandle& /* dbhandle */, const std::vector & /* batch */, const WriteOptions& /* options */) { - Code _return = (Code)0; - return _return; - } - void Get(ResultItem& /* _return */, const DBHandle& /* dbhandle */, const Slice& /* inputkey */, const ReadOptions& /* options */) { - return; - } - void NewIterator(ResultIterator& /* _return */, const DBHandle& /* dbhandle */, const ReadOptions& /* options */, IteratorType /* iteratorType */, const Slice& /* target */) { - return; - } - Code DeleteIterator(const DBHandle& /* dbhandle */, const Iterator& /* iterator */) { - Code _return = (Code)0; - return _return; - } - void GetNext(ResultPair& /* _return */, const DBHandle& /* dbhandle */, const Iterator& /* iterator */) { - return; - } - void GetPrev(ResultPair& /* _return */, const DBHandle& /* dbhandle */, const Iterator& /* iterator */) { - return; - } - void GetSnapshot(ResultSnapshot& /* _return */, const DBHandle& /* dbhandle */) { - return; - } - Code ReleaseSnapshot(const DBHandle& /* dbhandle */, const Snapshot& /* snapshot */) { - Code _return = (Code)0; - return _return; - } - Code CompactRange(const DBHandle& /* dbhandle */, const Slice& /* start */, const Slice& /* endhere */) { - Code _return = (Code)0; - return _return; - } -}; - -class DB_Open_args { - public: - - static const uint64_t _reflection_id = 5143148560683113100U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Open_args() : dbname("") { - } - - DB_Open_args(const DB_Open_args&) = default; - DB_Open_args& operator=(const DB_Open_args&) = default; - DB_Open_args(DB_Open_args&&) = default; - DB_Open_args& operator=(DB_Open_args&&) = default; - - void __clear() { - dbname = ""; - dboptions.__clear(); - __isset.__clear(); - } - - virtual ~DB_Open_args() throw() {} - - Text dbname; - DBOptions dboptions; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbname = false; - dboptions = false; - } - bool dbname; - bool dboptions; - } __isset; - - bool operator == (const DB_Open_args & rhs) const - { - if (!(this->dbname == rhs.dbname)) - return false; - if (!(this->dboptions == rhs.dboptions)) - return false; - return true; - } - bool operator != (const DB_Open_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Open_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Open_pargs { - public: - - static const uint64_t _reflection_id = 5558263615018901836U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Open_pargs() throw() {} - - const Text* dbname; - const DBOptions* dboptions; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Open_result { - public: - - static const uint64_t _reflection_id = 585101419942616428U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Open_result() { - } - - DB_Open_result(const DB_Open_result&) = default; - DB_Open_result& operator=(const DB_Open_result&) = default; - DB_Open_result(DB_Open_result&&) = default; - DB_Open_result& operator=(DB_Open_result&&) = default; - - void __clear() { - success.__clear(); - se.__clear(); - __isset.__clear(); - } - - virtual ~DB_Open_result() throw() {} - - DBHandle success; - LeveldbException se; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - se = false; - } - bool success; - bool se; - } __isset; - - bool operator == (const DB_Open_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - if (!(this->se == rhs.se)) - return false; - return true; - } - bool operator != (const DB_Open_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Open_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Open_presult { - public: - - static const uint64_t _reflection_id = 1768872265754142060U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Open_presult() throw() {} - - DBHandle* success; - LeveldbException se; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - se = false; - } - bool success; - bool se; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_Close_args { - public: - - static const uint64_t _reflection_id = 3653575979806469484U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Close_args() : dbname("") { - } - - DB_Close_args(const DB_Close_args&) = default; - DB_Close_args& operator=(const DB_Close_args&) = default; - DB_Close_args(DB_Close_args&&) = default; - DB_Close_args& operator=(DB_Close_args&&) = default; - - void __clear() { - dbhandle.__clear(); - dbname = ""; - __isset.__clear(); - } - - virtual ~DB_Close_args() throw() {} - - DBHandle dbhandle; - Text dbname; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - dbname = false; - } - bool dbhandle; - bool dbname; - } __isset; - - bool operator == (const DB_Close_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->dbname == rhs.dbname)) - return false; - return true; - } - bool operator != (const DB_Close_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Close_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Close_pargs { - public: - - static const uint64_t _reflection_id = 2939164562981598508U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Close_pargs() throw() {} - - const DBHandle* dbhandle; - const Text* dbname; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Close_result { - public: - - static const uint64_t _reflection_id = 11420986846439017932U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Close_result() : success(static_cast(0)) { - } - - DB_Close_result(const DB_Close_result&) = default; - DB_Close_result& operator=(const DB_Close_result&) = default; - DB_Close_result(DB_Close_result&&) = default; - DB_Close_result& operator=(DB_Close_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_Close_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_Close_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_Close_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Close_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Close_presult { - public: - - static const uint64_t _reflection_id = 6223865401759091820U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Close_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_Put_args { - public: - - static const uint64_t _reflection_id = 15095251014297097356U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Put_args() { - } - - DB_Put_args(const DB_Put_args&) = default; - DB_Put_args& operator=(const DB_Put_args&) = default; - DB_Put_args(DB_Put_args&&) = default; - DB_Put_args& operator=(DB_Put_args&&) = default; - - void __clear() { - dbhandle.__clear(); - keyvalue.__clear(); - options.__clear(); - __isset.__clear(); - } - - virtual ~DB_Put_args() throw() {} - - DBHandle dbhandle; - kv keyvalue; - WriteOptions options; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - keyvalue = false; - options = false; - } - bool dbhandle; - bool keyvalue; - bool options; - } __isset; - - bool operator == (const DB_Put_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->keyvalue == rhs.keyvalue)) - return false; - if (!(this->options == rhs.options)) - return false; - return true; - } - bool operator != (const DB_Put_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Put_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Put_pargs { - public: - - static const uint64_t _reflection_id = 5565059585805949260U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Put_pargs() throw() {} - - const DBHandle* dbhandle; - const kv* keyvalue; - const WriteOptions* options; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Put_result { - public: - - static const uint64_t _reflection_id = 16570405853514888204U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Put_result() : success(static_cast(0)) { - } - - DB_Put_result(const DB_Put_result&) = default; - DB_Put_result& operator=(const DB_Put_result&) = default; - DB_Put_result(DB_Put_result&&) = default; - DB_Put_result& operator=(DB_Put_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_Put_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_Put_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_Put_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Put_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Put_presult { - public: - - static const uint64_t _reflection_id = 10104675682455674284U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Put_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_Delete_args { - public: - - static const uint64_t _reflection_id = 14071755674720794316U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Delete_args() { - } - - DB_Delete_args(const DB_Delete_args&) = default; - DB_Delete_args& operator=(const DB_Delete_args&) = default; - DB_Delete_args(DB_Delete_args&&) = default; - DB_Delete_args& operator=(DB_Delete_args&&) = default; - - void __clear() { - dbhandle.__clear(); - key.__clear(); - options.__clear(); - __isset.__clear(); - } - - virtual ~DB_Delete_args() throw() {} - - DBHandle dbhandle; - Slice key; - WriteOptions options; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - key = false; - options = false; - } - bool dbhandle; - bool key; - bool options; - } __isset; - - bool operator == (const DB_Delete_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->key == rhs.key)) - return false; - if (!(this->options == rhs.options)) - return false; - return true; - } - bool operator != (const DB_Delete_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Delete_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Delete_pargs { - public: - - static const uint64_t _reflection_id = 10963630852202029196U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Delete_pargs() throw() {} - - const DBHandle* dbhandle; - const Slice* key; - const WriteOptions* options; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Delete_result { - public: - - static const uint64_t _reflection_id = 13146432606937654604U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Delete_result() : success(static_cast(0)) { - } - - DB_Delete_result(const DB_Delete_result&) = default; - DB_Delete_result& operator=(const DB_Delete_result&) = default; - DB_Delete_result(DB_Delete_result&&) = default; - DB_Delete_result& operator=(DB_Delete_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_Delete_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_Delete_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_Delete_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Delete_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Delete_presult { - public: - - static const uint64_t _reflection_id = 17322073978832327340U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Delete_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_Write_args { - public: - - static const uint64_t _reflection_id = 12580138032621479660U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Write_args() { - } - - DB_Write_args(const DB_Write_args&) = default; - DB_Write_args& operator=(const DB_Write_args&) = default; - DB_Write_args(DB_Write_args&&) = default; - DB_Write_args& operator=(DB_Write_args&&) = default; - - void __clear() { - dbhandle.__clear(); - batch.clear(); - options.__clear(); - __isset.__clear(); - } - - virtual ~DB_Write_args() throw() {} - - DBHandle dbhandle; - std::vector batch; - WriteOptions options; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - batch = false; - options = false; - } - bool dbhandle; - bool batch; - bool options; - } __isset; - - bool operator == (const DB_Write_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->batch == rhs.batch)) - return false; - if (!(this->options == rhs.options)) - return false; - return true; - } - bool operator != (const DB_Write_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Write_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Write_pargs { - public: - - static const uint64_t _reflection_id = 3898152651480297548U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Write_pargs() throw() {} - - const DBHandle* dbhandle; - const std::vector * batch; - const WriteOptions* options; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Write_result { - public: - - static const uint64_t _reflection_id = 18306458689824631724U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Write_result() : success(static_cast(0)) { - } - - DB_Write_result(const DB_Write_result&) = default; - DB_Write_result& operator=(const DB_Write_result&) = default; - DB_Write_result(DB_Write_result&&) = default; - DB_Write_result& operator=(DB_Write_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_Write_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_Write_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_Write_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Write_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Write_presult { - public: - - static const uint64_t _reflection_id = 11189139329514764236U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Write_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_Get_args { - public: - - static const uint64_t _reflection_id = 5802112698229680972U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Get_args() { - } - - DB_Get_args(const DB_Get_args&) = default; - DB_Get_args& operator=(const DB_Get_args&) = default; - DB_Get_args(DB_Get_args&&) = default; - DB_Get_args& operator=(DB_Get_args&&) = default; - - void __clear() { - dbhandle.__clear(); - inputkey.__clear(); - options.__clear(); - __isset.__clear(); - } - - virtual ~DB_Get_args() throw() {} - - DBHandle dbhandle; - Slice inputkey; - ReadOptions options; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - inputkey = false; - options = false; - } - bool dbhandle; - bool inputkey; - bool options; - } __isset; - - bool operator == (const DB_Get_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->inputkey == rhs.inputkey)) - return false; - if (!(this->options == rhs.options)) - return false; - return true; - } - bool operator != (const DB_Get_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Get_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Get_pargs { - public: - - static const uint64_t _reflection_id = 775586916617672204U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Get_pargs() throw() {} - - const DBHandle* dbhandle; - const Slice* inputkey; - const ReadOptions* options; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Get_result { - public: - - static const uint64_t _reflection_id = 471316346092127948U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_Get_result() { - } - - DB_Get_result(const DB_Get_result&) = default; - DB_Get_result& operator=(const DB_Get_result&) = default; - DB_Get_result(DB_Get_result&&) = default; - DB_Get_result& operator=(DB_Get_result&&) = default; - - void __clear() { - success.__clear(); - __isset.__clear(); - } - - virtual ~DB_Get_result() throw() {} - - ResultItem success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_Get_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_Get_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_Get_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_Get_presult { - public: - - static const uint64_t _reflection_id = 15884536389555503916U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_Get_presult() throw() {} - - ResultItem* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_NewIterator_args { - public: - - static const uint64_t _reflection_id = 6645485240268124940U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_NewIterator_args() : iteratorType(static_cast(0)) { - } - - DB_NewIterator_args(const DB_NewIterator_args&) = default; - DB_NewIterator_args& operator=(const DB_NewIterator_args&) = default; - DB_NewIterator_args(DB_NewIterator_args&&) = default; - DB_NewIterator_args& operator=(DB_NewIterator_args&&) = default; - - void __clear() { - dbhandle.__clear(); - options.__clear(); - iteratorType = static_cast(0); - target.__clear(); - __isset.__clear(); - } - - virtual ~DB_NewIterator_args() throw() {} - - DBHandle dbhandle; - ReadOptions options; - IteratorType iteratorType; - Slice target; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - options = false; - iteratorType = false; - target = false; - } - bool dbhandle; - bool options; - bool iteratorType; - bool target; - } __isset; - - bool operator == (const DB_NewIterator_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->options == rhs.options)) - return false; - if (!(this->iteratorType == rhs.iteratorType)) - return false; - if (!(this->target == rhs.target)) - return false; - return true; - } - bool operator != (const DB_NewIterator_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_NewIterator_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_NewIterator_pargs { - public: - - static const uint64_t _reflection_id = 5353644888786218764U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_NewIterator_pargs() throw() {} - - const DBHandle* dbhandle; - const ReadOptions* options; - const IteratorType* iteratorType; - const Slice* target; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_NewIterator_result { - public: - - static const uint64_t _reflection_id = 16747725486624219692U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_NewIterator_result() { - } - - DB_NewIterator_result(const DB_NewIterator_result&) = default; - DB_NewIterator_result& operator=(const DB_NewIterator_result&) = default; - DB_NewIterator_result(DB_NewIterator_result&&) = default; - DB_NewIterator_result& operator=(DB_NewIterator_result&&) = default; - - void __clear() { - success.__clear(); - __isset.__clear(); - } - - virtual ~DB_NewIterator_result() throw() {} - - ResultIterator success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_NewIterator_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_NewIterator_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_NewIterator_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_NewIterator_presult { - public: - - static const uint64_t _reflection_id = 30225981924653164U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_NewIterator_presult() throw() {} - - ResultIterator* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_DeleteIterator_args { - public: - - static const uint64_t _reflection_id = 15751789239200963564U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_DeleteIterator_args() { - } - - DB_DeleteIterator_args(const DB_DeleteIterator_args&) = default; - DB_DeleteIterator_args& operator=(const DB_DeleteIterator_args&) = default; - DB_DeleteIterator_args(DB_DeleteIterator_args&&) = default; - DB_DeleteIterator_args& operator=(DB_DeleteIterator_args&&) = default; - - void __clear() { - dbhandle.__clear(); - iterator.__clear(); - __isset.__clear(); - } - - virtual ~DB_DeleteIterator_args() throw() {} - - DBHandle dbhandle; - Iterator iterator; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - iterator = false; - } - bool dbhandle; - bool iterator; - } __isset; - - bool operator == (const DB_DeleteIterator_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->iterator == rhs.iterator)) - return false; - return true; - } - bool operator != (const DB_DeleteIterator_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_DeleteIterator_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_DeleteIterator_pargs { - public: - - static const uint64_t _reflection_id = 6515929643750099916U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_DeleteIterator_pargs() throw() {} - - const DBHandle* dbhandle; - const Iterator* iterator; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_DeleteIterator_result { - public: - - static const uint64_t _reflection_id = 567840673627283948U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_DeleteIterator_result() : success(static_cast(0)) { - } - - DB_DeleteIterator_result(const DB_DeleteIterator_result&) = default; - DB_DeleteIterator_result& operator=(const DB_DeleteIterator_result&) = default; - DB_DeleteIterator_result(DB_DeleteIterator_result&&) = default; - DB_DeleteIterator_result& operator=(DB_DeleteIterator_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_DeleteIterator_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_DeleteIterator_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_DeleteIterator_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_DeleteIterator_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_DeleteIterator_presult { - public: - - static const uint64_t _reflection_id = 16445220168564239308U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_DeleteIterator_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_GetNext_args { - public: - - static const uint64_t _reflection_id = 6184101100378654860U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetNext_args() { - } - - DB_GetNext_args(const DB_GetNext_args&) = default; - DB_GetNext_args& operator=(const DB_GetNext_args&) = default; - DB_GetNext_args(DB_GetNext_args&&) = default; - DB_GetNext_args& operator=(DB_GetNext_args&&) = default; - - void __clear() { - dbhandle.__clear(); - iterator.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetNext_args() throw() {} - - DBHandle dbhandle; - Iterator iterator; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - iterator = false; - } - bool dbhandle; - bool iterator; - } __isset; - - bool operator == (const DB_GetNext_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->iterator == rhs.iterator)) - return false; - return true; - } - bool operator != (const DB_GetNext_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetNext_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetNext_pargs { - public: - - static const uint64_t _reflection_id = 14242404761042565548U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetNext_pargs() throw() {} - - const DBHandle* dbhandle; - const Iterator* iterator; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetNext_result { - public: - - static const uint64_t _reflection_id = 824363650095435948U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetNext_result() { - } - - DB_GetNext_result(const DB_GetNext_result&) = default; - DB_GetNext_result& operator=(const DB_GetNext_result&) = default; - DB_GetNext_result(DB_GetNext_result&&) = default; - DB_GetNext_result& operator=(DB_GetNext_result&&) = default; - - void __clear() { - success.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetNext_result() throw() {} - - ResultPair success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_GetNext_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_GetNext_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetNext_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetNext_presult { - public: - - static const uint64_t _reflection_id = 17974802380941600588U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetNext_presult() throw() {} - - ResultPair* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_GetPrev_args { - public: - - static const uint64_t _reflection_id = 8870271973715332140U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetPrev_args() { - } - - DB_GetPrev_args(const DB_GetPrev_args&) = default; - DB_GetPrev_args& operator=(const DB_GetPrev_args&) = default; - DB_GetPrev_args(DB_GetPrev_args&&) = default; - DB_GetPrev_args& operator=(DB_GetPrev_args&&) = default; - - void __clear() { - dbhandle.__clear(); - iterator.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetPrev_args() throw() {} - - DBHandle dbhandle; - Iterator iterator; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - iterator = false; - } - bool dbhandle; - bool iterator; - } __isset; - - bool operator == (const DB_GetPrev_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->iterator == rhs.iterator)) - return false; - return true; - } - bool operator != (const DB_GetPrev_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetPrev_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetPrev_pargs { - public: - - static const uint64_t _reflection_id = 16552208169457784972U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetPrev_pargs() throw() {} - - const DBHandle* dbhandle; - const Iterator* iterator; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetPrev_result { - public: - - static const uint64_t _reflection_id = 17005837545637039820U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetPrev_result() { - } - - DB_GetPrev_result(const DB_GetPrev_result&) = default; - DB_GetPrev_result& operator=(const DB_GetPrev_result&) = default; - DB_GetPrev_result(DB_GetPrev_result&&) = default; - DB_GetPrev_result& operator=(DB_GetPrev_result&&) = default; - - void __clear() { - success.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetPrev_result() throw() {} - - ResultPair success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_GetPrev_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_GetPrev_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetPrev_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetPrev_presult { - public: - - static const uint64_t _reflection_id = 12518588444439336556U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetPrev_presult() throw() {} - - ResultPair* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_GetSnapshot_args { - public: - - static const uint64_t _reflection_id = 14984968825961323724U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetSnapshot_args() { - } - - DB_GetSnapshot_args(const DB_GetSnapshot_args&) = default; - DB_GetSnapshot_args& operator=(const DB_GetSnapshot_args&) = default; - DB_GetSnapshot_args(DB_GetSnapshot_args&&) = default; - DB_GetSnapshot_args& operator=(DB_GetSnapshot_args&&) = default; - - void __clear() { - dbhandle.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetSnapshot_args() throw() {} - - DBHandle dbhandle; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - } - bool dbhandle; - } __isset; - - bool operator == (const DB_GetSnapshot_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - return true; - } - bool operator != (const DB_GetSnapshot_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetSnapshot_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetSnapshot_pargs { - public: - - static const uint64_t _reflection_id = 7188867685881890956U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetSnapshot_pargs() throw() {} - - const DBHandle* dbhandle; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetSnapshot_result { - public: - - static const uint64_t _reflection_id = 18029040421792131212U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_GetSnapshot_result() { - } - - DB_GetSnapshot_result(const DB_GetSnapshot_result&) = default; - DB_GetSnapshot_result& operator=(const DB_GetSnapshot_result&) = default; - DB_GetSnapshot_result(DB_GetSnapshot_result&&) = default; - DB_GetSnapshot_result& operator=(DB_GetSnapshot_result&&) = default; - - void __clear() { - success.__clear(); - __isset.__clear(); - } - - virtual ~DB_GetSnapshot_result() throw() {} - - ResultSnapshot success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_GetSnapshot_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_GetSnapshot_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_GetSnapshot_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_GetSnapshot_presult { - public: - - static const uint64_t _reflection_id = 10451056179121017996U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_GetSnapshot_presult() throw() {} - - ResultSnapshot* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_ReleaseSnapshot_args { - public: - - static const uint64_t _reflection_id = 14945627971981075500U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_ReleaseSnapshot_args() { - } - - DB_ReleaseSnapshot_args(const DB_ReleaseSnapshot_args&) = default; - DB_ReleaseSnapshot_args& operator=(const DB_ReleaseSnapshot_args&) = default; - DB_ReleaseSnapshot_args(DB_ReleaseSnapshot_args&&) = default; - DB_ReleaseSnapshot_args& operator=(DB_ReleaseSnapshot_args&&) = default; - - void __clear() { - dbhandle.__clear(); - snapshot.__clear(); - __isset.__clear(); - } - - virtual ~DB_ReleaseSnapshot_args() throw() {} - - DBHandle dbhandle; - Snapshot snapshot; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - snapshot = false; - } - bool dbhandle; - bool snapshot; - } __isset; - - bool operator == (const DB_ReleaseSnapshot_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->snapshot == rhs.snapshot)) - return false; - return true; - } - bool operator != (const DB_ReleaseSnapshot_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_ReleaseSnapshot_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_ReleaseSnapshot_pargs { - public: - - static const uint64_t _reflection_id = 8283387247692679788U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_ReleaseSnapshot_pargs() throw() {} - - const DBHandle* dbhandle; - const Snapshot* snapshot; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_ReleaseSnapshot_result { - public: - - static const uint64_t _reflection_id = 15486363403695239660U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_ReleaseSnapshot_result() : success(static_cast(0)) { - } - - DB_ReleaseSnapshot_result(const DB_ReleaseSnapshot_result&) = default; - DB_ReleaseSnapshot_result& operator=(const DB_ReleaseSnapshot_result&) = default; - DB_ReleaseSnapshot_result(DB_ReleaseSnapshot_result&&) = default; - DB_ReleaseSnapshot_result& operator=(DB_ReleaseSnapshot_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_ReleaseSnapshot_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_ReleaseSnapshot_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_ReleaseSnapshot_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_ReleaseSnapshot_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_ReleaseSnapshot_presult { - public: - - static const uint64_t _reflection_id = 13925350785061977420U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_ReleaseSnapshot_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DB_CompactRange_args { - public: - - static const uint64_t _reflection_id = 6075170995358567596U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_CompactRange_args() { - } - - DB_CompactRange_args(const DB_CompactRange_args&) = default; - DB_CompactRange_args& operator=(const DB_CompactRange_args&) = default; - DB_CompactRange_args(DB_CompactRange_args&&) = default; - DB_CompactRange_args& operator=(DB_CompactRange_args&&) = default; - - void __clear() { - dbhandle.__clear(); - start.__clear(); - endhere.__clear(); - __isset.__clear(); - } - - virtual ~DB_CompactRange_args() throw() {} - - DBHandle dbhandle; - Slice start; - Slice endhere; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbhandle = false; - start = false; - endhere = false; - } - bool dbhandle; - bool start; - bool endhere; - } __isset; - - bool operator == (const DB_CompactRange_args & rhs) const - { - if (!(this->dbhandle == rhs.dbhandle)) - return false; - if (!(this->start == rhs.start)) - return false; - if (!(this->endhere == rhs.endhere)) - return false; - return true; - } - bool operator != (const DB_CompactRange_args &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_CompactRange_args & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_CompactRange_pargs { - public: - - static const uint64_t _reflection_id = 11177200356381642316U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_CompactRange_pargs() throw() {} - - const DBHandle* dbhandle; - const Slice* start; - const Slice* endhere; - - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_CompactRange_result { - public: - - static const uint64_t _reflection_id = 12835198829390966636U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DB_CompactRange_result() : success(static_cast(0)) { - } - - DB_CompactRange_result(const DB_CompactRange_result&) = default; - DB_CompactRange_result& operator=(const DB_CompactRange_result&) = default; - DB_CompactRange_result(DB_CompactRange_result&&) = default; - DB_CompactRange_result& operator=(DB_CompactRange_result&&) = default; - - void __clear() { - success = static_cast(0); - __isset.__clear(); - } - - virtual ~DB_CompactRange_result() throw() {} - - Code success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - bool operator == (const DB_CompactRange_result & rhs) const - { - if (!(this->success == rhs.success)) - return false; - return true; - } - bool operator != (const DB_CompactRange_result &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DB_CompactRange_result & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DB_CompactRange_presult { - public: - - static const uint64_t _reflection_id = 14927478234826947852U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - - virtual ~DB_CompactRange_presult() throw() {} - - Code* success; - - struct __isset { - __isset() { __clear(); } - void __clear() { - success = false; - } - bool success; - } __isset; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - -}; - -class DBClient : virtual public DBIf, virtual public apache::thrift::TClientBase { - public: - DBClient(boost::shared_ptr prot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(prot), - poprot_(prot) { - iprot_ = prot.get(); - oprot_ = prot.get(); - } - DBClient(boost::shared_ptr iprot, boost::shared_ptr oprot) : - checkSeqid_(true), - nextSendSequenceId_(1), - nextRecvSequenceId_(1), - piprot_(iprot), - poprot_(oprot) { - iprot_ = iprot.get(); - oprot_ = oprot.get(); - } - boost::shared_ptr getInputProtocol() { - return piprot_; - } - boost::shared_ptr getOutputProtocol() { - return poprot_; - } - void Open(DBHandle& _return, const Text& dbname, const DBOptions& dboptions); - void send_Open(const Text& dbname, const DBOptions& dboptions); - void recv_Open(DBHandle& _return); - Code Close(const DBHandle& dbhandle, const Text& dbname); - void send_Close(const DBHandle& dbhandle, const Text& dbname); - Code recv_Close(); - Code Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options); - void send_Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options); - Code recv_Put(); - Code Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options); - void send_Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options); - Code recv_Delete(); - Code Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options); - void send_Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options); - Code recv_Write(); - void Get(ResultItem& _return, const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options); - void send_Get(const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options); - void recv_Get(ResultItem& _return); - void NewIterator(ResultIterator& _return, const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target); - void send_NewIterator(const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target); - void recv_NewIterator(ResultIterator& _return); - Code DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator); - void send_DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator); - Code recv_DeleteIterator(); - void GetNext(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator); - void send_GetNext(const DBHandle& dbhandle, const Iterator& iterator); - void recv_GetNext(ResultPair& _return); - void GetPrev(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator); - void send_GetPrev(const DBHandle& dbhandle, const Iterator& iterator); - void recv_GetPrev(ResultPair& _return); - void GetSnapshot(ResultSnapshot& _return, const DBHandle& dbhandle); - void send_GetSnapshot(const DBHandle& dbhandle); - void recv_GetSnapshot(ResultSnapshot& _return); - Code ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot); - void send_ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot); - Code recv_ReleaseSnapshot(); - Code CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere); - void send_CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere); - Code recv_CompactRange(); - - /** - * Disable checking the seqid field in server responses. - * - * This should only be used with broken servers that return incorrect seqid values. - */ - void _disableSequenceIdChecks() { - checkSeqid_ = false; - } - - protected: - bool checkSeqid_; - int32_t nextSendSequenceId_; - int32_t nextRecvSequenceId_; - int32_t getNextSendSequenceId(); - int32_t getNextRecvSequenceId(); - boost::shared_ptr piprot_; - boost::shared_ptr poprot_; - apache::thrift::protocol::TProtocol* iprot_; - apache::thrift::protocol::TProtocol* oprot_; -}; - -class DBProcessor : public ::apache::thrift::TDispatchProcessor { - protected: - boost::shared_ptr iface_; - virtual bool dispatchCall(apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, const std::string& fname, int32_t seqid, apache::thrift::server::TConnectionContext* connectionContext); - private: - typedef void (DBProcessor::*ProcessFunction)(int32_t, apache::thrift::protocol::TProtocol*, apache::thrift::protocol::TProtocol*, apache::thrift::server::TConnectionContext*); - typedef std::map ProcessMap; - ProcessMap processMap_; - void process_Open(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_Close(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_Put(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_Delete(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_Write(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_Get(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_NewIterator(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_DeleteIterator(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_GetNext(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_GetPrev(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_GetSnapshot(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_ReleaseSnapshot(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - void process_CompactRange(int32_t seqid, apache::thrift::protocol::TProtocol* iprot, apache::thrift::protocol::TProtocol* oprot, apache::thrift::server::TConnectionContext* connectionContext); - public: - DBProcessor(boost::shared_ptr iface) : - iface_(iface) { - processMap_["Open"] = &DBProcessor::process_Open; - processMap_["Close"] = &DBProcessor::process_Close; - processMap_["Put"] = &DBProcessor::process_Put; - processMap_["Delete"] = &DBProcessor::process_Delete; - processMap_["Write"] = &DBProcessor::process_Write; - processMap_["Get"] = &DBProcessor::process_Get; - processMap_["NewIterator"] = &DBProcessor::process_NewIterator; - processMap_["DeleteIterator"] = &DBProcessor::process_DeleteIterator; - processMap_["GetNext"] = &DBProcessor::process_GetNext; - processMap_["GetPrev"] = &DBProcessor::process_GetPrev; - processMap_["GetSnapshot"] = &DBProcessor::process_GetSnapshot; - processMap_["ReleaseSnapshot"] = &DBProcessor::process_ReleaseSnapshot; - processMap_["CompactRange"] = &DBProcessor::process_CompactRange; - } - - virtual ~DBProcessor() {} - - boost::shared_ptr > getProcessFunctions() { - boost::shared_ptr > rSet(new std::set()); - rSet->insert("DB.Open"); - rSet->insert("DB.Close"); - rSet->insert("DB.Put"); - rSet->insert("DB.Delete"); - rSet->insert("DB.Write"); - rSet->insert("DB.Get"); - rSet->insert("DB.NewIterator"); - rSet->insert("DB.DeleteIterator"); - rSet->insert("DB.GetNext"); - rSet->insert("DB.GetPrev"); - rSet->insert("DB.GetSnapshot"); - rSet->insert("DB.ReleaseSnapshot"); - rSet->insert("DB.CompactRange"); - return rSet; - } -}; - -class DBProcessorFactory : public ::apache::thrift::TProcessorFactory { - public: - DBProcessorFactory(const ::boost::shared_ptr< DBIfFactory >& handlerFactory) : - handlerFactory_(handlerFactory) {} - - ::boost::shared_ptr< ::apache::thrift::TProcessor > getProcessor(::apache::thrift::server::TConnectionContext* ctx); - - protected: - ::boost::shared_ptr< DBIfFactory > handlerFactory_; -}; - -class DBMultiface : virtual public DBIf { - public: - DBMultiface(std::vector >& ifaces) : ifaces_(ifaces) { - } - virtual ~DBMultiface() {} - protected: - std::vector > ifaces_; - DBMultiface() {} - void add(boost::shared_ptr iface) { - ifaces_.push_back(iface); - } - public: - void Open(DBHandle& _return, const Text& dbname, const DBOptions& dboptions) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->Open(_return, dbname, dboptions); - } - } - - Code Close(const DBHandle& dbhandle, const Text& dbname) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->Close(dbhandle, dbname); - } - return ifaces_[i]->Close(dbhandle, dbname); - } - - Code Put(const DBHandle& dbhandle, const kv& keyvalue, const WriteOptions& options) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->Put(dbhandle, keyvalue, options); - } - return ifaces_[i]->Put(dbhandle, keyvalue, options); - } - - Code Delete(const DBHandle& dbhandle, const Slice& key, const WriteOptions& options) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->Delete(dbhandle, key, options); - } - return ifaces_[i]->Delete(dbhandle, key, options); - } - - Code Write(const DBHandle& dbhandle, const std::vector & batch, const WriteOptions& options) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->Write(dbhandle, batch, options); - } - return ifaces_[i]->Write(dbhandle, batch, options); - } - - void Get(ResultItem& _return, const DBHandle& dbhandle, const Slice& inputkey, const ReadOptions& options) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->Get(_return, dbhandle, inputkey, options); - } - } - - void NewIterator(ResultIterator& _return, const DBHandle& dbhandle, const ReadOptions& options, IteratorType iteratorType, const Slice& target) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->NewIterator(_return, dbhandle, options, iteratorType, target); - } - } - - Code DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->DeleteIterator(dbhandle, iterator); - } - return ifaces_[i]->DeleteIterator(dbhandle, iterator); - } - - void GetNext(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->GetNext(_return, dbhandle, iterator); - } - } - - void GetPrev(ResultPair& _return, const DBHandle& dbhandle, const Iterator& iterator) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->GetPrev(_return, dbhandle, iterator); - } - } - - void GetSnapshot(ResultSnapshot& _return, const DBHandle& dbhandle) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz; ++i) { - ifaces_[i]->GetSnapshot(_return, dbhandle); - } - } - - Code ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->ReleaseSnapshot(dbhandle, snapshot); - } - return ifaces_[i]->ReleaseSnapshot(dbhandle, snapshot); - } - - Code CompactRange(const DBHandle& dbhandle, const Slice& start, const Slice& endhere) { - uint32_t i; - uint32_t sz = ifaces_.size(); - for (i = 0; i < sz - 1; ++i) { - ifaces_[i]->CompactRange(dbhandle, start, endhere); - } - return ifaces_[i]->CompactRange(dbhandle, start, endhere); - } - -}; - -} // namespace - -#endif diff --git a/thrift/gen-cpp/leveldb_constants.cpp b/thrift/gen-cpp/leveldb_constants.cpp deleted file mode 100644 index 383e58a48f..0000000000 --- a/thrift/gen-cpp/leveldb_constants.cpp +++ /dev/null @@ -1,17 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "leveldb_constants.h" - -namespace Tleveldb { - -const leveldbConstants g_leveldb_constants; - -leveldbConstants::leveldbConstants() { -} - -} // namespace - diff --git a/thrift/gen-cpp/leveldb_constants.h b/thrift/gen-cpp/leveldb_constants.h deleted file mode 100644 index d219f26398..0000000000 --- a/thrift/gen-cpp/leveldb_constants.h +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef leveldb_CONSTANTS_H -#define leveldb_CONSTANTS_H - -#include "leveldb_types.h" - -namespace Tleveldb { - -class leveldbConstants { - public: - leveldbConstants(); - -}; - -extern const leveldbConstants g_leveldb_constants; - -} // namespace - -#endif diff --git a/thrift/gen-cpp/leveldb_types.cpp b/thrift/gen-cpp/leveldb_types.cpp deleted file mode 100644 index 7c9347de8d..0000000000 --- a/thrift/gen-cpp/leveldb_types.cpp +++ /dev/null @@ -1,2143 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#include "leveldb_types.h" - -#include -#include -#include - -namespace Tleveldb { - -int _kCompressionTypeValues[] = { - kNoCompression, - kSnappyCompression -}; - -const char* _kCompressionTypeNames[] = { - "kNoCompression", - "kSnappyCompression" -}; - -const std::map _CompressionType_VALUES_TO_NAMES(apache::thrift::TEnumIterator(2, _kCompressionTypeValues, _kCompressionTypeNames), apache::thrift::TEnumIterator(-1, NULL, NULL)); - -const std::map _CompressionType_NAMES_TO_VALUES(apache::thrift::TEnumInverseIterator(2, _kCompressionTypeValues, _kCompressionTypeNames), apache::thrift::TEnumInverseIterator(-1, NULL, NULL)); - -} // namespace -namespace apache { namespace thrift { -template<> -const char* TEnumTraits< ::Trocksdb::CompressionType>::findName( ::Trocksdb::CompressionType value) { -return findName( ::Trocksdb::_CompressionType_VALUES_TO_NAMES, value); -} - -template<> -bool TEnumTraits< ::Trocksdb::CompressionType>::findValue(const char* name, ::Trocksdb::CompressionType* out) { -return findValue( ::Trocksdb::_CompressionType_NAMES_TO_VALUES, name, out); -} -}} // apache::thrift - -namespace Tleveldb { -int _kCodeValues[] = { - kOk, - kNotFound, - kCorruption, - kNotSupported, - kInvalidArgument, - kIOError, - kEnd -}; - -const char* _kCodeNames[] = { - "kOk", - "kNotFound", - "kCorruption", - "kNotSupported", - "kInvalidArgument", - "kIOError", - "kEnd" -}; - -const std::map _Code_VALUES_TO_NAMES(apache::thrift::TEnumIterator(7, _kCodeValues, _kCodeNames), apache::thrift::TEnumIterator(-1, NULL, NULL)); - -const std::map _Code_NAMES_TO_VALUES(apache::thrift::TEnumInverseIterator(7, _kCodeValues, _kCodeNames), apache::thrift::TEnumInverseIterator(-1, NULL, NULL)); - -} // namespace -namespace apache { namespace thrift { -template<> -const char* TEnumTraits< ::Trocksdb::Code>::findName( ::Trocksdb::Code value) { -return findName( ::Trocksdb::_Code_VALUES_TO_NAMES, value); -} - -template<> -bool TEnumTraits< ::Trocksdb::Code>::findValue(const char* name, ::Trocksdb::Code* out) { -return findValue( ::Trocksdb::_Code_NAMES_TO_VALUES, name, out); -} -}} // apache::thrift - -namespace Tleveldb { -int _kIteratorTypeValues[] = { - seekToFirst, - seekToLast, - seekToKey -}; - -const char* _kIteratorTypeNames[] = { - "seekToFirst", - "seekToLast", - "seekToKey" -}; - -const std::map _IteratorType_VALUES_TO_NAMES(apache::thrift::TEnumIterator(3, _kIteratorTypeValues, _kIteratorTypeNames), apache::thrift::TEnumIterator(-1, NULL, NULL)); - -const std::map _IteratorType_NAMES_TO_VALUES(apache::thrift::TEnumInverseIterator(3, _kIteratorTypeValues, _kIteratorTypeNames), apache::thrift::TEnumInverseIterator(-1, NULL, NULL)); - -} // namespace -namespace apache { namespace thrift { -template<> -const char* TEnumTraits< ::Trocksdb::IteratorType>::findName( ::Trocksdb::IteratorType value) { -return findName( ::Trocksdb::_IteratorType_VALUES_TO_NAMES, value); -} - -template<> -bool TEnumTraits< ::Trocksdb::IteratorType>::findValue(const char* name, ::Trocksdb::IteratorType* out) { -return findValue( ::Trocksdb::_IteratorType_NAMES_TO_VALUES, name, out); -} -}} // apache::thrift - -namespace Tleveldb { -int _kAssocVisibilityValues[] = { - VISIBLE, - DELETED, - UNUSED1, - HIDDEN, - UNUSED2, - HARD_DELETE -}; - -const char* _kAssocVisibilityNames[] = { - "VISIBLE", - "DELETED", - "UNUSED1", - "HIDDEN", - "UNUSED2", - "HARD_DELETE" -}; - -const std::map _AssocVisibility_VALUES_TO_NAMES(apache::thrift::TEnumIterator(6, _kAssocVisibilityValues, _kAssocVisibilityNames), apache::thrift::TEnumIterator(-1, NULL, NULL)); - -const std::map _AssocVisibility_NAMES_TO_VALUES(apache::thrift::TEnumInverseIterator(6, _kAssocVisibilityValues, _kAssocVisibilityNames), apache::thrift::TEnumInverseIterator(-1, NULL, NULL)); - -} // namespace -namespace apache { namespace thrift { -template<> -const char* TEnumTraits< ::Trocksdb::AssocVisibility>::findName( ::Trocksdb::AssocVisibility value) { -return findName( ::Trocksdb::_AssocVisibility_VALUES_TO_NAMES, value); -} - -template<> -bool TEnumTraits< ::Trocksdb::AssocVisibility>::findValue(const char* name, ::Trocksdb::AssocVisibility* out) { -return findValue( ::Trocksdb::_AssocVisibility_NAMES_TO_VALUES, name, out); -} -}} // apache::thrift - -namespace Tleveldb { -// Reflection initializer for struct leveldb.Slice -namespace { -void reflectionInitializer_2199896239461470156(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 2199896239461470156U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.Slice"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "data"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "size"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t Slice::_reflection_id; -void Slice::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_2199896239461470156(schema); -} -uint32_t Slice::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->data); - this->__isset.data = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->size); - this->__isset.size = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t Slice::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("Slice"); - xfer += oprot->writeFieldBegin("data", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->data); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("size", apache::thrift::protocol::T_I32, 2); - xfer += oprot->writeI32(this->size); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(Slice &a, Slice &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.data, b.data); - swap(a.size, b.size); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.Range -namespace { -void reflectionInitializer_6170219570187881516(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 6170219570187881516U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_2199896239461470156(schema); // struct leveldb.Slice - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.Range"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2199896239461470156U; - f.name = "start"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2199896239461470156U; - f.name = "limit"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t Range::_reflection_id; -void Range::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_6170219570187881516(schema); -} -uint32_t Range::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->start.read(iprot); - this->__isset.start = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->limit.read(iprot); - this->__isset.limit = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t Range::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("Range"); - xfer += oprot->writeFieldBegin("start", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->start.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("limit", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->limit.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(Range &a, Range &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.start, b.start); - swap(a.limit, b.limit); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for enum leveldb.CompressionType -namespace { -void reflectionInitializer_13050266898380890824(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 13050266898380890824U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "enum leveldb.CompressionType"; - dt.__isset.enumValues = true; - dt.enumValues["kNoCompression"] = 0; - dt.enumValues["kSnappyCompression"] = 1; - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -// Reflection initializer for struct leveldb.DBOptions -namespace { -void reflectionInitializer_6731746507948871532(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 6731746507948871532U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_13050266898380890824(schema); // enum leveldb.CompressionType - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.DBOptions"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "create_if_missing"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "error_if_exists"; - dt.fields[2] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "write_buffer_size"; - dt.fields[3] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "max_open_files"; - dt.fields[4] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "block_size"; - dt.fields[5] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "block_restart_interval"; - dt.fields[6] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13050266898380890824U; - f.name = "compression"; - dt.fields[7] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "num_levels"; - dt.fields[8] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "level0_file_num_compaction_trigger"; - dt.fields[9] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "level0_slowdown_writes_trigger"; - dt.fields[10] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "level0_stop_writes_trigger"; - dt.fields[11] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "target_file_size_base"; - dt.fields[12] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "target_file_size_multiplier"; - dt.fields[13] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "max_bytes_for_level_base"; - dt.fields[14] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "max_bytes_for_level_multiplier"; - dt.fields[15] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 5U; - f.name = "max_grandparent_overlap_factor"; - dt.fields[16] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "disableDataSync"; - dt.fields[17] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t DBOptions::_reflection_id; -void DBOptions::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_6731746507948871532(schema); -} -uint32_t DBOptions::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->create_if_missing); - this->__isset.create_if_missing = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->error_if_exists); - this->__isset.error_if_exists = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->write_buffer_size); - this->__isset.write_buffer_size = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->max_open_files); - this->__isset.max_open_files = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->block_size); - this->__isset.block_size = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->block_restart_interval); - this->__isset.block_restart_interval = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 7: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast0; - xfer += iprot->readI32(ecast0); - this->compression = (CompressionType)ecast0; - this->__isset.compression = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 8: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->num_levels); - this->__isset.num_levels = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 9: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->level0_file_num_compaction_trigger); - this->__isset.level0_file_num_compaction_trigger = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 10: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->level0_slowdown_writes_trigger); - this->__isset.level0_slowdown_writes_trigger = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 11: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->level0_stop_writes_trigger); - this->__isset.level0_stop_writes_trigger = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 12: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->target_file_size_base); - this->__isset.target_file_size_base = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 13: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->target_file_size_multiplier); - this->__isset.target_file_size_multiplier = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 14: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->max_bytes_for_level_base); - this->__isset.max_bytes_for_level_base = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 15: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->max_bytes_for_level_multiplier); - this->__isset.max_bytes_for_level_multiplier = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 16: - if (ftype == apache::thrift::protocol::T_I32) { - xfer += iprot->readI32(this->max_grandparent_overlap_factor); - this->__isset.max_grandparent_overlap_factor = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 17: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->disableDataSync); - this->__isset.disableDataSync = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DBOptions::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DBOptions"); - xfer += oprot->writeFieldBegin("create_if_missing", apache::thrift::protocol::T_BOOL, 1); - xfer += oprot->writeBool(this->create_if_missing); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("error_if_exists", apache::thrift::protocol::T_BOOL, 2); - xfer += oprot->writeBool(this->error_if_exists); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("write_buffer_size", apache::thrift::protocol::T_I32, 3); - xfer += oprot->writeI32(this->write_buffer_size); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("max_open_files", apache::thrift::protocol::T_I32, 4); - xfer += oprot->writeI32(this->max_open_files); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("block_size", apache::thrift::protocol::T_I32, 5); - xfer += oprot->writeI32(this->block_size); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("block_restart_interval", apache::thrift::protocol::T_I32, 6); - xfer += oprot->writeI32(this->block_restart_interval); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("compression", apache::thrift::protocol::T_I32, 7); - xfer += oprot->writeI32((int32_t)this->compression); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("num_levels", apache::thrift::protocol::T_I32, 8); - xfer += oprot->writeI32(this->num_levels); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("level0_file_num_compaction_trigger", apache::thrift::protocol::T_I32, 9); - xfer += oprot->writeI32(this->level0_file_num_compaction_trigger); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("level0_slowdown_writes_trigger", apache::thrift::protocol::T_I32, 10); - xfer += oprot->writeI32(this->level0_slowdown_writes_trigger); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("level0_stop_writes_trigger", apache::thrift::protocol::T_I32, 11); - xfer += oprot->writeI32(this->level0_stop_writes_trigger); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("target_file_size_base", apache::thrift::protocol::T_I32, 12); - xfer += oprot->writeI32(this->target_file_size_base); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("target_file_size_multiplier", apache::thrift::protocol::T_I32, 13); - xfer += oprot->writeI32(this->target_file_size_multiplier); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("max_bytes_for_level_base", apache::thrift::protocol::T_I32, 14); - xfer += oprot->writeI32(this->max_bytes_for_level_base); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("max_bytes_for_level_multiplier", apache::thrift::protocol::T_I32, 15); - xfer += oprot->writeI32(this->max_bytes_for_level_multiplier); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("max_grandparent_overlap_factor", apache::thrift::protocol::T_I32, 16); - xfer += oprot->writeI32(this->max_grandparent_overlap_factor); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("disableDataSync", apache::thrift::protocol::T_BOOL, 17); - xfer += oprot->writeBool(this->disableDataSync); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(DBOptions &a, DBOptions &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.create_if_missing, b.create_if_missing); - swap(a.error_if_exists, b.error_if_exists); - swap(a.write_buffer_size, b.write_buffer_size); - swap(a.max_open_files, b.max_open_files); - swap(a.block_size, b.block_size); - swap(a.block_restart_interval, b.block_restart_interval); - swap(a.compression, b.compression); - swap(a.num_levels, b.num_levels); - swap(a.level0_file_num_compaction_trigger, b.level0_file_num_compaction_trigger); - swap(a.level0_slowdown_writes_trigger, b.level0_slowdown_writes_trigger); - swap(a.level0_stop_writes_trigger, b.level0_stop_writes_trigger); - swap(a.target_file_size_base, b.target_file_size_base); - swap(a.target_file_size_multiplier, b.target_file_size_multiplier); - swap(a.max_bytes_for_level_base, b.max_bytes_for_level_base); - swap(a.max_bytes_for_level_multiplier, b.max_bytes_for_level_multiplier); - swap(a.max_grandparent_overlap_factor, b.max_grandparent_overlap_factor); - swap(a.disableDataSync, b.disableDataSync); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.WriteOptions -namespace { -void reflectionInitializer_8830325115029814540(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 8830325115029814540U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.WriteOptions"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "sync"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "disableWAL"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t WriteOptions::_reflection_id; -void WriteOptions::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_8830325115029814540(schema); -} -uint32_t WriteOptions::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->sync); - this->__isset.sync = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->disableWAL); - this->__isset.disableWAL = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t WriteOptions::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("WriteOptions"); - xfer += oprot->writeFieldBegin("sync", apache::thrift::protocol::T_BOOL, 1); - xfer += oprot->writeBool(this->sync); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("disableWAL", apache::thrift::protocol::T_BOOL, 2); - xfer += oprot->writeBool(this->disableWAL); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(WriteOptions &a, WriteOptions &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.sync, b.sync); - swap(a.disableWAL, b.disableWAL); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.Snapshot -namespace { -void reflectionInitializer_15670548806217660204(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 15670548806217660204U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.Snapshot"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "snapshotid"; - dt.fields[1] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t Snapshot::_reflection_id; -void Snapshot::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_15670548806217660204(schema); -} -uint32_t Snapshot::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->snapshotid); - this->__isset.snapshotid = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t Snapshot::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("Snapshot"); - xfer += oprot->writeFieldBegin("snapshotid", apache::thrift::protocol::T_I64, 1); - xfer += oprot->writeI64(this->snapshotid); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(Snapshot &a, Snapshot &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.snapshotid, b.snapshotid); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.ReadOptions -namespace { -void reflectionInitializer_1092669993626789804(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 1092669993626789804U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_15670548806217660204(schema); // struct leveldb.Snapshot - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.ReadOptions"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "verify_checksums"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2U; - f.name = "fill_cache"; - dt.fields[2] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 15670548806217660204U; - f.name = "snapshot"; - dt.fields[3] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t ReadOptions::_reflection_id; -void ReadOptions::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_1092669993626789804(schema); -} -uint32_t ReadOptions::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->verify_checksums); - this->__isset.verify_checksums = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_BOOL) { - xfer += iprot->readBool(this->fill_cache); - this->__isset.fill_cache = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->snapshot.read(iprot); - this->__isset.snapshot = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t ReadOptions::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("ReadOptions"); - xfer += oprot->writeFieldBegin("verify_checksums", apache::thrift::protocol::T_BOOL, 1); - xfer += oprot->writeBool(this->verify_checksums); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("fill_cache", apache::thrift::protocol::T_BOOL, 2); - xfer += oprot->writeBool(this->fill_cache); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("snapshot", apache::thrift::protocol::T_STRUCT, 3); - xfer += this->snapshot.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(ReadOptions &a, ReadOptions &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.verify_checksums, b.verify_checksums); - swap(a.fill_cache, b.fill_cache); - swap(a.snapshot, b.snapshot); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.DBHandle -namespace { -void reflectionInitializer_8973827971994157004(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 8973827971994157004U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.DBHandle"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "dbname"; - dt.fields[1] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t DBHandle::_reflection_id; -void DBHandle::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_8973827971994157004(schema); -} -uint32_t DBHandle::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->dbname); - this->__isset.dbname = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t DBHandle::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("DBHandle"); - xfer += oprot->writeFieldBegin("dbname", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->dbname); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(DBHandle &a, DBHandle &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.dbname, b.dbname); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.Iterator -namespace { -void reflectionInitializer_11184146435197093740(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 11184146435197093740U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.Iterator"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "iteratorid"; - dt.fields[1] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t Iterator::_reflection_id; -void Iterator::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_11184146435197093740(schema); -} -uint32_t Iterator::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->iteratorid); - this->__isset.iteratorid = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t Iterator::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("Iterator"); - xfer += oprot->writeFieldBegin("iteratorid", apache::thrift::protocol::T_I64, 1); - xfer += oprot->writeI64(this->iteratorid); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(Iterator &a, Iterator &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.iteratorid, b.iteratorid); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.kv -namespace { -void reflectionInitializer_16082992224095104076(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 16082992224095104076U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_2199896239461470156(schema); // struct leveldb.Slice - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.kv"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2199896239461470156U; - f.name = "key"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2199896239461470156U; - f.name = "value"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t kv::_reflection_id; -void kv::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_16082992224095104076(schema); -} -uint32_t kv::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->key.read(iprot); - this->__isset.key = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->value.read(iprot); - this->__isset.value = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t kv::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("kv"); - xfer += oprot->writeFieldBegin("key", apache::thrift::protocol::T_STRUCT, 1); - xfer += this->key.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("value", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->value.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(kv &a, kv &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.key, b.key); - swap(a.value, b.value); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for enum leveldb.Code -namespace { -void reflectionInitializer_13230961887206242376(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 13230961887206242376U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "enum leveldb.Code"; - dt.__isset.enumValues = true; - dt.enumValues["kCorruption"] = 2; - dt.enumValues["kEnd"] = 6; - dt.enumValues["kIOError"] = 5; - dt.enumValues["kInvalidArgument"] = 4; - dt.enumValues["kNotFound"] = 1; - dt.enumValues["kNotSupported"] = 3; - dt.enumValues["kOk"] = 0; - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -// Reflection initializer for struct leveldb.ResultItem -namespace { -void reflectionInitializer_13211316281207238796(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 13211316281207238796U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_13230961887206242376(schema); // enum leveldb.Code - reflectionInitializer_2199896239461470156(schema); // struct leveldb.Slice - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.ResultItem"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13230961887206242376U; - f.name = "status"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 2199896239461470156U; - f.name = "value"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t ResultItem::_reflection_id; -void ResultItem::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_13211316281207238796(schema); -} -uint32_t ResultItem::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast1; - xfer += iprot->readI32(ecast1); - this->status = (Code)ecast1; - this->__isset.status = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->value.read(iprot); - this->__isset.value = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t ResultItem::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("ResultItem"); - xfer += oprot->writeFieldBegin("status", apache::thrift::protocol::T_I32, 1); - xfer += oprot->writeI32((int32_t)this->status); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("value", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->value.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(ResultItem &a, ResultItem &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.status, b.status); - swap(a.value, b.value); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.ResultPair -namespace { -void reflectionInitializer_14875242256166808460(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 14875242256166808460U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_13230961887206242376(schema); // enum leveldb.Code - reflectionInitializer_16082992224095104076(schema); // struct leveldb.kv - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.ResultPair"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13230961887206242376U; - f.name = "status"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 16082992224095104076U; - f.name = "keyvalue"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t ResultPair::_reflection_id; -void ResultPair::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_14875242256166808460(schema); -} -uint32_t ResultPair::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast2; - xfer += iprot->readI32(ecast2); - this->status = (Code)ecast2; - this->__isset.status = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->keyvalue.read(iprot); - this->__isset.keyvalue = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t ResultPair::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("ResultPair"); - xfer += oprot->writeFieldBegin("status", apache::thrift::protocol::T_I32, 1); - xfer += oprot->writeI32((int32_t)this->status); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("keyvalue", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->keyvalue.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(ResultPair &a, ResultPair &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.status, b.status); - swap(a.keyvalue, b.keyvalue); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.ResultSnapshot -namespace { -void reflectionInitializer_16627180600575569004(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 16627180600575569004U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_13230961887206242376(schema); // enum leveldb.Code - reflectionInitializer_15670548806217660204(schema); // struct leveldb.Snapshot - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.ResultSnapshot"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13230961887206242376U; - f.name = "status"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 15670548806217660204U; - f.name = "snapshot"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t ResultSnapshot::_reflection_id; -void ResultSnapshot::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_16627180600575569004(schema); -} -uint32_t ResultSnapshot::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast3; - xfer += iprot->readI32(ecast3); - this->status = (Code)ecast3; - this->__isset.status = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->snapshot.read(iprot); - this->__isset.snapshot = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t ResultSnapshot::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("ResultSnapshot"); - xfer += oprot->writeFieldBegin("status", apache::thrift::protocol::T_I32, 1); - xfer += oprot->writeI32((int32_t)this->status); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("snapshot", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->snapshot.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(ResultSnapshot &a, ResultSnapshot &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.status, b.status); - swap(a.snapshot, b.snapshot); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.ResultIterator -namespace { -void reflectionInitializer_595886977232564460(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 595886977232564460U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_11184146435197093740(schema); // struct leveldb.Iterator - reflectionInitializer_13230961887206242376(schema); // enum leveldb.Code - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.ResultIterator"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13230961887206242376U; - f.name = "status"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 11184146435197093740U; - f.name = "iterator"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t ResultIterator::_reflection_id; -void ResultIterator::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_595886977232564460(schema); -} -uint32_t ResultIterator::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast4; - xfer += iprot->readI32(ecast4); - this->status = (Code)ecast4; - this->__isset.status = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_STRUCT) { - xfer += this->iterator.read(iprot); - this->__isset.iterator = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t ResultIterator::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("ResultIterator"); - xfer += oprot->writeFieldBegin("status", apache::thrift::protocol::T_I32, 1); - xfer += oprot->writeI32((int32_t)this->status); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("iterator", apache::thrift::protocol::T_STRUCT, 2); - xfer += this->iterator.write(oprot); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(ResultIterator &a, ResultIterator &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.status, b.status); - swap(a.iterator, b.iterator); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.LeveldbException -namespace { -void reflectionInitializer_2551220192341843436(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 2551220192341843436U; - if (schema.dataTypes.count(id)) return; - reflectionInitializer_13230961887206242376(schema); // enum leveldb.Code - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.LeveldbException"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "message"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 13230961887206242376U; - f.name = "errorCode"; - dt.fields[2] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t LeveldbException::_reflection_id; -void LeveldbException::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_2551220192341843436(schema); -} -uint32_t LeveldbException::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->message); - this->__isset.message = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I32) { - int32_t ecast5; - xfer += iprot->readI32(ecast5); - this->errorCode = (Code)ecast5; - this->__isset.errorCode = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t LeveldbException::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("LeveldbException"); - xfer += oprot->writeFieldBegin("message", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeBinary(this->message); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("errorCode", apache::thrift::protocol::T_I32, 2); - xfer += oprot->writeI32((int32_t)this->errorCode); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(LeveldbException &a, LeveldbException &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.message, b.message); - swap(a.errorCode, b.errorCode); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.IOError -namespace { -void reflectionInitializer_8460881927871070060(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 8460881927871070060U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.IOError"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "message"; - dt.fields[1] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t IOError::_reflection_id; -void IOError::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_8460881927871070060(schema); -} -uint32_t IOError::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readString(this->message); - this->__isset.message = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t IOError::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("IOError"); - xfer += oprot->writeFieldBegin("message", apache::thrift::protocol::T_STRING, 1); - xfer += oprot->writeString(this->message); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(IOError &a, IOError &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.message, b.message); - swap(a.__isset, b.__isset); -} - -// Reflection initializer for struct leveldb.TaoAssocGetResult -namespace { -void reflectionInitializer_6301164048086986412(::apache::thrift::reflection::Schema& schema) { - const uint64_t id = 6301164048086986412U; - if (schema.dataTypes.count(id)) return; - ::apache::thrift::reflection::DataType dt; - dt.name = "struct leveldb.TaoAssocGetResult"; - dt.__isset.fields = true; - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "id2"; - dt.fields[1] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "id1Type"; - dt.fields[2] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "id2Type"; - dt.fields[3] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "time"; - dt.fields[4] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 6U; - f.name = "dataVersion"; - dt.fields[5] = f; - } - { - ::apache::thrift::reflection::StructField f; - f.isRequired = true; - f.type = 1U; - f.name = "data"; - dt.fields[6] = f; - } - schema.dataTypes[id] = dt; - schema.names[dt.name] = id; -} -} // namespace - -const uint64_t TaoAssocGetResult::_reflection_id; -void TaoAssocGetResult::_reflection_register(::apache::thrift::reflection::Schema& schema) { - reflectionInitializer_6301164048086986412(schema); -} -uint32_t TaoAssocGetResult::read(apache::thrift::protocol::TProtocol* iprot) { - - uint32_t xfer = 0; - std::string fname; - apache::thrift::protocol::TType ftype; - int16_t fid; - - xfer += iprot->readStructBegin(fname); - - using apache::thrift::protocol::TProtocolException; - - - while (true) - { - xfer += iprot->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - switch (fid) - { - case 1: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id2); - this->__isset.id2 = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 2: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id1Type); - this->__isset.id1Type = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 3: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->id2Type); - this->__isset.id2Type = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 4: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->time); - this->__isset.time = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 5: - if (ftype == apache::thrift::protocol::T_I64) { - xfer += iprot->readI64(this->dataVersion); - this->__isset.dataVersion = true; - } else { - xfer += iprot->skip(ftype); - } - break; - case 6: - if (ftype == apache::thrift::protocol::T_STRING) { - xfer += iprot->readBinary(this->data); - this->__isset.data = true; - } else { - xfer += iprot->skip(ftype); - } - break; - default: - xfer += iprot->skip(ftype); - break; - } - xfer += iprot->readFieldEnd(); - } - - xfer += iprot->readStructEnd(); - - return xfer; -} - -uint32_t TaoAssocGetResult::write(apache::thrift::protocol::TProtocol* oprot) const { - uint32_t xfer = 0; - xfer += oprot->writeStructBegin("TaoAssocGetResult"); - xfer += oprot->writeFieldBegin("id2", apache::thrift::protocol::T_I64, 1); - xfer += oprot->writeI64(this->id2); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id1Type", apache::thrift::protocol::T_I64, 2); - xfer += oprot->writeI64(this->id1Type); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("id2Type", apache::thrift::protocol::T_I64, 3); - xfer += oprot->writeI64(this->id2Type); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("time", apache::thrift::protocol::T_I64, 4); - xfer += oprot->writeI64(this->time); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("dataVersion", apache::thrift::protocol::T_I64, 5); - xfer += oprot->writeI64(this->dataVersion); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldBegin("data", apache::thrift::protocol::T_STRING, 6); - xfer += oprot->writeBinary(this->data); - xfer += oprot->writeFieldEnd(); - xfer += oprot->writeFieldStop(); - xfer += oprot->writeStructEnd(); - return xfer; -} - -void swap(TaoAssocGetResult &a, TaoAssocGetResult &b) { - using ::std::swap; - (void)a; - (void)b; - swap(a.id2, b.id2); - swap(a.id1Type, b.id1Type); - swap(a.id2Type, b.id2Type); - swap(a.time, b.time); - swap(a.dataVersion, b.dataVersion); - swap(a.data, b.data); - swap(a.__isset, b.__isset); -} - -} // namespace diff --git a/thrift/gen-cpp/leveldb_types.h b/thrift/gen-cpp/leveldb_types.h deleted file mode 100644 index f5e92e7145..0000000000 --- a/thrift/gen-cpp/leveldb_types.h +++ /dev/null @@ -1,1126 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated - */ -#ifndef leveldb_TYPES_H -#define leveldb_TYPES_H - -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace reflection { -class Schema; -}}} - - -namespace Tleveldb { - -enum CompressionType { - kNoCompression = 0, - kSnappyCompression = 1 -}; - -extern const std::map _CompressionType_VALUES_TO_NAMES; - -extern const std::map _CompressionType_NAMES_TO_VALUES; - -} // namespace -namespace apache { namespace thrift { -template<> -inline constexpr ::Trocksdb::CompressionType TEnumTraits< ::Trocksdb::CompressionType>::min() { -return ::Trocksdb::CompressionType::kNoCompression; -} -template<> -inline constexpr ::Trocksdb::CompressionType TEnumTraits< ::Trocksdb::CompressionType>::max() { -return ::Trocksdb::CompressionType::kSnappyCompression; -} -}} // apache:thrift - -namespace Tleveldb { -enum Code { - kOk = 0, - kNotFound = 1, - kCorruption = 2, - kNotSupported = 3, - kInvalidArgument = 4, - kIOError = 5, - kEnd = 6 -}; - -extern const std::map _Code_VALUES_TO_NAMES; - -extern const std::map _Code_NAMES_TO_VALUES; - -} // namespace -namespace apache { namespace thrift { -template<> -inline constexpr ::Trocksdb::Code TEnumTraits< ::Trocksdb::Code>::min() { -return ::Trocksdb::Code::kOk; -} -template<> -inline constexpr ::Trocksdb::Code TEnumTraits< ::Trocksdb::Code>::max() { -return ::Trocksdb::Code::kEnd; -} -}} // apache:thrift - -namespace Tleveldb { -enum IteratorType { - seekToFirst = 0, - seekToLast = 1, - seekToKey = 2 -}; - -extern const std::map _IteratorType_VALUES_TO_NAMES; - -extern const std::map _IteratorType_NAMES_TO_VALUES; - -} // namespace -namespace apache { namespace thrift { -template<> -inline constexpr ::Trocksdb::IteratorType TEnumTraits< ::Trocksdb::IteratorType>::min() { -return ::Trocksdb::IteratorType::seekToFirst; -} -template<> -inline constexpr ::Trocksdb::IteratorType TEnumTraits< ::Trocksdb::IteratorType>::max() { -return ::Trocksdb::IteratorType::seekToKey; -} -}} // apache:thrift - -namespace Tleveldb { -enum AssocVisibility { - VISIBLE = 0, - DELETED = 1, - UNUSED1 = 2, - HIDDEN = 3, - UNUSED2 = 4, - HARD_DELETE = 4 -}; - -extern const std::map _AssocVisibility_VALUES_TO_NAMES; - -extern const std::map _AssocVisibility_NAMES_TO_VALUES; - -} // namespace -namespace apache { namespace thrift { -template<> -inline constexpr ::Trocksdb::AssocVisibility TEnumTraits< ::Trocksdb::AssocVisibility>::min() { -return ::Trocksdb::AssocVisibility::VISIBLE; -} -template<> -inline constexpr ::Trocksdb::AssocVisibility TEnumTraits< ::Trocksdb::AssocVisibility>::max() { -return ::Trocksdb::AssocVisibility::HARD_DELETE; -} -}} // apache:thrift - -namespace Tleveldb { -typedef std::string Text; - -typedef std::string Bytes; - -class Slice { - public: - - static const uint64_t _reflection_id = 2199896239461470156U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - Slice() : data(""), size(0) { - } - - Slice(const Slice&) = default; - Slice& operator=(const Slice&) = default; - Slice(Slice&&) = default; - Slice& operator=(Slice&&) = default; - - void __clear() { - data = ""; - size = 0; - __isset.__clear(); - } - - virtual ~Slice() throw() {} - - Text data; - int32_t size; - - struct __isset { - __isset() { __clear(); } - void __clear() { - data = false; - size = false; - } - bool data; - bool size; - } __isset; - - bool operator == (const Slice & rhs) const - { - if (!(this->data == rhs.data)) - return false; - if (!(this->size == rhs.size)) - return false; - return true; - } - bool operator != (const Slice &rhs) const { - return !(*this == rhs); - } - - bool operator < (const Slice & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class Slice; -void swap(Slice &a, Slice &b); - -class Range { - public: - - static const uint64_t _reflection_id = 6170219570187881516U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - Range() { - } - - Range(const Range&) = default; - Range& operator=(const Range&) = default; - Range(Range&&) = default; - Range& operator=(Range&&) = default; - - void __clear() { - start.__clear(); - limit.__clear(); - __isset.__clear(); - } - - virtual ~Range() throw() {} - - Slice start; - Slice limit; - - struct __isset { - __isset() { __clear(); } - void __clear() { - start = false; - limit = false; - } - bool start; - bool limit; - } __isset; - - bool operator == (const Range & rhs) const - { - if (!(this->start == rhs.start)) - return false; - if (!(this->limit == rhs.limit)) - return false; - return true; - } - bool operator != (const Range &rhs) const { - return !(*this == rhs); - } - - bool operator < (const Range & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class Range; -void swap(Range &a, Range &b); - -class DBOptions { - public: - - static const uint64_t _reflection_id = 6731746507948871532U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DBOptions() : create_if_missing(0), error_if_exists(0), write_buffer_size(0), max_open_files(0), block_size(0), block_restart_interval(0), compression(static_cast(0)), num_levels(0), level0_file_num_compaction_trigger(0), level0_slowdown_writes_trigger(0), level0_stop_writes_trigger(0), target_file_size_base(0), target_file_size_multiplier(0), max_bytes_for_level_base(0), max_bytes_for_level_multiplier(0), max_grandparent_overlap_factor(0), disableDataSync(0) { - } - - DBOptions(const DBOptions&) = default; - DBOptions& operator=(const DBOptions&) = default; - DBOptions(DBOptions&&) = default; - DBOptions& operator=(DBOptions&&) = default; - - void __clear() { - create_if_missing = 0; - error_if_exists = 0; - write_buffer_size = 0; - max_open_files = 0; - block_size = 0; - block_restart_interval = 0; - compression = static_cast(0); - num_levels = 0; - level0_file_num_compaction_trigger = 0; - level0_slowdown_writes_trigger = 0; - level0_stop_writes_trigger = 0; - target_file_size_base = 0; - target_file_size_multiplier = 0; - max_bytes_for_level_base = 0; - max_bytes_for_level_multiplier = 0; - max_grandparent_overlap_factor = 0; - disableDataSync = 0; - __isset.__clear(); - } - - virtual ~DBOptions() throw() {} - - bool create_if_missing; - bool error_if_exists; - int32_t write_buffer_size; - int32_t max_open_files; - int32_t block_size; - int32_t block_restart_interval; - CompressionType compression; - int32_t num_levels; - int32_t level0_file_num_compaction_trigger; - int32_t level0_slowdown_writes_trigger; - int32_t level0_stop_writes_trigger; - int32_t target_file_size_base; - int32_t target_file_size_multiplier; - int32_t max_bytes_for_level_base; - int32_t max_bytes_for_level_multiplier; - int32_t max_grandparent_overlap_factor; - bool disableDataSync; - - struct __isset { - __isset() { __clear(); } - void __clear() { - create_if_missing = false; - error_if_exists = false; - write_buffer_size = false; - max_open_files = false; - block_size = false; - block_restart_interval = false; - compression = false; - num_levels = false; - level0_file_num_compaction_trigger = false; - level0_slowdown_writes_trigger = false; - level0_stop_writes_trigger = false; - target_file_size_base = false; - target_file_size_multiplier = false; - max_bytes_for_level_base = false; - max_bytes_for_level_multiplier = false; - max_grandparent_overlap_factor = false; - disableDataSync = false; - } - bool create_if_missing; - bool error_if_exists; - bool write_buffer_size; - bool max_open_files; - bool block_size; - bool block_restart_interval; - bool compression; - bool num_levels; - bool level0_file_num_compaction_trigger; - bool level0_slowdown_writes_trigger; - bool level0_stop_writes_trigger; - bool target_file_size_base; - bool target_file_size_multiplier; - bool max_bytes_for_level_base; - bool max_bytes_for_level_multiplier; - bool max_grandparent_overlap_factor; - bool disableDataSync; - } __isset; - - bool operator == (const DBOptions & rhs) const - { - if (!(this->create_if_missing == rhs.create_if_missing)) - return false; - if (!(this->error_if_exists == rhs.error_if_exists)) - return false; - if (!(this->write_buffer_size == rhs.write_buffer_size)) - return false; - if (!(this->max_open_files == rhs.max_open_files)) - return false; - if (!(this->block_size == rhs.block_size)) - return false; - if (!(this->block_restart_interval == rhs.block_restart_interval)) - return false; - if (!(this->compression == rhs.compression)) - return false; - if (!(this->num_levels == rhs.num_levels)) - return false; - if (!(this->level0_file_num_compaction_trigger == rhs.level0_file_num_compaction_trigger)) - return false; - if (!(this->level0_slowdown_writes_trigger == rhs.level0_slowdown_writes_trigger)) - return false; - if (!(this->level0_stop_writes_trigger == rhs.level0_stop_writes_trigger)) - return false; - if (!(this->target_file_size_base == rhs.target_file_size_base)) - return false; - if (!(this->target_file_size_multiplier == rhs.target_file_size_multiplier)) - return false; - if (!(this->max_bytes_for_level_base == rhs.max_bytes_for_level_base)) - return false; - if (!(this->max_bytes_for_level_multiplier == rhs.max_bytes_for_level_multiplier)) - return false; - if (!(this->max_grandparent_overlap_factor == rhs.max_grandparent_overlap_factor)) - return false; - if (!(this->disableDataSync == rhs.disableDataSync)) - return false; - return true; - } - bool operator != (const DBOptions &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DBOptions & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DBOptions; -void swap(DBOptions &a, DBOptions &b); - -class WriteOptions { - public: - - static const uint64_t _reflection_id = 8830325115029814540U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - WriteOptions() : sync(0), disableWAL(0) { - } - - WriteOptions(const WriteOptions&) = default; - WriteOptions& operator=(const WriteOptions&) = default; - WriteOptions(WriteOptions&&) = default; - WriteOptions& operator=(WriteOptions&&) = default; - - void __clear() { - sync = 0; - disableWAL = 0; - __isset.__clear(); - } - - virtual ~WriteOptions() throw() {} - - bool sync; - bool disableWAL; - - struct __isset { - __isset() { __clear(); } - void __clear() { - sync = false; - disableWAL = false; - } - bool sync; - bool disableWAL; - } __isset; - - bool operator == (const WriteOptions & rhs) const - { - if (!(this->sync == rhs.sync)) - return false; - if (!(this->disableWAL == rhs.disableWAL)) - return false; - return true; - } - bool operator != (const WriteOptions &rhs) const { - return !(*this == rhs); - } - - bool operator < (const WriteOptions & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class WriteOptions; -void swap(WriteOptions &a, WriteOptions &b); - -class Snapshot { - public: - - static const uint64_t _reflection_id = 15670548806217660204U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - Snapshot() : snapshotid(0) { - } - - Snapshot(const Snapshot&) = default; - Snapshot& operator=(const Snapshot&) = default; - Snapshot(Snapshot&&) = default; - Snapshot& operator=(Snapshot&&) = default; - - void __clear() { - snapshotid = 0; - __isset.__clear(); - } - - virtual ~Snapshot() throw() {} - - int64_t snapshotid; - - struct __isset { - __isset() { __clear(); } - void __clear() { - snapshotid = false; - } - bool snapshotid; - } __isset; - - bool operator == (const Snapshot & rhs) const - { - if (!(this->snapshotid == rhs.snapshotid)) - return false; - return true; - } - bool operator != (const Snapshot &rhs) const { - return !(*this == rhs); - } - - bool operator < (const Snapshot & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class Snapshot; -void swap(Snapshot &a, Snapshot &b); - -class ReadOptions { - public: - - static const uint64_t _reflection_id = 1092669993626789804U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - ReadOptions() : verify_checksums(0), fill_cache(0) { - } - - ReadOptions(const ReadOptions&) = default; - ReadOptions& operator=(const ReadOptions&) = default; - ReadOptions(ReadOptions&&) = default; - ReadOptions& operator=(ReadOptions&&) = default; - - void __clear() { - verify_checksums = 0; - fill_cache = 0; - snapshot.__clear(); - __isset.__clear(); - } - - virtual ~ReadOptions() throw() {} - - bool verify_checksums; - bool fill_cache; - Snapshot snapshot; - - struct __isset { - __isset() { __clear(); } - void __clear() { - verify_checksums = false; - fill_cache = false; - snapshot = false; - } - bool verify_checksums; - bool fill_cache; - bool snapshot; - } __isset; - - bool operator == (const ReadOptions & rhs) const - { - if (!(this->verify_checksums == rhs.verify_checksums)) - return false; - if (!(this->fill_cache == rhs.fill_cache)) - return false; - if (!(this->snapshot == rhs.snapshot)) - return false; - return true; - } - bool operator != (const ReadOptions &rhs) const { - return !(*this == rhs); - } - - bool operator < (const ReadOptions & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class ReadOptions; -void swap(ReadOptions &a, ReadOptions &b); - -class DBHandle { - public: - - static const uint64_t _reflection_id = 8973827971994157004U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - DBHandle() : dbname("") { - } - - DBHandle(const DBHandle&) = default; - DBHandle& operator=(const DBHandle&) = default; - DBHandle(DBHandle&&) = default; - DBHandle& operator=(DBHandle&&) = default; - - void __clear() { - dbname = ""; - __isset.__clear(); - } - - virtual ~DBHandle() throw() {} - - Text dbname; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dbname = false; - } - bool dbname; - } __isset; - - bool operator == (const DBHandle & rhs) const - { - if (!(this->dbname == rhs.dbname)) - return false; - return true; - } - bool operator != (const DBHandle &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DBHandle & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DBHandle; -void swap(DBHandle &a, DBHandle &b); - -class Iterator { - public: - - static const uint64_t _reflection_id = 11184146435197093740U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - Iterator() : iteratorid(0) { - } - - Iterator(const Iterator&) = default; - Iterator& operator=(const Iterator&) = default; - Iterator(Iterator&&) = default; - Iterator& operator=(Iterator&&) = default; - - void __clear() { - iteratorid = 0; - __isset.__clear(); - } - - virtual ~Iterator() throw() {} - - int64_t iteratorid; - - struct __isset { - __isset() { __clear(); } - void __clear() { - iteratorid = false; - } - bool iteratorid; - } __isset; - - bool operator == (const Iterator & rhs) const - { - if (!(this->iteratorid == rhs.iteratorid)) - return false; - return true; - } - bool operator != (const Iterator &rhs) const { - return !(*this == rhs); - } - - bool operator < (const Iterator & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class Iterator; -void swap(Iterator &a, Iterator &b); - -class kv { - public: - - static const uint64_t _reflection_id = 16082992224095104076U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - kv() { - } - - kv(const kv&) = default; - kv& operator=(const kv&) = default; - kv(kv&&) = default; - kv& operator=(kv&&) = default; - - void __clear() { - key.__clear(); - value.__clear(); - __isset.__clear(); - } - - virtual ~kv() throw() {} - - Slice key; - Slice value; - - struct __isset { - __isset() { __clear(); } - void __clear() { - key = false; - value = false; - } - bool key; - bool value; - } __isset; - - bool operator == (const kv & rhs) const - { - if (!(this->key == rhs.key)) - return false; - if (!(this->value == rhs.value)) - return false; - return true; - } - bool operator != (const kv &rhs) const { - return !(*this == rhs); - } - - bool operator < (const kv & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class kv; -void swap(kv &a, kv &b); - -class ResultItem { - public: - - static const uint64_t _reflection_id = 13211316281207238796U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - ResultItem() : status(static_cast(0)) { - } - - ResultItem(const ResultItem&) = default; - ResultItem& operator=(const ResultItem&) = default; - ResultItem(ResultItem&&) = default; - ResultItem& operator=(ResultItem&&) = default; - - void __clear() { - status = static_cast(0); - value.__clear(); - __isset.__clear(); - } - - virtual ~ResultItem() throw() {} - - Code status; - Slice value; - - struct __isset { - __isset() { __clear(); } - void __clear() { - status = false; - value = false; - } - bool status; - bool value; - } __isset; - - bool operator == (const ResultItem & rhs) const - { - if (!(this->status == rhs.status)) - return false; - if (!(this->value == rhs.value)) - return false; - return true; - } - bool operator != (const ResultItem &rhs) const { - return !(*this == rhs); - } - - bool operator < (const ResultItem & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class ResultItem; -void swap(ResultItem &a, ResultItem &b); - -class ResultPair { - public: - - static const uint64_t _reflection_id = 14875242256166808460U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - ResultPair() : status(static_cast(0)) { - } - - ResultPair(const ResultPair&) = default; - ResultPair& operator=(const ResultPair&) = default; - ResultPair(ResultPair&&) = default; - ResultPair& operator=(ResultPair&&) = default; - - void __clear() { - status = static_cast(0); - keyvalue.__clear(); - __isset.__clear(); - } - - virtual ~ResultPair() throw() {} - - Code status; - kv keyvalue; - - struct __isset { - __isset() { __clear(); } - void __clear() { - status = false; - keyvalue = false; - } - bool status; - bool keyvalue; - } __isset; - - bool operator == (const ResultPair & rhs) const - { - if (!(this->status == rhs.status)) - return false; - if (!(this->keyvalue == rhs.keyvalue)) - return false; - return true; - } - bool operator != (const ResultPair &rhs) const { - return !(*this == rhs); - } - - bool operator < (const ResultPair & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class ResultPair; -void swap(ResultPair &a, ResultPair &b); - -class ResultSnapshot { - public: - - static const uint64_t _reflection_id = 16627180600575569004U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - ResultSnapshot() : status(static_cast(0)) { - } - - ResultSnapshot(const ResultSnapshot&) = default; - ResultSnapshot& operator=(const ResultSnapshot&) = default; - ResultSnapshot(ResultSnapshot&&) = default; - ResultSnapshot& operator=(ResultSnapshot&&) = default; - - void __clear() { - status = static_cast(0); - snapshot.__clear(); - __isset.__clear(); - } - - virtual ~ResultSnapshot() throw() {} - - Code status; - Snapshot snapshot; - - struct __isset { - __isset() { __clear(); } - void __clear() { - status = false; - snapshot = false; - } - bool status; - bool snapshot; - } __isset; - - bool operator == (const ResultSnapshot & rhs) const - { - if (!(this->status == rhs.status)) - return false; - if (!(this->snapshot == rhs.snapshot)) - return false; - return true; - } - bool operator != (const ResultSnapshot &rhs) const { - return !(*this == rhs); - } - - bool operator < (const ResultSnapshot & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class ResultSnapshot; -void swap(ResultSnapshot &a, ResultSnapshot &b); - -class ResultIterator { - public: - - static const uint64_t _reflection_id = 595886977232564460U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - ResultIterator() : status(static_cast(0)) { - } - - ResultIterator(const ResultIterator&) = default; - ResultIterator& operator=(const ResultIterator&) = default; - ResultIterator(ResultIterator&&) = default; - ResultIterator& operator=(ResultIterator&&) = default; - - void __clear() { - status = static_cast(0); - iterator.__clear(); - __isset.__clear(); - } - - virtual ~ResultIterator() throw() {} - - Code status; - Iterator iterator; - - struct __isset { - __isset() { __clear(); } - void __clear() { - status = false; - iterator = false; - } - bool status; - bool iterator; - } __isset; - - bool operator == (const ResultIterator & rhs) const - { - if (!(this->status == rhs.status)) - return false; - if (!(this->iterator == rhs.iterator)) - return false; - return true; - } - bool operator != (const ResultIterator &rhs) const { - return !(*this == rhs); - } - - bool operator < (const ResultIterator & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class ResultIterator; -void swap(ResultIterator &a, ResultIterator &b); - -class LeveldbException : public apache::thrift::TException { - public: - - static const uint64_t _reflection_id = 2551220192341843436U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - LeveldbException() : message(""), errorCode(static_cast(0)) { - } - - LeveldbException(const LeveldbException&) = default; - LeveldbException& operator=(const LeveldbException&) = default; - LeveldbException(LeveldbException&&) = default; - LeveldbException& operator=(LeveldbException&&) = default; - - void __clear() { - message = ""; - errorCode = static_cast(0); - __isset.__clear(); - } - - virtual ~LeveldbException() throw() {} - - Text message; - Code errorCode; - - struct __isset { - __isset() { __clear(); } - void __clear() { - message = false; - errorCode = false; - } - bool message; - bool errorCode; - } __isset; - - bool operator == (const LeveldbException & rhs) const - { - if (!(this->message == rhs.message)) - return false; - if (!(this->errorCode == rhs.errorCode)) - return false; - return true; - } - bool operator != (const LeveldbException &rhs) const { - return !(*this == rhs); - } - - bool operator < (const LeveldbException & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - - virtual const char* what() const throw() { - return "LeveldbException"; - } - -}; - -class LeveldbException; -void swap(LeveldbException &a, LeveldbException &b); - -class IOError : public apache::thrift::TException { - public: - - static const uint64_t _reflection_id = 8460881927871070060U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - IOError() : message("") { - } - - IOError(const IOError&) = default; - IOError& operator=(const IOError&) = default; - IOError(IOError&&) = default; - IOError& operator=(IOError&&) = default; - - void __clear() { - message = ""; - __isset.__clear(); - } - - virtual ~IOError() throw() {} - - std::string message; - - struct __isset { - __isset() { __clear(); } - void __clear() { - message = false; - } - bool message; - } __isset; - - bool operator == (const IOError & rhs) const - { - if (!(this->message == rhs.message)) - return false; - return true; - } - bool operator != (const IOError &rhs) const { - return !(*this == rhs); - } - - bool operator < (const IOError & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - - virtual const char* what() const throw() { - return "IOError"; - } - -}; - -class IOError; -void swap(IOError &a, IOError &b); - -class TaoAssocGetResult { - public: - - static const uint64_t _reflection_id = 6301164048086986412U; - static void _reflection_register(::apache::thrift::reflection::Schema&); - TaoAssocGetResult() : id2(0), id1Type(0), id2Type(0), time(0), dataVersion(0), data("") { - } - - TaoAssocGetResult(const TaoAssocGetResult&) = default; - TaoAssocGetResult& operator=(const TaoAssocGetResult&) = default; - TaoAssocGetResult(TaoAssocGetResult&&) = default; - TaoAssocGetResult& operator=(TaoAssocGetResult&&) = default; - - void __clear() { - id2 = 0; - id1Type = 0; - id2Type = 0; - time = 0; - dataVersion = 0; - data = ""; - __isset.__clear(); - } - - virtual ~TaoAssocGetResult() throw() {} - - int64_t id2; - int64_t id1Type; - int64_t id2Type; - int64_t time; - int64_t dataVersion; - Text data; - - struct __isset { - __isset() { __clear(); } - void __clear() { - id2 = false; - id1Type = false; - id2Type = false; - time = false; - dataVersion = false; - data = false; - } - bool id2; - bool id1Type; - bool id2Type; - bool time; - bool dataVersion; - bool data; - } __isset; - - bool operator == (const TaoAssocGetResult & rhs) const - { - if (!(this->id2 == rhs.id2)) - return false; - if (!(this->id1Type == rhs.id1Type)) - return false; - if (!(this->id2Type == rhs.id2Type)) - return false; - if (!(this->time == rhs.time)) - return false; - if (!(this->dataVersion == rhs.dataVersion)) - return false; - if (!(this->data == rhs.data)) - return false; - return true; - } - bool operator != (const TaoAssocGetResult &rhs) const { - return !(*this == rhs); - } - - bool operator < (const TaoAssocGetResult & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class TaoAssocGetResult; -void swap(TaoAssocGetResult &a, TaoAssocGetResult &b); - -} // namespace - -#endif diff --git a/thrift/gen-cpp/reflection_types.h b/thrift/gen-cpp/reflection_types.h deleted file mode 100644 index b2ce3492d1..0000000000 --- a/thrift/gen-cpp/reflection_types.h +++ /dev/null @@ -1,247 +0,0 @@ -/** - * Autogenerated by Thrift - * - * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING - * @generated SignedSource<> - */ -#ifndef reflection_TYPES_H -#define reflection_TYPES_H - -#include -#include -#include -#include - - -#include -#include - -namespace apache { namespace thrift { namespace reflection { - -enum Type { - TYPE_VOID = 0, - TYPE_STRING = 1, - TYPE_BOOL = 2, - TYPE_BYTE = 3, - TYPE_I16 = 4, - TYPE_I32 = 5, - TYPE_I64 = 6, - TYPE_DOUBLE = 7, - TYPE_ENUM = 8, - TYPE_LIST = 9, - TYPE_SET = 10, - TYPE_MAP = 11, - TYPE_STRUCT = 12, - TYPE_SERVICE = 13, - TYPE_PROGRAM = 14 -}; - -extern const std::map _Type_VALUES_TO_NAMES; - -extern const std::map _Type_NAMES_TO_VALUES; - -class StructField { - public: - - StructField() : isRequired(0), type(0), name("") { - } - - StructField(const StructField&) = default; - StructField& operator=(const StructField&) = default; - StructField(StructField&&) = default; - StructField& operator=(StructField&&) = default; - - void __clear() { - isRequired = 0; - type = 0; - name = ""; - annotations.clear(); - __isset.__clear(); - } - - virtual ~StructField() throw() {} - - bool isRequired; - int64_t type; - std::string name; - boost::container::flat_map annotations; - - struct __isset { - __isset() { __clear(); } - void __clear() { - isRequired = false; - type = false; - name = false; - annotations = false; - } - bool isRequired; - bool type; - bool name; - bool annotations; - } __isset; - - bool operator == (const StructField & rhs) const - { - if (!(this->isRequired == rhs.isRequired)) - return false; - if (!(this->type == rhs.type)) - return false; - if (!(this->name == rhs.name)) - return false; - if (__isset.annotations != rhs.__isset.annotations) - return false; - else if (__isset.annotations && !(annotations == rhs.annotations)) - return false; - return true; - } - bool operator != (const StructField &rhs) const { - return !(*this == rhs); - } - - bool operator < (const StructField & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class StructField; -void swap(StructField &a, StructField &b); - -class DataType { - public: - - DataType() : name(""), mapKeyType(0), valueType(0) { - } - - DataType(const DataType&) = default; - DataType& operator=(const DataType&) = default; - DataType(DataType&&) = default; - DataType& operator=(DataType&&) = default; - - void __clear() { - name = ""; - fields.clear(); - mapKeyType = 0; - valueType = 0; - enumValues.clear(); - __isset.__clear(); - } - - virtual ~DataType() throw() {} - - std::string name; - boost::container::flat_map fields; - int64_t mapKeyType; - int64_t valueType; - boost::container::flat_map enumValues; - - struct __isset { - __isset() { __clear(); } - void __clear() { - name = false; - fields = false; - mapKeyType = false; - valueType = false; - enumValues = false; - } - bool name; - bool fields; - bool mapKeyType; - bool valueType; - bool enumValues; - } __isset; - - bool operator == (const DataType & rhs) const - { - if (!(this->name == rhs.name)) - return false; - if (__isset.fields != rhs.__isset.fields) - return false; - else if (__isset.fields && !(fields == rhs.fields)) - return false; - if (__isset.mapKeyType != rhs.__isset.mapKeyType) - return false; - else if (__isset.mapKeyType && !(mapKeyType == rhs.mapKeyType)) - return false; - if (__isset.valueType != rhs.__isset.valueType) - return false; - else if (__isset.valueType && !(valueType == rhs.valueType)) - return false; - if (__isset.enumValues != rhs.__isset.enumValues) - return false; - else if (__isset.enumValues && !(enumValues == rhs.enumValues)) - return false; - return true; - } - bool operator != (const DataType &rhs) const { - return !(*this == rhs); - } - - bool operator < (const DataType & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class DataType; -void swap(DataType &a, DataType &b); - -class Schema { - public: - - Schema() { - } - - Schema(const Schema&) = default; - Schema& operator=(const Schema&) = default; - Schema(Schema&&) = default; - Schema& operator=(Schema&&) = default; - - void __clear() { - dataTypes.clear(); - names.clear(); - __isset.__clear(); - } - - virtual ~Schema() throw() {} - - std::unordered_map dataTypes; - std::unordered_map names; - - struct __isset { - __isset() { __clear(); } - void __clear() { - dataTypes = false; - names = false; - } - bool dataTypes; - bool names; - } __isset; - - bool operator == (const Schema & rhs) const - { - if (!(this->dataTypes == rhs.dataTypes)) - return false; - if (!(this->names == rhs.names)) - return false; - return true; - } - bool operator != (const Schema &rhs) const { - return !(*this == rhs); - } - - bool operator < (const Schema & ) const; - - uint32_t read(apache::thrift::protocol::TProtocol* iprot); - uint32_t write(apache::thrift::protocol::TProtocol* oprot) const; - -}; - -class Schema; -void swap(Schema &a, Schema &b); - -}}} // namespace - -#endif diff --git a/thrift/if/leveldb.thrift b/thrift/if/leveldb.thrift deleted file mode 100644 index 1768bb897c..0000000000 --- a/thrift/if/leveldb.thrift +++ /dev/null @@ -1,384 +0,0 @@ -#!/usr/local/bin/thrift --gen cpp - -namespace java Tleveldb -namespace cpp Tleveldb -namespace rb Tleveldb -namespace py Tleveldb -namespace perl Tleveldb - -// Types -typedef binary Text -typedef binary Bytes - -// A basic object needed for storing keys and values -struct Slice { - 1:Text data; - 2:i32 size -} - -// Different compression types supported -enum CompressionType { - kNoCompression = 0x0, - kSnappyCompression = 0x1 -} - -// Error codes -enum Code { - kOk = 0, - kNotFound = 1, - kCorruption = 2, - kNotSupported = 3, - kInvalidArgument = 4, - kIOError = 5, - kEnd = 6 -} - -// A range object -struct Range { - 1:Slice start; // Included in the range - 2:Slice limit // Not included in the range -} - -// Options to creating a database -struct DBOptions { - 1:bool create_if_missing; - 2:bool error_if_exists; - 3:i32 write_buffer_size; - 4:i32 max_open_files; - 5:i32 block_size; - 6:i32 block_restart_interval; - 7:CompressionType compression, - 8:i32 num_levels, - 9:i32 level0_file_num_compaction_trigger, - 10:i32 level0_slowdown_writes_trigger, - 11:i32 level0_stop_writes_trigger, - 12:i32 target_file_size_base, - 13:i32 target_file_size_multiplier, - 14:i32 max_bytes_for_level_base, - 15:i32 max_bytes_for_level_multiplier, - 16:i32 max_grandparent_overlap_factor, - 17:bool disableDataSync -} - -// Options for writing -struct WriteOptions { - 1:bool sync, - 2:bool disableWAL -} - -struct Snapshot { - 1:i64 snapshotid // server generated -} - -// Options for reading. If you do not have a -// snapshot, set snapshot.snapshotid = 0 -struct ReadOptions { - 1:bool verify_checksums; - 2:bool fill_cache, - 3:Snapshot snapshot -} - -// Represents a database object -struct DBHandle { - 1:Text dbname //name of the database -} - -struct Iterator { - 1:i64 iteratorid // server generated -} - -// flags for the iterator -enum IteratorType { - seekToFirst = 0, - seekToLast = 1, - seekToKey = 2 -} - -struct kv { - 1:Slice key; - 2:Slice value -} - -// Return a single value from the Get call -struct ResultItem { - 1:Code status; - 2:Slice value -} - -// Return a key,value from a Scan call -struct ResultPair { - 1:Code status; - 2:kv keyvalue -} - -// Snapshot result -struct ResultSnapshot { - 1:Code status; - 2:Snapshot snapshot -} - -// Iterator result -struct ResultIterator { - 1:Code status; - 2:Iterator iterator -} - -exception LeveldbException { - 1:Text message, - 2:Code errorCode -} - -// The Database service -service DB { - - // opens the database. The database name cannot have "/" - // in its name. - DBHandle Open(1:Text dbname, 2:DBOptions dboptions) - throws (1:LeveldbException se), - - // closes the database - Code Close(1:DBHandle dbhandle, 2:Text dbname), - - // puts a key in the database - Code Put(1:DBHandle dbhandle, 2:kv keyvalue, 3:WriteOptions options), - - // deletes a key from the database - Code Delete(1:DBHandle dbhandle, 2:Slice key, 3:WriteOptions options), - - // writes batch of keys into the database - Code Write(1:DBHandle dbhandle, 2:list batch, 3:WriteOptions options), - - // fetch a key from the DB. - // ResultItem.status == kNotFound means key is non existant - // ResultItem.status == kOk means key is found - ResultItem Get(1:DBHandle dbhandle, 2:Slice inputkey, - 3:ReadOptions options), - - // start iteration over a set of keys. If iteratorType.seekToFirst - // is set, then position the iterator at the first key in the source. - // If iteratorType.seekToLast is set, then position at the last key in the - // source. If iteratorType.seekToKey is set, then position at the first - // key in the source that is at or past target. - // If any two of iteratorType.seekToFirst & iteratorType.seekToLast - // and iteratorType.seekToKey are set, then error. - // If either iteratorType.seekToFirst or iteratorType.seekToLast is set, - // then target is not used. - ResultIterator NewIterator(1:DBHandle dbhandle, 2:ReadOptions options, - 3:IteratorType iteratorType, - 4:Slice target), - - // Release resources associated with an iterator allocated previously - // via a call to NewIterator. The call to this method may be skipped - // if the iterator had already traversed all the keys in the specified - // range. If the application wants to terminate a scan before processing - // all the resulting keys, then it is essential to invoke this method. - Code DeleteIterator(1:DBHandle dbhandle, 2:Iterator iterator), - - // Return the previous/next from this iteration - ResultPair GetNext(1:DBHandle dbhandle, 2:Iterator iterator), - ResultPair GetPrev(1:DBHandle dbhandle, 2:Iterator iterator), - - // Create snapshot. - ResultSnapshot GetSnapshot(1:DBHandle dbhandle), - - // Release snapshots - Code ReleaseSnapshot(1:DBHandle dbhandle, 2:Snapshot snapshot), - - // compact a range of keys - // begin.size == 0 to start at a range earlier than the first existing key - // end.size == 0 to end at a range later than the last existing key - Code CompactRange(1:DBHandle dbhandle, 2:Slice start, 3:Slice endhere), -} - -// ****************** FACEBOOK specific stuff ******************** - -// -// An IOError exception from an assoc operation -// -exception IOError { - 1:string message -} - -// -// Visibility state for assoc -// -enum AssocVisibility -{ - VISIBLE = 0, // live object, include in lookups and count - DELETED = 1, // exclude from lookup queries and count, ok to - // delete permanently from persistent store - UNUSED1 = 2, // not used - HIDDEN = 3, // exclude from lookup queries and count - UNUSED2 = 4, // not used - HARD_DELETE = 4 // deleted by calling expunge, will be swept - // as soon as possible -} - -/** - * Holds the assoc get result of a id2 - */ -struct TaoAssocGetResult { - /** id2 of assoc */ - 1:i64 id2, - - /** id1 type of assoc */ - 2:i64 id1Type, - - /** id2 type of assoc */ - 3:i64 id2Type, - - /** time stamp of the assoc */ - 4:i64 time, - - /** version of the data blob */ - 5:i64 dataVersion, - - /** serialized data of the asoc */ - 6:Text data, -} - -// -// Service -// -service AssocService { - - /** - * TAO Assoc Put operation. - * Note that currently the argument visibility has no effect. - * - * @if update_count is true, then return the updated count for this assoc - * @if update_count is false, then return 0 - * @return negative number if failure - */ - i64 taoAssocPut( - /** name of table */ - 1:Text tableName, - - /** type assoc */ - 2:i64 assocType, - - /** id1 of assoc */ - 3:i64 id1, - - /** id2 of assoc */ - 4:i64 id2, - - /** id1Type of assoc */ - 5:i64 id1Type, - - /** id2Type of assoc */ - 6:i64 id2Type, - - /** timestamp of assoc */ - 7:i64 timestamp, - - /** visibility */ - 8:AssocVisibility visibility, - - /** whether to keep the count or not */ - 9:bool update_count, - - /** version of the data blob */ - 10:i64 dataVersion, - - /** serialized data of assoc */ - 11:Text data, - - /** wormhole comment */ - 12:Text wormhole_comment - ) throws (1:IOError io) - - /** - * TAO Assoc Delete operation. - * - * @return the updated count for this assoc - */ - i64 taoAssocDelete( - /** name of table */ - 1:Text tableName, - - /** type assoc */ - 2:i64 assocType, - - /** id1 of assoc */ - 3:i64 id1, - - /** id2 of assoc */ - 4:i64 id2, - - /** visibility flag for this delete */ - 5:AssocVisibility visibility, - - /** whether to keep the count or not */ - 6:bool update_count, - - /** wormhole comment */ - 7:Text wormhole_comment - ) throws (1:IOError io) - - /** - * TAO Assoc RangeGet operation. - * Obtain assocs in bewteen start_time and end_time in reverse time order. - * The range check is inclusive: start_time >= time && time >= end_time. - * And yes, start_time >= end_time because this range scan is a backward - * scan in time, starting with most recent time and scanning backwards - * for the most recent n assocs. - */ - list taoAssocRangeGet( - /** name of table */ - 1:Text tableName, - - /** type of assoc */ - 2:i64 assocType, - - /** id1 of assoc */ - 3:i64 id1, - - /** maximum timestamp of assocs to retrieve */ - 4:i64 start_time, - - /** minimum timestamp of assocs to retrieve */ - 5:i64 end_time, - - /** number of assocs to skip from start */ - 6:i64 offset, - - /** max number of assocs (columns) returned */ - 7:i64 limit - ) throws (1:IOError io) - - /** - * TAO Assoc Get operation. - */ - list taoAssocGet( - /** name of table */ - 1:Text tableName, - - /** type of assoc */ - 2:i64 assocType, - - /** id1 of assoc */ - 3:i64 id1, - - /** list of id2 need to be fetch */ - 4:list id2s - ) throws (1:IOError io) - - /** - * TAO Assoc Count Get operation. - * Returns the number of assocs for given id1 and assoc type - */ - i64 taoAssocCount( - /** name of table */ - 1:Text tableName, - - /** type of assoc */ - 2:i64 assocType, - - /** id1 of assoc */ - 3:i64 id1, - - ) throws (1:IOError io) -} - - diff --git a/thrift/lib/cpp/ClientUtil.h b/thrift/lib/cpp/ClientUtil.h deleted file mode 100644 index 5772ce3796..0000000000 --- a/thrift/lib/cpp/ClientUtil.h +++ /dev/null @@ -1,229 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_CLIENTUTIL_H_ -#define THRIFT_CLIENTUTIL_H_ 1 - -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/transport/TSocket.h" -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" - -namespace apache { namespace thrift { namespace util { - -/* - * Versions that accept a host and port - */ - -template -ClientT* createClient(const std::string& host, uint16_t port) { - boost::shared_ptr socket( - new transport::TSocket(host, port)); - // We could specialize this to not create a wrapper transport when - // TransportT is TTransport or TSocket. However, everyone should always - // use a TFramedTransport or TBufferedTransport wrapper for performance - // reasons. - boost::shared_ptr transport(new TransportT(socket)); - boost::shared_ptr protocol( new ProtocolT(transport)); - transport->open(); - - return new ClientT(protocol); -} - -template -boost::shared_ptr createClientPtr(const std::string& host, - uint16_t port) { - return boost::shared_ptr( - createClient(host, port)); -} - -template -ClientT* createClient(const std::string& host, - uint16_t port, - bool useFramed = true) { - if (useFramed) { - return createClient( - host, port); - } else { - return createClient( - host, port); - } -} - -template -ClientT* createClient(const std::string& host, - uint16_t port, - bool useFramed = true) { - return createClient >( - host, port, useFramed); -} - -template -boost::shared_ptr createClientPtr(const std::string& host, - uint16_t port, - bool useFramed = true) { - return boost::shared_ptr( - createClient(host, port, useFramed)); -} - -template -boost::shared_ptr createClientPtr(const std::string& host, - uint16_t port, - bool useFramed = true) { - return boost::shared_ptr( - createClient(host, port, useFramed)); -} - -/* - * Versions that accept TSocketAddress - */ - -template -ClientT* createClient(const transport::TSocketAddress* address) { - boost::shared_ptr socket( - new transport::TSocket(address)); - // We could specialize this to not create a wrapper transport when - // TransportT is TTransport or TSocket. However, everyone should always - // use a TFramedTransport or TBufferedTransport wrapper for performance - // reasons. - boost::shared_ptr transport(new TransportT(socket)); - boost::shared_ptr protocol( new ProtocolT(transport)); - transport->open(); - - return new ClientT(protocol); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address) { - return boost::shared_ptr( - createClient(address)); -} - -template -ClientT* createClient(const transport::TSocketAddress* address, - bool useFramed = true) { - if (useFramed) { - return createClient( - address); - } else { - return createClient( - address); - } -} - -template -ClientT* createClient(const transport::TSocketAddress* address, - bool useFramed = true) { - return createClient >( - address, useFramed); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address, - bool useFramed = true) { - return boost::shared_ptr( - createClient(address, useFramed)); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address, - bool useFramed = true) { - return boost::shared_ptr( - createClient(address, useFramed)); -} - -/* - * Versions that accept TSocketAddress and socket options - */ - -template -ClientT* createClient(const transport::TSocketAddress* address, - const transport::TSocket::Options& options) { - boost::shared_ptr socket( - new transport::TSocket(address)); - socket->setSocketOptions(options); - - // We could specialize this to not create a wrapper transport when - // TransportT is TTransport or TSocket. However, everyone should always - // use a TFramedTransport or TBufferedTransport wrapper for performance - // reasons. - boost::shared_ptr transport(new TransportT(socket)); - boost::shared_ptr protocol( new ProtocolT(transport)); - transport->open(); - - return new ClientT(protocol); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address, - const transport::TSocket::Options& options) { - - return boost::shared_ptr( - createClient(address), options); -} - -template -ClientT* createClient(const transport::TSocketAddress* address, - const transport::TSocket::Options& options, - bool useFramed = true) { - if (useFramed) { - return createClient( - address, options); - } else { - return createClient( - address, options); - } -} - -template -ClientT* createClient(const transport::TSocketAddress* address, - const transport::TSocket::Options& options, - bool useFramed = true - ) { - return createClient >( - address, options, useFramed); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address, - const transport::TSocket::Options& options, - bool useFramed = true) { - return boost::shared_ptr( - createClient(address, options, useFramed)); -} - -template -boost::shared_ptr createClientPtr( - const transport::TSocketAddress* address, - const transport::TSocket::Options& options, - bool useFramed = true) { - return boost::shared_ptr( - createClient(address, options, useFramed)); -} - - -}}} // apache::thrift::util - -#endif // THRIFT_CLIENTUTIL_H_ diff --git a/thrift/lib/cpp/EventHandlerBase.h b/thrift/lib/cpp/EventHandlerBase.h deleted file mode 100644 index 241940b8a7..0000000000 --- a/thrift/lib/cpp/EventHandlerBase.h +++ /dev/null @@ -1,322 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_EVENTHANDLERBASE_H_ -#define THRIFT_EVENTHANDLERBASE_H_ 1 - -#include -#include -#include -#include "thrift/lib/cpp/server/TConnectionContext.h" -#include - -namespace apache { namespace thrift { - -using server::TConnectionContext; - -/** - * Virtual interface class that can handle events from the processor. To - * use this you should subclass it and implement the methods that you care - * about. Your subclass can also store local data that you may care about, - * such as additional "arguments" to these methods (stored in the object - * instance's state). - */ -class TProcessorEventHandler { - public: - - virtual ~TProcessorEventHandler() {} - - /** - * Called before calling other callback methods. - * Expected to return some sort of context object. - * The return value is passed to all other callbacks - * for that function invocation. - */ - virtual void* getContext(const char* fn_name, - TConnectionContext* connectionContext) { - return NULL; - } - - /** - * Expected to free resources associated with a context. - */ - virtual void freeContext(void* ctx, const char* fn_name) { } - - /** - * Called before reading arguments. - */ - virtual void preRead(void* ctx, const char* fn_name) {} - - /** - * Called between reading arguments and calling the handler. - */ - virtual void postRead(void* ctx, const char* fn_name, uint32_t bytes) {} - - /** - * Called between calling the handler and writing the response. - */ - virtual void preWrite(void* ctx, const char* fn_name) {} - - /** - * Called after writing the response. - */ - virtual void postWrite(void* ctx, const char* fn_name, uint32_t bytes) {} - - /** - * Called when an async function call completes successfully. - */ - virtual void asyncComplete(void* ctx, const char* fn_name) {} - - /** - * Called if the handler throws an undeclared exception. - */ - virtual void handlerError(void* ctx, const char* fn_name) {} - - protected: - TProcessorEventHandler() {} -}; - -/** - * A helper class used by the generated code to free each context. - */ -class TProcessorContextFreer { - public: - TProcessorContextFreer(boost::shared_ptr handler, - void* context, const char* method) : - handler_(handler), context_(context), method_(method) {} - ~TProcessorContextFreer() { - if (handler_ != NULL) { - handler_->freeContext(context_, method_); - } - } - - void unregister() { handler_.reset(); } - - private: - boost::shared_ptr handler_; - void* context_; - const char* method_; -}; - -class ContextStack { - friend class EventHandlerBase; - - public: - ContextStack( - const std::vector>& handlers, - const char* method, - TConnectionContext* connectionContext) - : handlers_(handlers) - , method_(method) { - for (auto handler: handlers) { - ctxs.push_back(handler->getContext(method, connectionContext)); - } - } - - ~ContextStack() { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->freeContext(ctxs[i], method_); - } - } - - private: - std::vector ctxs; - std::vector> handlers_; - const char* method_; -}; - -class EventHandlerBase { - public: - EventHandlerBase() - : setEventHandlerPos_(-1) {} - - EventHandlerBase(const EventHandlerBase& original) - : handlers_(original.handlers_), - eventHandler_(original.eventHandler_), - setEventHandlerPos_(original.setEventHandlerPos_), - s_() {} - - void addEventHandler( - const boost::shared_ptr& handler) { - handlers_.push_back(handler); - } - - void clearEventHandlers() { - handlers_.clear(); - setEventHandlerPos_ = -1; - if (eventHandler_) { - setEventHandler(eventHandler_); - } - } - - boost::shared_ptr getEventHandler() { - return eventHandler_; - } - - void setEventHandler(boost::shared_ptr eventHandler) { - eventHandler_ = eventHandler; - if (setEventHandlerPos_ > 0) { - handlers_.erase(handlers_.begin() + setEventHandlerPos_); - } - setEventHandlerPos_ = handlers_.size(); - handlers_.push_back(eventHandler); - } - - /** - * These functions are only used in the client handler - * implementation. The server process functions maintain - * ContextStack on the stack and binds ctx in to the async calls. - * - * Clients are not thread safe, so using a member variable is okay. - * Client send_ and recv_ functions contain parameters based off of - * the function call, and adding a parameter there would change the - * function signature enough that other thrift users might break. - * - * The generated code should be the ONLY user of s_. All other functions - * should just use the ContextStack parameter. - */ - void generateClientContextStack(const char* fn_name, - TConnectionContext* connectionContext) { - auto s = getContextStack(fn_name, connectionContext); - s_ = std::move(s); - } - - void clearClientContextStack() { - s_.reset(); - } - - ContextStack* getClientContextStack() { - return s_.get(); - } - - protected: - std::unique_ptr getContextStack( - const char* fn_name, - TConnectionContext* connectionContext) { - std::unique_ptr ctx( - new ContextStack(handlers_, fn_name, connectionContext)); - return ctx; - } - - void preWrite(ContextStack* s, const char* fn_name) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->preWrite(s->ctxs[i], fn_name); - } - } - } - - void postWrite(ContextStack* s, const char* fn_name, - uint32_t bytes) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->postWrite(s->ctxs[i], fn_name, bytes); - } - } - } - - void preRead(ContextStack* s, const char* fn_name) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->preRead(s->ctxs[i], fn_name); - } - } - } - - void postRead(ContextStack* s, const char* fn_name, - uint32_t bytes) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->postRead(s->ctxs[i], fn_name, bytes); - } - } - } - - void handlerError(ContextStack* s, const char* fn_name) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->handlerError(s->ctxs[i], fn_name); - } - } - } - - void asyncComplete(ContextStack* s, const char* fn_name) { - if (s) { - for (size_t i = 0; i < handlers_.size(); i++) { - handlers_[i]->asyncComplete(s->ctxs[i], fn_name); - } - } - } - - public: - std::vector> handlers_; - boost::shared_ptr eventHandler_; - - private: - int setEventHandlerPos_; - std::unique_ptr s_; - -}; - -class TProcessorEventHandlerFactory { - public: - virtual boost::shared_ptr getEventHandler() = 0; -}; - -/** - * Base class for all thrift processors. Used to automatically attach event - * handlers to processors at creation time. - */ -class TProcessorBase : public EventHandlerBase { - public: - TProcessorBase(); - - static void addProcessorEventHandlerFactory( - boost::shared_ptr factory); - - static void removeProcessorEventHandlerFactory( - boost::shared_ptr factory); - - private: - static std::vector> - registeredHandlerFactories_; -}; - -/** - * Base class for all thrift clients. Used to automatically attach event - * handlers to clients at creation time. - */ -class TClientBase : public EventHandlerBase { - public: - TClientBase(); - - static void addClientEventHandlerFactory( - boost::shared_ptr factory); - - static void removeClientEventHandlerFactory( - boost::shared_ptr factory); - - private: - static std::vector> - registeredHandlerFactories_; -}; - -}} // apache::thrift - -#endif // #ifndef THRIFT_EVENTHANDLERBASE_H_ diff --git a/thrift/lib/cpp/README b/thrift/lib/cpp/README deleted file mode 100644 index 576d017027..0000000000 --- a/thrift/lib/cpp/README +++ /dev/null @@ -1,67 +0,0 @@ -Thrift C++ Software Library - -License -======= - -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you 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. - -Using Thrift with C++ -===================== - -The Thrift C++ libraries are built using the GNU tools. Follow the instructions -in the top-level README, or run bootstrap.sh in this folder to generate the -Makefiles. - -In case you do not want to open another README file, do this: - ./bootstrap.sh - ./configure (--with-boost=/usr/local) - make - sudo make install - -Thrift is divided into two libraries. - -libthrift - The core Thrift library contains all the core Thrift code. It requires - boost shared pointers, pthreads, and librt. - -libthriftnb - This library contains the Thrift nonblocking server, which uses libevent. - To link this library you will also need to link libevent. - -Linking Against Thrift -====================== - -After you build and install Thrift the libraries are installed to -/usr/local/lib by default. Make sure this is in your LDPATH. - -On Linux, the best way to do this is to ensure that /usr/local/lib is in -your /etc/ld.so.conf and then run /sbin/ldconfig. - -Depending upon whether you are linking dynamically or statically and how -your build environment it set up, you may need to include additional -libraries when linking against thrift, such as librt and/or libpthread. If -you are using libthriftnb you will also need libevent. - -Dependencies -============ - -boost shared pointers -http://www.boost.org/libs/smart_ptr/smart_ptr.htm - -libevent (for libthriftnb only) -http://monkey.org/~provos/libevent/ diff --git a/thrift/lib/cpp/Reflection.h b/thrift/lib/cpp/Reflection.h deleted file mode 100644 index bbe04095a0..0000000000 --- a/thrift/lib/cpp/Reflection.h +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_REFLECTION_H_ -#define THRIFT_LIB_CPP_REFLECTION_H_ - -#include -#include - -#include "reflection_types.h" - -namespace apache { -namespace thrift { -namespace reflection { - -namespace detail { -const size_t kTypeBits = 5; -const uint64_t kTypeMask = (1ULL << kTypeBits) - 1; -} // namespace detail - -inline int64_t makeTypeId(Type type, uint64_t hash) { - return static_cast((hash & ~detail::kTypeMask) | type); -} - -inline Type getType(int64_t typeId) { - return static_cast(typeId & detail::kTypeMask); -} - -inline bool isBaseType(Type type) { - return type <= TYPE_DOUBLE; -} - -} // namespace reflection -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_REFLECTION_H_ */ - diff --git a/thrift/lib/cpp/TApplicationException.h b/thrift/lib/cpp/TApplicationException.h deleted file mode 100644 index 8350471e0e..0000000000 --- a/thrift/lib/cpp/TApplicationException.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TAPPLICATIONEXCEPTION_H_ -#define _THRIFT_TAPPLICATIONEXCEPTION_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" - - -namespace apache { namespace thrift { - -namespace protocol { - class TProtocol; -} - -/** - * This class is thrown when some high-level communication errors with - * the remote peer occur, and also when a server throws an unexpected - * exception from a handler method. Because of the latter case, this - * class can be serialized. - */ -class TApplicationException : public TException { - public: - - /** - * Error codes for the various types of exceptions. - */ - enum TApplicationExceptionType - { UNKNOWN = 0 - , UNKNOWN_METHOD = 1 - , INVALID_MESSAGE_TYPE = 2 - , WRONG_METHOD_NAME = 3 - , BAD_SEQUENCE_ID = 4 - , MISSING_RESULT = 5 - , INVALID_TRANSFORM = 6 - , INVALID_PROTOCOL = 7 - , UNSUPPORTED_CLIENT_TYPE = 8 - }; - - - TApplicationException() : - type_(UNKNOWN) {} - - TApplicationException(TApplicationExceptionType type) : - type_(type) {} - - TApplicationException(const std::string& message) : - message_(message), - type_(UNKNOWN) {} - - TApplicationException(TApplicationExceptionType type, - const std::string& message) : - message_(message), - type_(type) {} - - virtual ~TApplicationException() throw() {} - - /** - * Returns an error code that provides information about the type of error - * that has occurred. - * - * @return Error code - */ - TApplicationExceptionType getType() { - return type_; - } - - virtual const char* what() const throw() { - if (message_.empty()) { - switch (type_) { - case UNKNOWN : return "TApplicationException: Unknown application exception"; - case UNKNOWN_METHOD : return "TApplicationException: Unknown method"; - case INVALID_MESSAGE_TYPE : return "TApplicationException: Invalid message type"; - case WRONG_METHOD_NAME : return "TApplicationException: Wrong method name"; - case BAD_SEQUENCE_ID : return "TApplicationException: Bad sequence identifier"; - case MISSING_RESULT : return "TApplicationException: Missing result"; - case INVALID_TRANSFORM : - return "TApplicationException: Invalid transform"; - case INVALID_PROTOCOL : - return "TApplicationException: Invalid protocol"; - case UNSUPPORTED_CLIENT_TYPE: - return "TApplicationException: Unsupported client type"; - default : return "TApplicationException: (Invalid exception type)"; - }; - } else { - return message_.c_str(); - } - } - - uint32_t read(protocol::TProtocol* iprot); - uint32_t write(protocol::TProtocol* oprot) const; - - protected: - std::string message_; - - /** - * Error code - */ - TApplicationExceptionType type_; - -}; - -}} // apache::thrift - -#endif // #ifndef _THRIFT_TAPPLICATIONEXCEPTION_H_ diff --git a/thrift/lib/cpp/TDispatchProcessor.h b/thrift/lib/cpp/TDispatchProcessor.h deleted file mode 100644 index 22c54b259c..0000000000 --- a/thrift/lib/cpp/TDispatchProcessor.h +++ /dev/null @@ -1,145 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef _THRIFT_TDISPATCHPROCESSOR_H_ -#define _THRIFT_TDISPATCHPROCESSOR_H_ 1 - -#include "thrift/lib/cpp/TProcessor.h" - -namespace apache { namespace thrift { - -using server::TConnectionContext; - -/** - * TDispatchProcessor is a helper class to parse the message header then call - * another function to dispatch based on the function name. - * - * Subclasses must implement dispatchCall() to dispatch on the function name. - */ -template -class TDispatchProcessorT : public TProcessor { - public: - virtual bool process(boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* connectionContext) { - protocol::TProtocol* inRaw = in.get(); - protocol::TProtocol* outRaw = out.get(); - - // Try to dynamic cast to the template protocol type - Protocol_* specificIn = dynamic_cast(inRaw); - Protocol_* specificOut = dynamic_cast(outRaw); - if (specificIn && specificOut) { - return processFast(specificIn, specificOut, connectionContext); - } - - // Log the fact that we have to use the slow path - T_GENERIC_PROTOCOL(this, inRaw, specificIn); - T_GENERIC_PROTOCOL(this, outRaw, specificOut); - - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - inRaw->readMessageBegin(fname, mtype, seqid); - - // If this doesn't look like a valid call, log an error and return false so - // that the server will close the connection. - // - // (The old generated processor code used to try to skip a T_STRUCT and - // continue. However, that seems unsafe.) - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - return false; - } - - return this->dispatchCall(inRaw, outRaw, fname, seqid, connectionContext); - } - - protected: - bool processFast(Protocol_* in, Protocol_* out, - TConnectionContext* connectionContext) { - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - in->readMessageBegin(fname, mtype, seqid); - - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - return false; - } - - return this->dispatchCallTemplated(in, out, fname, - seqid, connectionContext); - } - - /** - * dispatchCall() methods must be implemented by subclasses - */ - virtual bool dispatchCall(apache::thrift::protocol::TProtocol* in, - apache::thrift::protocol::TProtocol* out, - const std::string& fname, int32_t seqid, - TConnectionContext* connectionContext) = 0; - - virtual bool dispatchCallTemplated(Protocol_* in, Protocol_* out, - const std::string& fname, int32_t seqid, - TConnectionContext* connectionContext) = 0; -}; - -/** - * Non-templatized version of TDispatchProcessor, that doesn't bother trying to - * perform a dynamic_cast. - */ -class TDispatchProcessor : public TProcessor { - public: - virtual bool process(boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* connectionContext) { - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - in->readMessageBegin(fname, mtype, seqid); - - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - return false; - } - - return dispatchCall(in.get(), out.get(), fname, seqid, connectionContext); - } - - protected: - virtual bool dispatchCall(apache::thrift::protocol::TProtocol* in, - apache::thrift::protocol::TProtocol* out, - const std::string& fname, int32_t seqid, - TConnectionContext* connectionContext) = 0; -}; - -// Specialize TDispatchProcessorT for TProtocol and TDummyProtocol just to use -// the generic TDispatchProcessor. -template <> -class TDispatchProcessorT : - public TDispatchProcessor {}; -template <> -class TDispatchProcessorT : - public TDispatchProcessor {}; - -}} // apache::thrift - -#endif // _THRIFT_TDISPATCHPROCESSOR_H_ diff --git a/thrift/lib/cpp/TLogging.h b/thrift/lib/cpp/TLogging.h deleted file mode 100644 index 3f591cbb63..0000000000 --- a/thrift/lib/cpp/TLogging.h +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TLOGGING_H -#define THRIFT_TLOGGING_H 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include "thrift/lib/cpp/concurrency/Util.h" - -#include - -/** - * Contains utility macros for debugging and logging. - * - */ - -#ifdef THRIFT_HAVE_CLOCK_GETTIME -#include -#endif -#include - -#ifdef THRIFT_HAVE_STDINT_H -#include -#endif - -/** - * T_GLOBAL_DEBUGGING_LEVEL = 0: all debugging turned off, debug macros undefined - * T_GLOBAL_DEBUGGING_LEVEL = 1: all debugging turned on - */ -#ifndef T_GLOBAL_DEBUGGING_LEVEL -#define T_GLOBAL_DEBUGGING_LEVEL 0 -#endif - -/** - * T_GLOBAL_LOGGING_LEVEL = 0: all logging turned off, logging macros undefined - * T_GLOBAL_LOGGING_LEVEL = 1: all logging turned on - */ -#define T_GLOBAL_LOGGING_LEVEL 1 - -/** - * Standard wrapper around fprintf what will prefix the file name and line - * number to the line. Uses T_GLOBAL_DEBUGGING_LEVEL to control whether it is - * turned on or off. - * - * @param format_string - */ -#define T_DEBUG(format_string,...) \ - T_DEBUG_L(0, format_string, ##__VA_ARGS__) - -#define COMPUTE_TIME \ - int64_t nowMs = apache::thrift::concurrency::Util::currentTime(); \ - time_t nowSec = (time_t) (nowMs / 1000); \ - nowMs -= nowSec * 1000; \ - int ms = (int)nowMs; \ - char dbgtime[26]; \ - ctime_r(&nowSec, dbgtime); \ - dbgtime[24] = '\0'; - -/** - * analogous to T_DEBUG but also prints the time - * - * @param string format_string input: printf style format string - */ -#define T_DEBUG_T(format_string,...) \ - do { \ - if (T_GLOBAL_DEBUGGING_LEVEL > 0) { \ - COMPUTE_TIME \ - fprintf(stderr, "[%s,%d] [%s, %d ms] " format_string " \n", \ - __FILE__, __LINE__, dbgtime, ms, \ - ##__VA_ARGS__); \ - } \ - } while(0) - - -/** - * analogous to T_DEBUG but uses input level to determine whether or not the string - * should be logged. - * - * @param int level: specified debug level - * @param string format_string input: format string - */ -#define T_DEBUG_L(level, format_string, ...) \ - do { \ - if (T_GLOBAL_DEBUGGING_LEVEL > (level)) { \ - COMPUTE_TIME \ - fprintf(stderr, "[%s,%d] [%s, %d ms] " format_string " \n", \ - __FILE__, __LINE__, dbgtime, ms, ##__VA_ARGS__); \ - } \ - } while (0) - - -/** - * Explicit error logging. Prints time, file name and line number - * - * @param string format_string input: printf style format string - */ -#define T_ERROR(format_string,...) \ - { \ - COMPUTE_TIME \ - fprintf(stderr,"[%s,%d] [%s, %d ms] ERROR: " format_string " \n", \ - __FILE__, __LINE__,dbgtime, ms, \ - ##__VA_ARGS__); \ - } - - -/** - * Analogous to T_ERROR, additionally aborting the process. - * WARNING: macro calls abort(), ending program execution - * - * @param string format_string input: printf style format string - */ -#define T_ERROR_ABORT(format_string,...) \ - { \ - COMPUTE_TIME \ - fprintf(stderr,"[%s,%d] [%s, %d ms] ERROR: Going to abort " \ - format_string " \n", \ - __FILE__, __LINE__,dbgtime, ms, \ - ##__VA_ARGS__); \ - exit(1); \ - } - - -/** - * Log input message - * - * @param string format_string input: printf style format string - */ -#if T_GLOBAL_LOGGING_LEVEL > 0 - #define T_LOG_OPER(format_string,...) \ - { \ - if (T_GLOBAL_LOGGING_LEVEL > 0) { \ - COMPUTE_TIME \ - fprintf(stderr,"[%s, %d ms] " format_string " \n", \ - dbgtime, ms, ##__VA_ARGS__); \ - } \ - } -#else - #define T_LOG_OPER(format_string,...) -#endif - - -/** - * T_GLOBAL_DEBUG_VIRTUAL = 0 or unset: normal operation, - * virtual call debug messages disabled - * T_GLOBAL_DEBUG_VIRTUAL = 1: log a debug messages whenever an - * avoidable virtual call is made - * T_GLOBAL_DEBUG_VIRTUAL = 2: record detailed info that can be - * printed by calling - * apache::thrift::profile_print_info() - */ -#if T_GLOBAL_DEBUG_VIRTUAL > 1 - #define T_VIRTUAL_CALL() \ - ::apache::thrift::profile_virtual_call(typeid(*this)) - #define T_GENERIC_PROTOCOL(template_class, generic_prot, specific_prot) \ - do { \ - if (!(specific_prot)) { \ - ::apache::thrift::profile_generic_protocol( \ - typeid(*template_class), typeid(*generic_prot)); \ - } \ - } while (0) -#elif T_GLOBAL_DEBUG_VIRTUAL == 1 - #define T_VIRTUAL_CALL() \ - fprintf(stderr,"[%s,%d] virtual call\n", __FILE__, __LINE__) - #define T_GENERIC_PROTOCOL(template_class, generic_prot, specific_prot) \ - do { \ - if (!(specific_prot)) { \ - fprintf(stderr, \ - "[%s,%d] failed to cast to specific protocol type\n", \ - __FILE__, __LINE__); \ - } \ - } while (0) -#else - #define T_VIRTUAL_CALL() - #define T_GENERIC_PROTOCOL(template_class, generic_prot, specific_prot) -#endif - -#endif // #ifndef THRIFT_TLOGGING_H diff --git a/thrift/lib/cpp/TProcessor.h b/thrift/lib/cpp/TProcessor.h deleted file mode 100644 index f54cbea61f..0000000000 --- a/thrift/lib/cpp/TProcessor.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TPROCESSOR_H_ -#define THRIFT_TPROCESSOR_H_ 1 - -#include -#include -#include "thrift/lib/cpp/EventHandlerBase.h" -#include "thrift/lib/cpp/server/TConnectionContext.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include - -namespace apache { namespace thrift { - -/** - * A processor is a generic object that acts upon two streams of data, one - * an input and the other an output. The definition of this object is loose, - * though the typical case is for some sort of server that either generates - * responses to an input stream or forwards data from one pipe onto another. - * - */ -class TProcessor : public TProcessorBase { - public: - virtual ~TProcessor() {} - - virtual bool process(boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* connectionContext) = 0; - - bool process(boost::shared_ptr io, - TConnectionContext* connectionContext) { - return process(io, io, connectionContext); - } - - protected: - TProcessor() {} -}; - -class TProcessorFactory { - public: - virtual ~TProcessorFactory() {} - - /** - * Get the TProcessor to use for a particular connection. - * - * This method is always invoked in the same thread that the connection was - * accepted on. This generally means that this call does not need to be - * thread safe, as it will always be invoked from a single thread. - */ - virtual boost::shared_ptr getProcessor( - server::TConnectionContext* ctx) = 0; -}; - -class TSingletonProcessorFactory : public TProcessorFactory { - public: - explicit TSingletonProcessorFactory( - const boost::shared_ptr& processor) : - processor_(processor) {} - - boost::shared_ptr getProcessor(server::TConnectionContext*) { - return processor_; - } - - boost::shared_ptr getProcessor() { - return processor_; - } - - private: - boost::shared_ptr processor_; -}; - -/** - * This is a helper class to allow boost::shared_ptr to be used with handler - * pointers returned by the generated handler factories. - * - * The handler factory classes generated by the thrift compiler return raw - * pointers, and factory->releaseHandler() must be called when the handler is - * no longer needed. - * - * A ReleaseHandler object can be instantiated and passed as the second - * parameter to a shared_ptr, so that factory->releaseHandler() will be called - * when the object is no longer needed, instead of deleting the pointer. - */ -template -class ReleaseHandler { - public: - explicit ReleaseHandler( - const boost::shared_ptr& handlerFactory) : - handlerFactory_(handlerFactory) {} - - void operator()(typename HandlerFactory_::Handler* handler) { - if (handler) { - handlerFactory_->releaseHandler(handler); - } - } - - private: - boost::shared_ptr handlerFactory_; -}; - -}} // apache::thrift - -#endif // #ifndef THRIFT_TPROCESSOR_H_ diff --git a/thrift/lib/cpp/TReflectionLocal.h b/thrift/lib/cpp/TReflectionLocal.h deleted file mode 100644 index d621f5c9e4..0000000000 --- a/thrift/lib/cpp/TReflectionLocal.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TREFLECTIONLOCAL_H_ -#define _THRIFT_TREFLECTIONLOCAL_H_ 1 - -#include -#include -#include "thrift/lib/cpp/protocol/TProtocol.h" - -/** - * Local Reflection is a blanket term referring to the the structure - * and generation of this particular representation of Thrift types. - * (It is called local because it cannot be serialized by Thrift). - * - */ - -namespace apache { namespace thrift { namespace reflection { namespace local { - -using apache::thrift::protocol::TType; - -// We include this many bytes of the structure's fingerprint when serializing -// a top-level structure. Long enough to make collisions unlikely, short -// enough to not significantly affect the amount of memory used. -const int FP_PREFIX_LEN = 4; - -struct FieldMeta { - int16_t tag; - bool is_optional; -}; - -struct TypeSpec { - TType ttype; - uint8_t fp_prefix[FP_PREFIX_LEN]; - - // Use an anonymous union here so we can fit two TypeSpecs in one cache line. - union { - struct { - // Use parallel arrays here for denser packing (of the arrays). - FieldMeta* metas; - TypeSpec** specs; - } tstruct; - struct { - TypeSpec *subtype1; - TypeSpec *subtype2; - } tcontainer; - }; - - // Static initialization of unions isn't really possible, - // so take the plunge and use constructors. - // Hopefully they'll be evaluated at compile time. - - TypeSpec(TType ttype) : ttype(ttype) { - std::memset(fp_prefix, 0, FP_PREFIX_LEN); - } - - TypeSpec(TType ttype, - const uint8_t* fingerprint, - FieldMeta* metas, - TypeSpec** specs) : - ttype(ttype) - { - std::memcpy(fp_prefix, fingerprint, FP_PREFIX_LEN); - tstruct.metas = metas; - tstruct.specs = specs; - } - - TypeSpec(TType ttype, TypeSpec* subtype1, TypeSpec* subtype2) : - ttype(ttype) - { - std::memset(fp_prefix, 0, FP_PREFIX_LEN); - tcontainer.subtype1 = subtype1; - tcontainer.subtype2 = subtype2; - } - -}; - -}}}} // apache::thrift::reflection::local - -#endif // #ifndef _THRIFT_TREFLECTIONLOCAL_H_ diff --git a/thrift/lib/cpp/Thrift.h b/thrift/lib/cpp/Thrift.h deleted file mode 100644 index b3adaacff0..0000000000 --- a/thrift/lib/cpp/Thrift.h +++ /dev/null @@ -1,283 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_THRIFT_H_ -#define THRIFT_THRIFT_H_ - -#include "thrift/lib/cpp/thrift_config.h" -#include -#include - -#include -#include -#ifdef THRIFT_HAVE_INTTYPES_H -#include -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include "thrift/lib/cpp/TLogging.h" - -namespace apache { namespace thrift { - -struct ltstr { - bool operator()(const char* s1, const char* s2) const { - return strcmp(s1, s2) < 0; - } -}; - -/** - * Helper template class for enum<->string conversion. - */ -template -struct TEnumTraits { - /** - * Finds the name of a given enum value, returning it or NULL on failure. - * Specialized implementations will be emitted as part of enum codegen. - * - * Example specialization: - * template<> - * const char* TEnumTraits::findName(MyEnum value) { - * return findName(_MyEnum_VALUES_TO_NAMES, value); - * } - * Note the use of helper function 'findName(...)', below. - */ - static const char* findName(T value); - /** - * Attempts to find a value for a given name. - * Specialized implementations will be emitted as part of enum codegen. - * - * Example implementation: - * template<> - * bool TEnumTraits::findValue(const char* name, - * MyEnum* outValue) { - * return findValue(_MyEnum_NAMES_TO_VALUES, name, outValue); - * } - * Note the use of helper function 'findValue(...)', below. - */ - static bool findValue(const char* name, T* outValue); - - /** - * Return the minimum value. - */ - static constexpr T min(); - - /** - * Return the maximum value. - */ - static constexpr T max(); - private: - /** - * Helper method used by codegen implementation of findName, Supports - * use with strict and non-strict enums by way of template parameter - * 'ValueType'. - */ - template - static const char* findName(const std::map& map, - T value) { - auto found = map.find(value); - if (found == map.end()) { - return NULL; - } else { - return found->second; - } - } - - /** - * Helper method used by codegen implementation of findValue, Supports - * use with strict and non-strict enums by way of template parameter - * 'ValueType'. - */ - template - static bool findValue(const std::map& map, - const char* name, T* out) { - auto found = map.find(name); - if (found == map.end()) { - return false; - } else { - *out = static_cast(found->second); - return true; - } - } -}; - -template -class TEnumIterator : public std::map::iterator { - public: - TEnumIterator(int n, - T* enums, - const char** names) : - ii_(0), n_(n), enums_(enums), names_(names) { - } - - int operator ++() { - return ++ii_; - } - - bool operator !=(const TEnumIterator& end) { - assert(end.n_ == -1); - return (ii_ != n_); - } - - std::pair operator*() const { - return std::make_pair(enums_[ii_], names_[ii_]); - } - - private: - int ii_; - const int n_; - T* enums_; - const char** names_; -}; - -template -class TEnumInverseIterator : public std::map::iterator { - public: - TEnumInverseIterator(int n, - T* enums, - const char** names) : - ii_(0), n_(n), enums_(enums), names_(names) { - } - - int operator ++() { - return ++ii_; - } - - bool operator !=(const TEnumInverseIterator& end) { - assert(end.n_ == -1); - return (ii_ != n_); - } - - std::pair operator*() const { - return std::make_pair(names_[ii_], enums_[ii_]); - } - - private: - int ii_; - const int n_; - T* enums_; - const char** names_; -}; - -class TOutput { - public: - TOutput() : f_(&errorTimeWrapper) {} - - inline void setOutputFunction(void (*function)(const char *)){ - f_ = function; - } - - inline void operator()(const char *message){ - f_(message); - } - - // It is important to have a const char* overload here instead of - // just the string version, otherwise errno could be corrupted - // if there is some problem allocating memory when constructing - // the string. - void perror(const char *message, int errno_copy); - inline void perror(const std::string &message, int errno_copy) { - perror(message.c_str(), errno_copy); - } - - void printf(const char *message, ...); - - inline static void errorTimeWrapper(const char* msg) { - time_t now; - char dbgtime[26]; - time(&now); - ctime_r(&now, dbgtime); - dbgtime[24] = 0; - fprintf(stderr, "Thrift: %s %s\n", dbgtime, msg); - } - - /** Just like strerror_r but returns a C++ string object. */ - static std::string strerror_s(int errno_copy); - - private: - void (*f_)(const char *); -}; - -extern TOutput GlobalOutput; - -/** - * Base class for all Thrift exceptions. - * Should never be instantiated, only caught. - */ -class TException : public std::exception { -public: - TException() {} - TException(TException&&) {} - TException(const TException&) {} - TException& operator=(const TException&) { return *this; } - TException& operator=(TException&&) { return *this; } -}; - -/** - * Base class for exceptions from the Thrift library, and occasionally - * from the generated code. This class should not be thrown by user code. - * Instances of this class are not meant to be serialized. - */ -class TLibraryException : public TException { - public: - TLibraryException() {} - - explicit TLibraryException(const std::string& message) : - message_(message) {} - - TLibraryException(const char* message, int errnoValue); - - virtual ~TLibraryException() throw() {} - - virtual const char* what() const throw() { - if (message_.empty()) { - return "Default TLibraryException."; - } else { - return message_.c_str(); - } - } - - protected: - std::string message_; - -}; - -#if T_GLOBAL_DEBUG_VIRTUAL > 1 -void profile_virtual_call(const std::type_info& info); -void profile_generic_protocol(const std::type_info& template_type, - const std::type_info& prot_type); -void profile_print_info(FILE *f); -void profile_print_info(); -void profile_write_pprof(FILE* gen_calls_f, FILE* virtual_calls_f); -#endif - -template -inline void reallyClear(ThriftContainer& container) { - ThriftContainer emptyContainer; - swap(container, emptyContainer); -} - -}} // apache::thrift - -#endif // #ifndef THRIFT_THRIFT_H_ diff --git a/thrift/lib/cpp/async/SimpleCallback.h b/thrift/lib/cpp/async/SimpleCallback.h deleted file mode 100644 index 00551e2469..0000000000 --- a/thrift/lib/cpp/async/SimpleCallback.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef _THRIFT_ASYNC_SIMPLECALLBACK_H_ -#define _THRIFT_ASYNC_SIMPLECALLBACK_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -namespace apache { namespace thrift { - -/** - * A template class for forming simple method callbacks with either an empty - * argument list or one argument of known type. - * - * For more efficiency where tr1::function is overkill. - */ - -template ///< type of return value -class SimpleCallback { - typedef R (C::*cfptr_t)(A); ///< pointer-to-member-function type - cfptr_t fptr_; ///< the embedded function pointer - C* obj_; ///< object whose function we're wrapping - public: - /** - * Constructor for empty callback object. - */ - SimpleCallback() : - fptr_(NULL), obj_(NULL) {} - /** - * Construct callback wrapper for member function. - * - * @param fptr pointer-to-member-function - * @param "this" for object associated with callback - */ - SimpleCallback(cfptr_t fptr, const C* obj) : - fptr_(fptr), obj_(const_cast(obj)) - {} - - /** - * Make a call to the member function we've wrapped. - * - * @param i argument for the wrapped member function - * @return value from that function - */ - R operator()(A i) const { - (obj_->*fptr_)(i); - } - - operator bool() const { - return obj_ != NULL && fptr_ != NULL; - } - - ~SimpleCallback() {} -}; - -/** - * Specialization of SimpleCallback for empty argument list. - */ -template ///< type of return value -class SimpleCallback { - typedef R (C::*cfptr_t)(); ///< pointer-to-member-function type - cfptr_t fptr_; ///< the embedded function pointer - C* obj_; ///< object whose function we're wrapping - public: - /** - * Constructor for empty callback object. - */ - SimpleCallback() : - fptr_(NULL), obj_(NULL) {} - - /** - * Construct callback wrapper for member function. - * - * @param fptr pointer-to-member-function - * @param obj "this" for object associated with callback - */ - SimpleCallback(cfptr_t fptr, const C* obj) : - fptr_(fptr), obj_(const_cast(obj)) - {} - - /** - * Make a call to the member function we've wrapped. - * - * @return value from that function - */ - R operator()() const { - (obj_->*fptr_)(); - } - - operator bool() const { - return obj_ != NULL && fptr_ != NULL; - } - - ~SimpleCallback() {} -}; - -}} // apache::thrift - -#endif /* !_THRIFT_ASYNC_SIMPLECALLBACK_H_ */ diff --git a/thrift/lib/cpp/async/TAsyncChannel.h b/thrift/lib/cpp/async/TAsyncChannel.h deleted file mode 100644 index 6ac10c6f15..0000000000 --- a/thrift/lib/cpp/async/TAsyncChannel.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_ASYNC_TASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TASYNCCHANNEL_H_ 1 - -#include -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/transport/TTransportUtils.h" - -namespace apache { namespace thrift { namespace async { - -class TAsyncTransport; - -/** - * TAsyncChannel defines an asynchronous API for message-based I/O. - */ -class TAsyncChannel { - public: - typedef std::tr1::function VoidCallback; - - virtual ~TAsyncChannel() {} - - // is the channel readable (possibly closed by the remote site)? - virtual bool readable() const = 0; - // is the channel in a good state? - virtual bool good() const = 0; - virtual bool error() const = 0; - virtual bool timedOut() const = 0; - - /** - * Send a message over the channel. - * - * @return call "cob" on success, "errorCob" on fail. Caller must be ready - * for either cob to be called before return. Only one cob will be - * called and it will be called exactly once per invocation. - */ - virtual void sendMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* message) = 0; - - /** - * Receive a message from the channel. - * - * @return call "cob" on success, "errorCob" on fail. Caller must be ready - * for either cob to be called before return. Only one cob will be - * called and it will be called exactly once per invocation. - */ - virtual void recvMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* message) = 0; - - /** - * Send a message over the channel and receive a response. - * - * @return call "cob" on success, "errorCob" on fail. Caller must be ready - * for either cob to be called before return. Only one cob will be - * called and it will be called exactly once per invocation. - */ - virtual void sendAndRecvMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* sendBuf, - apache::thrift::transport::TMemoryBuffer* recvBuf) = 0; - - /** - * Send a message over the channel, single cob version. (See above.) - * - * @return call "cob" on success or fail; channel status must be queried - * by the cob. - */ - void sendMessage(const VoidCallback& cob, - apache::thrift::transport::TMemoryBuffer* message) { - return sendMessage(cob, cob, message); - } - - /** - * Receive a message from the channel, single cob version. (See above.) - * - * @return call "cob" on success or fail; channel status must be queried - * by the cob. - */ - void recvMessage(const VoidCallback& cob, - apache::thrift::transport::TMemoryBuffer* message) { - return recvMessage(cob, cob, message); - } - - /** - * Send a message over the channel and receive response, single cob version. - * (See above.) - * - * @return call "cob" on success or fail; channel status must be queried - * by the cob. - */ - void sendAndRecvMessage(const VoidCallback& cob, - apache::thrift::transport::TMemoryBuffer* sendBuf, - apache::thrift::transport::TMemoryBuffer* recvBuf) { - return sendAndRecvMessage(cob, cob, sendBuf, recvBuf); - } - - /** - * Cancel pending callbacks. Use this when the channel is closing because the - * server had been shut down. - */ - virtual void cancelCallbacks() = 0; - - // TODO(dreiss): Make this nonvirtual when TFramedSocketAsyncChannel gets - // renamed to TFramedAsyncChannel. - virtual boost::shared_ptr getTransport() = 0; -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TAsyncDispatchProcessor.h b/thrift/lib/cpp/async/TAsyncDispatchProcessor.h deleted file mode 100644 index c6cdf51042..0000000000 --- a/thrift/lib/cpp/async/TAsyncDispatchProcessor.h +++ /dev/null @@ -1,175 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCDISPATCHPROCESSOR_H_ -#define THRIFT_ASYNC_TASYNCDISPATCHPROCESSOR_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncProcessor.h" - -namespace apache { namespace thrift { namespace async { - -/** - * TAsyncDispatchProcessor is a helper class to parse the message header then - * call another function to dispatch based on the function name. - * - * Subclasses must implement dispatchCall() to dispatch on the function name. - */ -template -class TAsyncDispatchProcessorT : public TAsyncProcessor { - public: - virtual void process(std::tr1::function _return, - boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* context) { - protocol::TProtocol* inRaw = in.get(); - protocol::TProtocol* outRaw = out.get(); - - // Try to dynamic cast to the template protocol type - Protocol_* specificIn = dynamic_cast(inRaw); - Protocol_* specificOut = dynamic_cast(outRaw); - if (specificIn && specificOut) { - return processFast(_return, specificIn, specificOut, context); - } - - // Log the fact that we have to use the slow path - T_GENERIC_PROTOCOL(this, inRaw, specificIn); - T_GENERIC_PROTOCOL(this, outRaw, specificOut); - - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - try { - inRaw->readMessageBegin(fname, mtype, seqid); - } catch (const TException &ex) { - GlobalOutput.printf("received invalid message from client: %s", - ex.what()); - _return(false); - return; - } - - // If this doesn't look like a valid call, log an error and return false so - // that the server will close the connection. - // - // (The old generated processor code used to try to skip a T_STRUCT and - // continue. However, that seems unsafe.) - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - _return(false); - return; - } - - return this->dispatchCall(_return, inRaw, outRaw, fname, seqid, context); - } - - void processFast(std::tr1::function _return, - Protocol_* in, Protocol_* out, - TConnectionContext* context) { - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - try { - in->readMessageBegin(fname, mtype, seqid); - } catch (const TException &ex) { - GlobalOutput.printf("received invalid message from client: %s", - ex.what()); - _return(false); - return; - } - - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - _return(false); - return; - } - - return this->dispatchCallTemplated(_return, in, out, fname, seqid, context); - } - - virtual void dispatchCall(std::tr1::function _return, - apache::thrift::protocol::TProtocol* in, - apache::thrift::protocol::TProtocol* out, - const std::string& fname, int32_t seqid, - TConnectionContext* context) = 0; - - virtual void dispatchCallTemplated(std::tr1::function _return, - Protocol_* in, Protocol_* out, - const std::string& fname, int32_t seqid, - TConnectionContext* context) = 0; -}; - -/** - * Non-templatized version of TAsyncDispatchProcessor, - * that doesn't bother trying to perform a dynamic_cast. - */ -class TAsyncDispatchProcessor : public TAsyncProcessor { - public: - virtual void process(std::tr1::function _return, - boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* context) { - protocol::TProtocol* inRaw = in.get(); - protocol::TProtocol* outRaw = out.get(); - - std::string fname; - protocol::TMessageType mtype; - int32_t seqid; - try { - inRaw->readMessageBegin(fname, mtype, seqid); - } catch (const TException &ex) { - GlobalOutput.printf("received invalid message from client: %s", - ex.what()); - _return(false); - return; - } - - // If this doesn't look like a valid call, log an error and return false so - // that the server will close the connection. - // - // (The old generated processor code used to try to skip a T_STRUCT and - // continue. However, that seems unsafe.) - if (mtype != protocol::T_CALL && mtype != protocol::T_ONEWAY) { - GlobalOutput.printf("received invalid message type %d from client", - mtype); - _return(false); - return; - } - - return dispatchCall(_return, inRaw, outRaw, fname, seqid, context); - } - - virtual void dispatchCall(std::tr1::function _return, - apache::thrift::protocol::TProtocol* in, - apache::thrift::protocol::TProtocol* out, - const std::string& fname, int32_t seqid, - TConnectionContext* context) = 0; -}; - -// Specialize TAsyncDispatchProcessorT for TProtocol and TDummyProtocol just to -// use the generic TDispatchProcessor. -template <> -class TAsyncDispatchProcessorT : - public TAsyncDispatchProcessor {}; -template <> -class TAsyncDispatchProcessorT : - public TAsyncDispatchProcessor {}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCDISPATCHPROCESSOR_H_ diff --git a/thrift/lib/cpp/async/TAsyncEventChannel.h b/thrift/lib/cpp/async/TAsyncEventChannel.h deleted file mode 100644 index b573b3f36b..0000000000 --- a/thrift/lib/cpp/async/TAsyncEventChannel.h +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCEVENTCHANNEL_H_ -#define THRIFT_ASYNC_TASYNCEVENTCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncChannel.h" -#include "thrift/lib/cpp/async/TDelayedDestruction.h" - -namespace apache { namespace thrift { namespace async { - -class TEventBase; - -/** - * TAsyncEventChannel defines an API for TAsyncChannel objects that are driven - * by TEventBase. - */ -class TAsyncEventChannel : public TAsyncChannel, - public TDelayedDestruction { - public: - - /** - * Determine if this channel is idle (i.e., has no outstanding reads or - * writes). - */ - virtual bool isIdle() const = 0; - - /** - * Attach the channel to a TEventBase. - * - * This may only be called if the channel is not currently attached to a - * TEventBase (by an earlier call to detachEventBase()). - * - * This method must be invoked in the TEventBase's thread. - */ - virtual void attachEventBase(TEventBase* eventBase) = 0; - - /** - * Detach the channel from its TEventBase. - * - * This may only be called when the channel is idle and has no reads or - * writes pending. Once detached, the channel may not be used again until it - * is re-attached to a TEventBase by calling attachEventBase(). - * - * This method must be called from the current TEventBase's thread. - */ - virtual void detachEventBase() = 0; - - /** - * Get the receive timeout. - * - * @return Returns the current receive timeout, in milliseconds. A return - * value of 0 indicates that no timeout is set. - */ - virtual uint32_t getRecvTimeout() const = 0; - - /** - * Set the timeout for receiving messages. - * - * When set to a non-zero value, the entire message must be received within - * the specified number of milliseconds, or the receive will fail and the - * channel will be closed. - */ - virtual void setRecvTimeout(uint32_t milliseconds) = 0; - - protected: - /** - * Protected destructor. - * - * Users of TAsyncEventChannel must never delete it directly. Instead, invoke - * destroy() instead. (See the documentation in TDelayedDestruction.h for - * more details.) - */ - - virtual ~TAsyncEventChannel() { } -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCEVENTCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TAsyncProcessor.h b/thrift/lib/cpp/async/TAsyncProcessor.h deleted file mode 100644 index 591e9877b5..0000000000 --- a/thrift/lib/cpp/async/TAsyncProcessor.h +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_TASYNCPROCESSOR_H -#define THRIFT_TASYNCPROCESSOR_H 1 - -#include -#include -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/server/TConnectionContext.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" - -using apache::thrift::server::TConnectionContext; - -namespace apache { namespace thrift { namespace async { - -/** - * Async version of a TProcessor. It is not expected to complete by the time - * the call to process returns. Instead, it calls a cob to signal completion. - * - * @author David Reiss - */ - -class TEventServer; // forward declaration - -class TAsyncProcessor : public TProcessorBase { - public: - virtual ~TAsyncProcessor() {} - - virtual void process(std::tr1::function _return, - boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* context = NULL) = 0; - - void process(std::tr1::function _return, - boost::shared_ptr io) { - return process(_return, io, io); - } - - const TEventServer* getAsyncServer() { - return asyncServer_; - } - protected: - TAsyncProcessor() {} - - const TEventServer* asyncServer_; - private: - friend class TEventServer; - void setAsyncServer(const TEventServer* server) { - asyncServer_ = server; - } -}; - -class TAsyncProcessorFactory { - public: - virtual ~TAsyncProcessorFactory() {} - - /** - * Get the TAsyncProcessor to use for a particular connection. - */ - virtual boost::shared_ptr getProcessor( - server::TConnectionContext* ctx) = 0; -}; - -class TAsyncSingletonProcessorFactory : public TAsyncProcessorFactory { - public: - explicit TAsyncSingletonProcessorFactory( - const boost::shared_ptr& processor) : - processor_(processor) {} - - boost::shared_ptr getProcessor(server::TConnectionContext*) { - return processor_; - } - - private: - boost::shared_ptr processor_; -}; - - -}}} // apache::thrift::async - -// XXX I'm lazy for now -namespace apache { namespace thrift { -using apache::thrift::async::TAsyncProcessor; -}} - -#endif // #ifndef THRIFT_TASYNCPROCESSOR_H diff --git a/thrift/lib/cpp/async/TAsyncSSLServerSocket.h b/thrift/lib/cpp/async/TAsyncSSLServerSocket.h deleted file mode 100644 index d4e2c9aa7a..0000000000 --- a/thrift/lib/cpp/async/TAsyncSSLServerSocket.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCSSLSERVERSOCKET_H_ -#define THRIFT_ASYNC_TASYNCSSLSERVERSOCKET_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncServerSocket.h" -#include "thrift/lib/cpp/transport/TSSLSocket.h" - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -} - -namespace async { - -class TAsyncSSLSocket; - -class TAsyncSSLServerSocket : public TDelayedDestruction, - private TAsyncServerSocket::AcceptCallback { - public: - class SSLAcceptCallback { - public: - virtual ~SSLAcceptCallback() {} - - /** - * connectionAccepted() is called whenever a new client connection is - * received. - * - * The SSLAcceptCallback will remain installed after connectionAccepted() - * returns. - * - * @param sock The newly accepted client socket. The - * SSLAcceptCallback - * assumes ownership of this socket, and is responsible - * for closing it when done. - */ - virtual void connectionAccepted( - const boost::shared_ptr &sock) - THRIFT_NOEXCEPT = 0; - - /** - * acceptError() is called if an error occurs while accepting. - * - * The SSLAcceptCallback will remain installed even after an accept error. - * If the callback wants to uninstall itself and stop trying to accept new - * connections, it must explicit call setAcceptCallback(NULL). - * - * @param ex An exception representing the error. - */ - virtual void acceptError(const std::exception& ex) THRIFT_NOEXCEPT = 0; - }; - - /** - * Create a new TAsyncSSLServerSocket with the specified TEventBase. - * - * @param eventBase The TEventBase to use for driving the asynchronous I/O. - * If this parameter is NULL, attachEventBase() must be - * called before this socket can begin accepting - * connections. All TAsyncSSLSocket objects accepted by - * this server socket will be attached to this TEventBase - * when they are created. - */ - explicit TAsyncSSLServerSocket( - const boost::shared_ptr& ctx, - TEventBase* eventBase = NULL); - - /** - * Destroy the socket. - * - * destroy() must be called to destroy the socket. The normal destructor is - * private, and should not be invoked directly. This prevents callers from - * deleting a TAsyncSSLServerSocket while it is invoking a callback. - */ - virtual void destroy(); - - void bind(const transport::TSocketAddress& address) { - serverSocket_->bind(address); - } - void bind(uint16_t port) { - serverSocket_->bind(port); - } - void getAddress(transport::TSocketAddress* addressReturn) { - serverSocket_->getAddress(addressReturn); - } - void listen(int backlog) { - serverSocket_->listen(backlog); - } - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TAsyncSSLServerSocket's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newSocket( - const boost::shared_ptr& ctx, - TEventBase* evb) { - return boost::shared_ptr( - new TAsyncSSLServerSocket(ctx, evb), - Destructor()); - } - - /** - * Set the accept callback. - * - * This method may only be invoked from the TEventBase's loop thread. - * - * @param callback The callback to invoke when a new socket - * connection is accepted and a new TAsyncSSLSocket is - * created. - * - * Throws TTransportException on error. - */ - void setSSLAcceptCallback(SSLAcceptCallback* callback); - - SSLAcceptCallback *getSSLAcceptCallback() const { - return sslCallback_; - } - - void attachEventBase(TEventBase* eventBase); - void detachEventBase(); - - /** - * Returns the TEventBase that the handler is currently attached to. - */ - TEventBase* getEventBase() const { - return eventBase_; - } - - protected: - /** - * Protected destructor. - * - * Invoke destroy() instead to destroy the TAsyncSSLServerSocket. - */ - virtual ~TAsyncSSLServerSocket(); - - private: - virtual void connectionAccepted(int fd, - const transport::TSocketAddress& clientAddr) - THRIFT_NOEXCEPT; - virtual void acceptError(const std::exception& ex) THRIFT_NOEXCEPT; - - TEventBase* eventBase_; - TAsyncServerSocket* serverSocket_; - // SSL context - boost::shared_ptr ctx_; - // The accept callback - SSLAcceptCallback* sslCallback_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCSSLSERVERSOCKET_H_ diff --git a/thrift/lib/cpp/async/TAsyncSSLSocket.h b/thrift/lib/cpp/async/TAsyncSSLSocket.h deleted file mode 100644 index 93dcf3f264..0000000000 --- a/thrift/lib/cpp/async/TAsyncSSLSocket.h +++ /dev/null @@ -1,411 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCSSLSOCKET_H_ -#define THRIFT_ASYNC_TASYNCSSLSOCKET_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncSocket.h" -#include "thrift/lib/cpp/async/TAsyncTimeout.h" -#include "thrift/lib/cpp/transport/TSSLSocket.h" -#include "thrift/lib/cpp/transport/TTransportException.h" - -namespace apache { namespace thrift { - -namespace async { - -class TSSLException: public apache::thrift::transport::TTransportException { - public: - TSSLException(int sslError, int errno_copy); - - int getSSLError() const { return error_; } - - protected: - int error_; -}; - -/** - * A class for performing asynchronous I/O on an SSL connection. - * - * TAsyncSSLSocket allows users to asynchronously wait for data on an - * SSL connection, and to asynchronously send data. - * - * The APIs for reading and writing are intentionally asymmetric. - * Waiting for data to read is a persistent API: a callback is - * installed, and is notified whenever new data is available. It - * continues to be notified of new events until it is uninstalled. - * - * TAsyncSSLSocket does not provide read timeout functionality, - * because it typically cannot determine when the timeout should be - * active. Generally, a timeout should only be enabled when - * processing is blocked waiting on data from the remote endpoint. - * For server connections, the timeout should not be active if the - * server is currently processing one or more outstanding requests for - * this connection. For client connections, the timeout should not be - * active if there are no requests pending on the connection. - * Additionally, if a client has multiple pending requests, it will - * ususally want a separate timeout for each request, rather than a - * single read timeout. - * - * The write API is fairly intuitive: a user can request to send a - * block of data, and a callback will be informed once the entire - * block has been transferred to the kernel, or on error. - * TAsyncSSLSocket does provide a send timeout, since most callers - * want to give up if the remote end stops responding and no further - * progress can be made sending the data. - */ -class TAsyncSSLSocket : public TAsyncSocket { - public: - -#if THRIFT_HAVE_UNIQUE_PTR - typedef std::unique_ptr UniquePtr; -#endif - - class HandshakeCallback { - public: - virtual ~HandshakeCallback() {} - - /** - * handshakeSuccess() is called when a new SSL connection is - * established, i.e., after SSL_accept/connect() returns successfully. - * - * The HandshakeCallback will be uninstalled before handshakeSuccess() - * is called. - * - * @param sock SSL socket on which the handshake was initiated - */ - virtual void handshakeSuccess(TAsyncSSLSocket *sock) THRIFT_NOEXCEPT = 0; - - /** - * handshakeError() is called if an error occurs while - * establishing the SSL connection. - * - * The HandshakeCallback will be uninstalled before handshakeError() - * is called. - * - * @param sock SSL socket on which the handshake was initiated - * @param ex An exception representing the error. - */ - virtual void handshakeError( - TAsyncSSLSocket *sock, - const apache::thrift::transport::TTransportException& ex) - THRIFT_NOEXCEPT = 0; - }; - - class HandshakeTimeout : public TAsyncTimeout { - public: - HandshakeTimeout(TAsyncSSLSocket* sslSocket, TEventBase* eventBase) - : TAsyncTimeout(eventBase) - , sslSocket_(sslSocket) {} - - virtual void timeoutExpired() THRIFT_NOEXCEPT { - sslSocket_->timeoutExpired(); - } - - private: - TAsyncSSLSocket* sslSocket_; - }; - - /** - * These are passed to the application via errno, so values have to be - * outside the valid errno range - */ - enum SSLError { - SSL_CLIENT_RENEGOTIATION_ATTEMPT = 0x8001 - }; - - /** - * Create a client TAsyncSSLSocket - */ - TAsyncSSLSocket(const boost::shared_ptr &ctx, - TEventBase* evb) : - TAsyncSocket(evb), - corked_(false), - server_(false), - handshakeComplete_(false), - renegotiateAttempted_(false), - sslState_(STATE_UNINIT), - ctx_(ctx), - handshakeCallback_(NULL), - ssl_(NULL), - sslSession_(NULL), - handshakeTimeout_(this, evb) { - } - - /** - * Create a TAsyncSSLSocket from an already connected socket file descriptor. - * - * Note that while TAsyncSSLSocket enables TCP_NODELAY for sockets it creates - * when connecting, it does not change the socket options when given an - * existing file descriptor. If callers want TCP_NODELAY enabled when using - * this version of the constructor, they need to explicitly call - * setNoDelay(true) after the constructor returns. - * - * @param ctx SSL context for this connection. - * @param evb EventBase that will manage this socket. - * @param fd File descriptor to take over (should be a connected socket). - */ - TAsyncSSLSocket(const boost::shared_ptr& ctx, - TEventBase* evb, int fd, bool server = true); - - /** - * Helper function to create a shared_ptr. - */ - static boost::shared_ptr newSocket( - const boost::shared_ptr& ctx, - TEventBase* evb, int fd, bool server=true) { - return boost::shared_ptr( - new TAsyncSSLSocket(ctx, evb, fd, server), - Destructor()); - } - - /** - * Helper function to create a shared_ptr. - */ - static boost::shared_ptr newSocket( - const boost::shared_ptr& ctx, - TEventBase* evb) { - return boost::shared_ptr( - new TAsyncSSLSocket(ctx, evb), - Destructor()); - } - - /** - * TODO: implement support for SSL renegotiation. - * - * This involves proper handling of the SSL_ERROR_WANT_READ/WRITE - * code as a result of SSL_write/read(), instead of returning an - * error. In that case, the READ/WRITE event should be registered, - * and a flag (e.g., writeBlockedOnRead) should be set to indiciate - * the condition. In the next invocation of read/write callback, if - * the flag is on, performWrite()/performRead() should be called in - * addition to the normal call to performRead()/performWrite(), and - * the flag should be reset. - */ - - // Inherit TAsyncTransport methods from TAsyncSocket except the - // following. - // See the documentation in TAsyncTransport.h - // TODO: implement graceful shutdown in close() - // TODO: implement detachSSL() that returns the SSL connection - virtual void closeNow(); - virtual void shutdownWrite(); - virtual void shutdownWriteNow(); - virtual bool good() const; - virtual bool connecting() const; - - /** - * Accept an SSL connection on the socket. - * - * The callback will be invoked and uninstalled when an SSL - * connection has been established on the underlying socket. - * - * @param callback callback object to invoke on success/failure - * @param timeout timeout for this function in milliseconds, or 0 for no - * timeout - */ - void sslAccept(HandshakeCallback* callback, uint32_t timeout = 0); - - /** - * Invoke SSL accept following an asynchronous session cache lookup - */ - void restartSSLAccept(); - - /** - * Connect to the given address, invoking callback when complete or on error - * - * Note timeout applies to TCP + SSL connection time - */ - void connect(ConnectCallback* callback, - const transport::TSocketAddress& address, - int timeout = 0, - const OptionList &options = emptyOptionList) THRIFT_NOEXCEPT; - - using TAsyncSocket::connect; - - /** - * Initiate an SSL connection on the socket - * THe callback will be invoked and uninstalled when an SSL connection - * has been establshed on the underlying socket. - * - * @param callback callback object to invoke on success/failure - * @param timeout timeout for this function in milliseconds, or 0 for no - * timeout - */ - void sslConnect(HandshakeCallback *callback, uint64_t timeout = 0); - - enum SSLStateEnum { - STATE_UNINIT, - STATE_ACCEPTING, - STATE_CACHE_LOOKUP, - STATE_CONNECTING, - STATE_ESTABLISHED, - STATE_REMOTE_CLOSED, /// remote end closed; we can still write - STATE_CLOSING, ///< close() called, but waiting on writes to complete - /// close() called with pending writes, before connect() has completed - STATE_CONNECTING_CLOSING, - STATE_CLOSED, - STATE_ERROR - }; - - SSLStateEnum getSSLState() const { return sslState_;} - - /** - * Get a handle to the negotiated SSL session. This increments the session - * refcount and must be deallocated by the caller. - */ - SSL_SESSION *getSSLSession(); - - /** - * Set the SSL session to be used during sslConnect. TAsyncSSLSocket will - * hold a reference to the session until it is destroyed or released by the - * underlying SSL structure. - * - * @param takeOwnership if true, TAsyncSSLSocket will assume the caller's - * reference count to session. - */ - void setSSLSession(SSL_SESSION *session, bool takeOwnership = false); - -#ifdef OPENSSL_NPN_NEGOTIATED - /** - * Get the name of the protocol selected by the client during - * Next Protocol Negotiation (NPN) - * - * @param protoName Name of the protocol (not guaranteed to be - * null terminated); will be set to NULL if - * the client did not negotiate a protocol. - * Note: the TAsyncSSLSocket retains ownership - * of this string. - * @param protoNameLen Length of the name. - */ - void getSelectedNextProtocol(const unsigned char** protoName, - unsigned* protoLen); -#endif // OPENSSL_NPN_NEGOTIATED - - /** - * Determine if the session specified during setSSLSession was reused - * or if the server rejected it and issued a new session. - */ - bool getSSLSessionReused() const; - - /** - * Get the negociated cipher name for this SSL connection. - * Returns the cipher used or the constant value "NONE" when no SSL session - * has been established. - */ - const char *getNegotiatedCipherName() const; - - /** - * Get the SSL version for this connection. - * Possible return values are SSL2_VERSION, SSL3_VERSION, TLS1_VERSION, - * with hexa representations 0x200, 0x300, 0x301, - * or 0 if no SSL session has been established. - */ - int getSSLVersion() const; - - /* Get the number of bytes read from the wire (including protocol - * overhead). Returns 0 once the connection has been closed. - */ - unsigned long getBytesRead() const { - if (ssl_ != NULL) { - return BIO_number_read(SSL_get_rbio(ssl_)); - } - return 0; - } - - /* Get the number of bytes written to the wire (including protocol - * overhead). Returns 0 once the connection has been closed. - */ - unsigned long getBytesWritten() const { - if (ssl_ != NULL) { - return BIO_number_written(SSL_get_wbio(ssl_)); - } - return 0; - } - - virtual void attachEventBase(TEventBase* eventBase) { - TAsyncSocket::attachEventBase(eventBase); - handshakeTimeout_.attachEventBase(eventBase); - } - - virtual void detachEventBase() { - TAsyncSocket::detachEventBase(); - handshakeTimeout_.detachEventBase(); - } - - void timeoutExpired() THRIFT_NOEXCEPT; - - protected: - - /** - * Protected destructor. - * - * Users of TAsyncSSLSocket must never delete it directly. Instead, invoke - * destroy() instead. (See the documentation in TDelayedDestruction.h for - * more details.) - */ - ~TAsyncSSLSocket(); - - // Inherit event notification methods from TAsyncSocket except - // the following. - - void handleRead() THRIFT_NOEXCEPT; - void handleWrite() THRIFT_NOEXCEPT; - void handleAccept() THRIFT_NOEXCEPT; - void handleConnect() THRIFT_NOEXCEPT; - - void invalidState(HandshakeCallback* callback); - bool willBlock(int ret, int *errorOut) THRIFT_NOEXCEPT; - - virtual void checkForImmediateRead() THRIFT_NOEXCEPT; - // TAsyncSocket calls this at the wrong time for SSL - void handleInitialReadWrite() THRIFT_NOEXCEPT {} - - ssize_t performRead(void* buf, size_t buflen); - ssize_t performWrite(const iovec* vec, uint32_t count, bool haveMore, - uint32_t* countWritten, uint32_t* partialWritten); - - // Inherit error handling methods from TAsyncSocket, plus the following. - void failHandshake(const char* fn, const transport::TTransportException& ex); - - void invokeHandshakeCallback(); - - static void sslInfoCallback(const SSL *ssl, int type, int val); - - // Whether we've applied the TCP_CORK option to the socket - bool corked_; - // SSL related members. - bool server_; - // Used to prevent client-initiated renegotiation. Note that TAsyncSSLSocket - // doesn't fully support renegotiation, so we could just fail all attempts - // to enforce this. Once it is supported, we should make it an option - // to disable client-initiated renegotiation. - bool handshakeComplete_; - bool renegotiateAttempted_; - SSLStateEnum sslState_; - boost::shared_ptr ctx_; - // Callback for SSL_accept() or SSL_connect() - HandshakeCallback* handshakeCallback_; - SSL* ssl_; - SSL_SESSION *sslSession_; - HandshakeTimeout handshakeTimeout_; -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TASYNCSSLSOCKET_H_ diff --git a/thrift/lib/cpp/async/TAsyncServerSocket.h b/thrift/lib/cpp/async/TAsyncServerSocket.h deleted file mode 100644 index 15b10a20dd..0000000000 --- a/thrift/lib/cpp/async/TAsyncServerSocket.h +++ /dev/null @@ -1,513 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCSERVERSOCKET_H_ -#define THRIFT_ASYNC_TASYNCSERVERSOCKET_H_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include "thrift/lib/cpp/async/TDelayedDestruction.h" -#include "thrift/lib/cpp/async/TEventHandler.h" -#include -#include -#include -#include -#include -#include -#include - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -} - -namespace async { - -class TNotificationPipe; - -/** - * A listening socket that asynchronously informs a callback whenever a new - * connection has been accepted. - * - * Unlike most async interfaces that always invoke their callback in the same - * TEventBase thread, TAsyncServerSocket is unusual in that it can distribute - * the callbacks across multiple TEventBase threads. - * - * This supports a common use case for network servers to distribute incoming - * connections across a number of TEventBase threads. (Servers typically run - * with one TEventBase thread per CPU.) - * - * Despite being able to invoke callbacks in multiple TEventBase threads, - * TAsyncServerSocket still has one "primary" TEventBase. Operations that - * modify the TAsyncServerSocket state may only be performed from the primary - * TEventBase thread. - */ -class TAsyncServerSocket : public TDelayedDestruction, - private TEventHandler { - public: -#if THRIFT_HAVE_UNIQUE_PTR - typedef std::unique_ptr UniquePtr; -#endif - - class AcceptCallback { - public: - virtual ~AcceptCallback() {} - - /** - * connectionAccepted() is called whenever a new client connection is - * received. - * - * The AcceptCallback will remain installed after connectionAccepted() - * returns. - * - * @param fd The newly accepted client socket. The AcceptCallback - * assumes ownership of this socket, and is responsible - * for closing it when done. The newly accepted file - * descriptor will have already been put into - * non-blocking mode. - * @param clientAddr A reference to a TSocketAddress struct containing the - * client's address. This struct is only guaranteed to - * remain valid until connectionAccepted() returns. - */ - virtual void connectionAccepted(int fd, - const transport::TSocketAddress& clientAddr) - THRIFT_NOEXCEPT = 0; - - /** - * acceptError() is called if an error occurs while accepting. - * - * The AcceptCallback will remain installed even after an accept error, - * as the errors are typically somewhat transient, such as being out of - * file descriptors. The server socket must be explicitly stopped if you - * wish to stop accepting after an error. - * - * @param ex An exception representing the error. - */ - virtual void acceptError(const std::exception& ex) THRIFT_NOEXCEPT = 0; - - /** - * acceptStarted() will be called in the callback's TEventBase thread - * after this callback has been added to the TAsyncServerSocket. - * - * acceptStarted() will be called before any calls to connectionAccepted() - * or acceptError() are made on this callback. - * - * acceptStarted() makes it easier for callbacks to perform initialization - * inside the callback thread. (The call to addAcceptCallback() must - * always be made from the TAsyncServerSocket's primary TEventBase thread. - * acceptStarted() provides a hook that will always be invoked in the - * callback's thread.) - * - * Note that the call to acceptStarted() is made once the callback is - * added, regardless of whether or not the TAsyncServerSocket is actually - * accepting at the moment. acceptStarted() will be called even if the - * TAsyncServerSocket is paused when the callback is added (including if - * the initial call to startAccepting() on the TAsyncServerSocket has not - * been made yet). - */ - virtual void acceptStarted() THRIFT_NOEXCEPT {} - - /** - * acceptStopped() will be called when this AcceptCallback is removed from - * the TAsyncServerSocket, or when the TAsyncServerSocket is destroyed, - * whichever occurs first. - * - * No more calls to connectionAccepted() or acceptError() will be made - * after acceptStopped() is invoked. - */ - virtual void acceptStopped() THRIFT_NOEXCEPT {} - }; - - static const uint32_t kDefaultMaxAcceptAtOnce = 30; - static const uint32_t kDefaultCallbackAcceptAtOnce = 5; - static const uint32_t kDefaultMaxMessagesInPipe = 0xffffffff; - /** - * Create a new TAsyncServerSocket with the specified TEventBase. - * - * @param eventBase The TEventBase to use for driving the asynchronous I/O. - * If this parameter is NULL, attachEventBase() must be - * called before this socket can begin accepting - * connections. - */ - explicit TAsyncServerSocket(TEventBase* eventBase = NULL); - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TAsyncServerSocket's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newSocket(TEventBase* evb) { - return boost::shared_ptr(new TAsyncServerSocket(evb), - Destructor()); - } - - /** - * Destroy the socket. - * - * TAsyncServerSocket::destroy() must be called to destroy the socket. - * The normal destructor is private, and should not be invoked directly. - * This prevents callers from deleting a TAsyncServerSocket while it is - * invoking a callback. - * - * destroy() must be invoked from the socket's primary TEventBase thread. - * - * If there are AcceptCallbacks still installed when destroy() is called, - * acceptStopped() will be called on these callbacks to notify them that - * accepting has stopped. Accept callbacks being driven by other TEventBase - * threads may continue to receive new accept callbacks for a brief period of - * time after destroy() returns. They will not receive any more callback - * invocations once acceptStopped() is invoked. - */ - virtual void destroy(); - - /** - * Attach this TAsyncServerSocket to its primary TEventBase. - * - * This may only be called if the TAsyncServerSocket is not already attached - * to a TEventBase. The TAsyncServerSocket must be attached to a TEventBase - * before it can begin accepting connections. - */ - void attachEventBase(TEventBase *eventBase); - - /** - * Detach the TAsyncServerSocket from its primary TEventBase. - * - * detachEventBase() may only be called if the TAsyncServerSocket is not - * currently accepting connections. - */ - void detachEventBase(); - - /** - * Get the TEventBase used by this socket. - */ - TEventBase* getEventBase() const { - return eventBase_; - } - - /** - * Create a TAsyncServerSocket from an existing socket file descriptor. - * - * useExistingSocket() will cause the TAsyncServerSocket to take ownership of - * the specified file descriptor, and use it to listen for new connections. - * The TAsyncServerSocket will close the file descriptor when it is - * destroyed. - * - * useExistingSocket() must be called before bind() or listen(). - * - * The supplied file descriptor will automatically be put into non-blocking - * mode. The caller may have already directly called bind() and possibly - * listen on the file descriptor. If so the caller should skip calling the - * corresponding TAsyncServerSocket::bind() and listen() methods. - * - * On error a TTransportException will be thrown and the caller will retain - * ownership of the file descriptor. - */ - void useExistingSocket(int fd); - - /** - * Return the underlying file descriptor - */ - int getSocket() const { - return socket_; - } - - /** - * Bind to the specified address. - * - * This must be called from the primary TEventBase thread. - * - * Throws TTransportException on error. - */ - void bind(const transport::TSocketAddress& address); - - /** - * Bind to the specified port. - * - * This must be called from the primary TEventBase thread. - * - * Throws TTransportException on error. - */ - void bind(uint16_t port); - - /** - * Get the local address to which the socket is bound. - * - * Throws TTransportException on error. - */ - void getAddress(transport::TSocketAddress* addressReturn); - - /** - * Begin listening for connections. - * - * This calls ::listen() with the specified backlog. - * - * Once listen() is invoked the socket will actually be open so that remote - * clients may establish connections. (Clients that attempt to connect - * before listen() is called will receive a connection refused error.) - * - * At least one callback must be set and startAccepting() must be called to - * actually begin notifying the accept callbacks of newly accepted - * connections. The backlog parameter controls how many connections the - * kernel will accept and buffer internally while the accept callbacks are - * paused (or if accepting is enabled but the callbacks cannot keep up). - * - * bind() must be called before calling listen(). - * listen() must be called from the primary TEventBase thread. - * - * Throws TTransportException on error. - */ - void listen(int backlog); - - /** - * Add an AcceptCallback. - * - * When a new socket is accepted, one of the AcceptCallbacks will be invoked - * with the new socket. The AcceptCallbacks are invoked in a round-robin - * fashion. This allows the accepted sockets to distributed among a pool of - * threads, each running its own TEventBase object. This is a common model, - * since most asynchronous-style servers typically run one TEventBase thread - * per CPU. - * - * The TEventBase object associated with each AcceptCallback must be running - * its loop. If the TEventBase loop is not running, sockets will still be - * scheduled for the callback, but the callback cannot actually get invoked - * until the loop runs. - * - * This method must be invoked from the TAsyncServerSocket's primary - * TEventBase thread. - * - * Note that startAccepting() must be called on the TAsyncServerSocket to - * cause it to actually start accepting sockets once callbacks have been - * installed. - * - * @param callback The callback to invoke. - * @param eventBase The TEventBase to use to invoke the callback. This - * parameter may be NULL, in which case the callback will be invoked in - * the TAsyncServerSocket's primary TEventBase. - * @param maxAtOnce The maximum number of connections to accept in this - * callback on a single iteration of the event base loop. - * This only takes effect when eventBase is non-NULL. When - * using a NULL eventBase for the callback, the - * setMaxAcceptAtOnce() method controls how many - * connections the main event base will accept at once. - */ - void addAcceptCallback(AcceptCallback *callback, TEventBase *eventBase, - uint32_t maxAtOnce = kDefaultCallbackAcceptAtOnce); - - /** - * Remove an AcceptCallback. - * - * This allows a single AcceptCallback to be removed from the round-robin - * pool. - * - * This method must be invoked from the TAsyncServerSocket's primary - * TEventBase thread. Use TEventBase::runInEventBaseThread() to schedule the - * operation in the correct TEventBase if your code is not in the server - * socket's primary TEventBase. - * - * Given that the accept callback is being driven by a different TEventBase, - * the AcceptCallback may continue to be invoked for a short period of time - * after removeAcceptCallback() returns in this thread. Once the other - * TEventBase thread receives the notification to stop, it will call - * acceptStopped() on the callback to inform it that it is fully stopped and - * will not receive any new sockets. - * - * If the last accept callback is removed while the socket is accepting, - * the socket will implicitly pause accepting. If a callback is later added, - * it will resume accepting immediately, without requiring startAccepting() - * to be invoked. - * - * @param callback The callback to uninstall. - * @param eventBase The TEventBase associated with this callback. This must - * be the same TEventBase that was used when the callback was installed - * with addAcceptCallback(). - */ - void removeAcceptCallback(AcceptCallback *callback, TEventBase *eventBase); - - /** - * Begin accepting connctions on this socket. - * - * bind() and listen() must be called before calling startAccepting(). - * - * When a TAsyncServerSocket is initially created, it will not begin - * accepting connections until at least one callback has been added and - * startAccepting() has been called. startAccepting() can also be used to - * resume accepting connections after a call to pauseAccepting(). - * - * If startAccepting() is called when there are no accept callbacks - * installed, the socket will not actually begin accepting until an accept - * callback is added. - * - * This method may only be called from the primary TEventBase thread. - */ - void startAccepting(); - - /** - * Pause accepting connections. - * - * startAccepting() may be called to resume accepting. - * - * This method may only be called from the primary TEventBase thread. - * If there are AcceptCallbacks being driven by other TEventBase threads they - * may continue to receive callbacks for a short period of time after - * pauseAccepting() returns. - * - * Unlike removeAcceptCallback() or destroy(), acceptStopped() will not be - * called on the AcceptCallback objects simply due to a temporary pause. If - * the server socket is later destroyed while paused, acceptStopped() will be - * called all of the installed AcceptCallbacks. - */ - void pauseAccepting(); - - /** - * Get the maximum number of connections that will be accepted each time - * around the event loop. - */ - uint32_t getMaxAcceptAtOnce() const { - return maxAcceptAtOnce_; - } - - /** - * Set the maximum number of connections that will be accepted each time - * around the event loop. - * - * This provides a very coarse-grained way of controlling how fast the - * TAsyncServerSocket will accept connections. If you find that when your - * server is overloaded TAsyncServerSocket accepts connections more quickly - * than your code can process them, you can try lowering this number so that - * fewer connections will be accepted each event loop iteration. - * - * For more explicit control over the accept rate, you can also use - * pauseAccepting() to temporarily pause accepting when your server is - * overloaded, and then use startAccepting() later to resume accepting. - */ - void setMaxAcceptAtOnce(uint32_t numConns) { - maxAcceptAtOnce_ = numConns; - } - - /** - * Get the maximum number of unprocessed messages which a NotificationPipe - * can hold. - */ - uint32_t getMaxNumMessagesInPipe() const { - return maxNumMsgsInPipe_; - } - - /** - * Set the maximum number of unprocessed messages in NotificationPipe. - * No new message will be sent to that NotificationPipe if there are more - * than such number of unprocessed messages in that pipe. - */ - void setMaxNumMessagesInPipe(uint32_t num) { - maxNumMsgsInPipe_ = num; - } - - /** - * Get the speed of adjusting connection accept rate. - */ - double getAcceptRateAdjustSpeed() const { - return acceptRateAdjustSpeed_; - } - - /** - * Set the speed of adjusting connection accept rate. - */ - void setAcceptRateAdjustSpeed(double speed) { - acceptRateAdjustSpeed_ = speed; - } - - /** - * Get the number of connections dropped by the TAsyncServerSocket - */ - uint64_t getNumDroppedConnections() const { - return numDroppedConnections_; - } - - protected: - /** - * Protected destructor. - * - * Invoke destroy() instead to destroy the TAsyncServerSocket. - */ - virtual ~TAsyncServerSocket(); - - private: - /** - * A struct to keep track of the callbacks associated with this server - * socket. - */ - struct CallbackInfo { - CallbackInfo(AcceptCallback *callback, TEventBase *eventBase) - : callback(callback), - eventBase(eventBase), - pipe(NULL) {} - - AcceptCallback *callback; - TEventBase *eventBase; - // Note that the TNotificationPipe is actually owned by the RemoteAcceptor. - // The RemoteAcceptor will destroy the TNotificationPipe (and itself) - // once the pipe is closed by the TAsyncServerSocket. - TNotificationPipe *pipe; - }; - class RemoteAcceptor; - enum MessageType { - MSG_NEW_CONN = 0, - MSG_ERROR = 1 - }; - class BackoffTimeout; - - // Inherited from TEventHandler - virtual void handlerReady(uint16_t events) THRIFT_NOEXCEPT; - - int createSocket(int family); - void setupSocket(int fd); - void dispatchSocket(int socket, const transport::TSocketAddress& address); - void dispatchError(const char *msg, int errnoValue); - void enterBackoff(); - void backoffTimeoutExpired(); - - CallbackInfo* nextCallback() { - CallbackInfo* info = &callbacks_[callbackIndex_]; - - ++callbackIndex_; - if (callbackIndex_ >= callbacks_.size()) { - callbackIndex_ = 0; - } - - return info; - } - - TEventBase *eventBase_; - sa_family_t addressFamily_; - int socket_; - bool accepting_; - uint32_t maxAcceptAtOnce_; - uint32_t maxNumMsgsInPipe_; - double acceptRateAdjustSpeed_; //0 to disable auto adjust - double acceptRate_; - int64_t lastAccepTimestamp_; // milliseconds - uint64_t numDroppedConnections_; - uint32_t callbackIndex_; - BackoffTimeout *backoffTimeout_; - std::vector callbacks_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCSERVERSOCKET_H_ diff --git a/thrift/lib/cpp/async/TAsyncSignalHandler.h b/thrift/lib/cpp/async/TAsyncSignalHandler.h deleted file mode 100644 index 7a80be21b2..0000000000 --- a/thrift/lib/cpp/async/TAsyncSignalHandler.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCSIGNALHANDLER_H_ -#define THRIFT_ASYNC_TASYNCSIGNALHANDLER_H_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include -#include - -namespace apache { namespace thrift { namespace async { - -class TEventBase; - -/** - * A handler to receive notification about POSIX signals. - * - * TAsyncSignalHandler allows code to process signals from within a TEventBase - * loop. Standard signal handlers interrupt execution of the main thread, and - * are run while the main thread is paused. As a result, great care must be - * taken to avoid race conditions if the signal handler has to access or modify - * any data used by the main thread. - * - * TAsyncSignalHandler solves this problem by running the TAsyncSignalHandler - * callback in normal thread of execution, as a TEventBase callback. - * - * TAsyncSignalHandler may only be used in a single thread. It will only - * process signals received by the thread where the TAsyncSignalHandler is - * registered. It is the user's responsibility to ensure that signals are - * delivered to the desired thread in multi-threaded programs. - */ -class TAsyncSignalHandler { - public: - /** - * Create a new TAsyncSignalHandler. - */ - TAsyncSignalHandler(TEventBase* eventBase); - virtual ~TAsyncSignalHandler(); - - /** - * Register to receive callbacks about the specified signal. - * - * Once the handler has been registered for a particular signal, - * signalReceived() will be called each time this thread receives this - * signal. - * - * Throws a TException if an error occurs, or if this handler is already - * registered for this signal. - */ - void registerSignalHandler(int signum); - - /** - * Unregister for callbacks about the specified signal. - * - * Throws a TException if an error occurs, or if this signal was not - * registered. - */ - void unregisterSignalHandler(int signum); - - /** - * signalReceived() will called to indicate that the specified signal has - * been received. - * - * signalReceived() will always be invoked from the TEventBase loop (i.e., - * after the main POSIX signal handler has returned control to the TEventBase - * thread). - */ - virtual void signalReceived(int signum) THRIFT_NOEXCEPT = 0; - - private: - typedef std::map SignalEventMap; - - // Forbidden copy constructor and assignment operator - TAsyncSignalHandler(TAsyncSignalHandler const &); - TAsyncSignalHandler& operator=(TAsyncSignalHandler const &); - - static void libeventCallback(int signum, short events, void* arg); - - TEventBase* eventBase_; - SignalEventMap signalEvents_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCSIGNALHANDLER_H_ diff --git a/thrift/lib/cpp/async/TAsyncSocket.h b/thrift/lib/cpp/async/TAsyncSocket.h deleted file mode 100644 index eb25fcd3ba..0000000000 --- a/thrift/lib/cpp/async/TAsyncSocket.h +++ /dev/null @@ -1,619 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCSOCKET_H_ -#define THRIFT_ASYNC_TASYNCSOCKET_H_ 1 - -#include -#include -#include "thrift/lib/cpp/async/TAsyncTimeout.h" -#include "thrift/lib/cpp/async/TAsyncTransport.h" -#include "thrift/lib/cpp/async/TDelayedDestruction.h" -#include "thrift/lib/cpp/async/TEventHandler.h" - -#include -#include - -namespace apache { namespace thrift { namespace async { - -/** - * A class for performing asynchronous I/O on a socket. - * - * TAsyncSocket allows users to asynchronously wait for data on a socket, and - * to asynchronously send data. - * - * The APIs for reading and writing are intentionally asymmetric. Waiting for - * data to read is a persistent API: a callback is installed, and is notified - * whenever new data is available. It continues to be notified of new events - * until it is uninstalled. - * - * TAsyncSocket does not provide read timeout functionality, because it - * typically cannot determine when the timeout should be active. Generally, a - * timeout should only be enabled when processing is blocked waiting on data - * from the remote endpoint. For server sockets, the timeout should not be - * active if the server is currently processing one or more outstanding - * requests for this socket. For client sockets, the timeout should not be - * active if there are no requests pending on the socket. Additionally, if a - * client has multiple pending requests, it will ususally want a separate - * timeout for each request, rather than a single read timeout. - * - * The write API is fairly intuitive: a user can request to send a block of - * data, and a callback will be informed once the entire block has been - * transferred to the kernel, or on error. TAsyncSocket does provide a send - * timeout, since most callers want to give up if the remote end stops - * responding and no further progress can be made sending the data. - */ -class TAsyncSocket : public TAsyncTransport, - public TDelayedDestruction { - public: -#if THRIFT_HAVE_UNIQUE_PTR - typedef std::unique_ptr UniquePtr; -#endif - - class ConnectCallback { - public: - virtual ~ConnectCallback() {} - - /** - * connectSuccess() will be invoked when the connection has been - * successfully established. - */ - virtual void connectSuccess() THRIFT_NOEXCEPT = 0; - - /** - * connectError() will be invoked if the connection attempt fails. - * - * @param ex An exception describing the error that occurred. - */ - virtual void connectError(const transport::TTransportException& ex) - THRIFT_NOEXCEPT = 0; - }; - - /** - * Create a new unconnected TAsyncSocket. - * - * connect() must later be called on this socket to establish a connection. - */ - explicit TAsyncSocket(TEventBase* evb); - - /** - * Create a new TAsyncSocket and begin the connection process. - * - * @param evb EventBase that will manage this socket. - * @param address The address to connect to. - * @param connectTimeout Optional timeout in milliseconds for the connection - * attempt. - */ - TAsyncSocket(TEventBase* evb, - const transport::TSocketAddress& address, - uint32_t connectTimeout = 0); - - /** - * Create a new TAsyncSocket and begin the connection process. - * - * @param evb EventBase that will manage this socket. - * @param ip IP address to connect to (dotted-quad). - * @param port Destination port in host byte order. - * @param connectTimeout Optional timeout in milliseconds for the connection - * attempt. - */ - TAsyncSocket(TEventBase* evb, - const std::string& ip, - uint16_t port, - uint32_t connectTimeout = 0); - - /** - * Create a TAsyncSocket from an already connected socket file descriptor. - * - * Note that while TAsyncSocket enables TCP_NODELAY for sockets it creates - * when connecting, it does not change the socket options when given an - * existing file descriptor. If callers want TCP_NODELAY enabled when using - * this version of the constructor, they need to explicitly call - * setNoDelay(true) after the constructor returns. - * - * @param evb EventBase that will manage this socket. - * @param fd File descriptor to take over (should be a connected socket). - */ - TAsyncSocket(TEventBase* evb, int fd); - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TAsyncSocket's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newSocket(TEventBase* evb) { - return boost::shared_ptr(new TAsyncSocket(evb), - Destructor()); - } - - /** - * Helper function to create a shared_ptr. - */ - static boost::shared_ptr newSocket( - TEventBase* evb, - const transport::TSocketAddress& address, - uint32_t connectTimeout = 0) { - return boost::shared_ptr( - new TAsyncSocket(evb, address, connectTimeout), - Destructor()); - } - - /** - * Helper function to create a shared_ptr. - */ - static boost::shared_ptr newSocket( - TEventBase* evb, - const std::string& ip, - uint16_t port, - uint32_t connectTimeout = 0) { - return boost::shared_ptr( - new TAsyncSocket(evb, ip, port, connectTimeout), - Destructor()); - } - - /** - * Helper function to create a shared_ptr. - */ - static boost::shared_ptr newSocket(TEventBase* evb, int fd) { - return boost::shared_ptr(new TAsyncSocket(evb, fd), - Destructor()); - } - - /** - * Destroy the socket. - * - * TAsyncSocket::destroy() must be called to destroy the socket. - * The normal destructor is private, and should not be invoked directly. - * This prevents callers from deleting a TAsyncSocket while it is invoking a - * callback. - */ - virtual void destroy(); - - /** - * Get the TEventBase used by this socket. - */ - virtual TEventBase* getEventBase() const { - return eventBase_; - } - - /** - * Get the file descriptor used by the TAsyncSocket. - */ - int getFd() const { - return fd_; - } - - /** - * Extract the file descriptor from the TAsyncSocket. - * - * This will immediately cause any installed callbacks to be invoked with an - * error. The TAsyncSocket may no longer be used after the file descriptor - * has been extracted. - * - * Returns the file descriptor. The caller assumes ownership of the - * descriptor, and it will not be closed when the TAsyncSocket is destroyed. - */ - int detachFd(); - - /** - * Class that consists of the input parameters for setsockopt(). - * - * The memory referenced by optval should be valid throughout the - * life cycle of the SocketOption object. - */ - class SocketOption { - public: - SocketOption(): level_(0), optname_(0), optval_(NULL), size_(0) {} - - template - SocketOption(int level, int optname, const T* optval): - level_(level), optname_(optname), optval_(optval), size_(sizeof(T)) {} - - int apply(int fd) const { - return setsockopt(fd, level_, optname_, optval_, size_); - } - - protected: - int level_; - int optname_; - const void *optval_; - size_t size_; - }; - - typedef std::list OptionList; - - static OptionList emptyOptionList; - - /** - * Initiate a connection. - * - * @param callback The callback to inform when the connection attempt - * completes. - * @param address The address to connect to. - * @param timeout A timeout value, in milliseconds. If the connection - * does not succeed within this period, - * callback->connectError() will be invoked. - */ - virtual void connect(ConnectCallback* callback, - const transport::TSocketAddress& address, - int timeout = 0, - const OptionList &options = emptyOptionList) THRIFT_NOEXCEPT; - void connect(ConnectCallback* callback, const std::string& ip, uint16_t port, - int timeout = 00, - const OptionList &options = emptyOptionList) THRIFT_NOEXCEPT; - - /** - * Set the send timeout. - * - * If write requests do not make any progress for more than the specified - * number of milliseconds, fail all pending writes and close the socket. - * - * If write requests are currently pending when setSendTimeout() is called, - * the timeout interval is immediately restarted using the new value. - * - * (See the comments for TAsyncSocket for an explanation of why TAsyncSocket - * provides setSendTimeout() but not setRecvTimeout().) - * - * @param milliseconds The timeout duration, in milliseconds. If 0, no - * timeout will be used. - */ - void setSendTimeout(uint32_t milliseconds); - - /** - * Get the send timeout. - * - * @return Returns the current send timeout, in milliseconds. A return value - * of 0 indicates that no timeout is set. - */ - uint32_t getSendTimeout() const { - return sendTimeout_; - } - - /** - * Set the maximum number of reads to execute from the underlying - * socket each time the TEventBase detects that new ingress data is - * available. The default is unlimited, but callers can use this method - * to limit the amount of data read from the socket per event loop - * iteration. - * - * @param maxReads Maximum number of reads per data-available event; - * a value of zero means unlimited. - */ - void setMaxReadsPerEvent(uint16_t maxReads) { - maxReadsPerEvent_ = maxReads; - } - - /** - * Get the maximum number of reads this object will execute from - * the underlying socket each time the TEventBase detects that new - * ingress data is available. - * - * @returns Maximum number of reads per data-available event; a value - * of zero means unlimited. - */ - uint16_t getMaxReadsPerEvent() const { - return maxReadsPerEvent_; - } - - // Methods inherited from TAsyncTransport - // See the documentation in TAsyncTransport.h - virtual void setReadCallback(ReadCallback* callback); - virtual ReadCallback* getReadCallback() const; - - virtual void write(WriteCallback* callback, const void* buf, size_t bytes); - virtual void writev(WriteCallback* callback, const iovec* vec, size_t count); - virtual void writeChain(WriteCallback* callback, - std::unique_ptr&& buf, - bool cork = false); - - virtual void close(); - virtual void closeNow(); - virtual void closeWithReset(); - virtual void shutdownWrite(); - virtual void shutdownWriteNow(); - - virtual bool readable() const; - virtual bool good() const; - virtual bool error() const; - virtual void attachEventBase(TEventBase* eventBase); - virtual void detachEventBase(); - - virtual void getLocalAddress(transport::TSocketAddress* address) const; - virtual void getPeerAddress(transport::TSocketAddress* address) const; - - virtual bool connecting() const { - return (state_ == STATE_CONNECTING); - } - - // Methods controlling socket options - - /** - * Force writes to be transmitted immediately. - * - * This controls the TCP_NODELAY socket option. When enabled, TCP segments - * are sent as soon as possible, even if it is not a full frame of data. - * When disabled, the data may be buffered briefly to try and wait for a full - * frame of data. - * - * By default, TCP_NODELAY is enabled for TAsyncSocket objects. - * - * This method will fail if the socket is not currently open. - * - * @return Returns 0 if the TCP_NODELAY flag was successfully updated, - * or a non-zero errno value on error. - */ - int setNoDelay(bool noDelay); - - /* - * Set the Flavor of Congestion Control to be used for this Socket - * Please check '/lib/modules//kernel/net/ipv4' for tcp_*.ko - * first to make sure the module is available for plugging in - * Alternatively you can choose from net.ipv4.tcp_allowed_congestion_control - */ - int setCongestionFlavor(const std::string &cname); - - /* - * Forces ACKs to be sent immediately - * - * @return Returns 0 if the TCP_QUICKACK flag was successfully updated, - * or a non-zero errno value on error. - */ - int setQuickAck(bool quickack); - - /** - * Set the send bufsize - */ - int setSendBufSize(size_t bufsize); - - /** - * Set the recv bufsize - */ - int setRecvBufSize(size_t bufsize); - - /** - * Generic API for reading a socket option. - * - * @param level same as the "level" parameter in getsockopt(). - * @param optname same as the "optname" parameter in getsockopt(). - * @param optval pointer to the variable in which the option value should - * be returned. - * @return same as the return value of getsockopt(). - */ - template - int getSockOpt(int level, int optname, T *optval) { - return getsockopt(fd_, level, optname, optval, sizeof(T)); - } - - /** - * Generic API for setting a socket option. - * - * @param level same as the "level" parameter in getsockopt(). - * @param optname same as the "optname" parameter in getsockopt(). - * @param optval the option value to set. - * @return same as the return value of setsockopt(). - */ - template - int setSockOpt(int level, int optname, const T *optval) { - return setsockopt(fd_, level, optname, optval, sizeof(T)); - } - - protected: - enum ReadResultEnum { - READ_EOF = 0, - READ_ERROR = -1, - READ_BLOCKING = -2, - }; - - /** - * Protected destructor. - * - * Users of TAsyncSocket must never delete it directly. Instead, invoke - * destroy() instead. (See the documentation in TDelayedDestruction.h for - * more details.) - */ - ~TAsyncSocket(); - - enum StateEnum { - STATE_UNINIT, - STATE_CONNECTING, - STATE_ESTABLISHED, - STATE_CLOSED, - STATE_ERROR - }; - enum ShutdownFlags { - /// shutdownWrite() called, but we are still waiting on writes to drain - SHUT_WRITE_PENDING = 0x01, - /// writes have been completely shut down - SHUT_WRITE = 0x02, - /** - * Reads have been shutdown. - * - * At the moment we don't distinguish between remote read shutdown - * (received EOF from the remote end) and local read shutdown. We can - * only receive EOF when a read callback is set, and we immediately inform - * it of the EOF. Therefore there doesn't seem to be any reason to have a - * separate state of "received EOF but the local side may still want to - * read". - * - * We also don't currently provide any API for only shutting down the read - * side of a socket. (This is a no-op as far as TCP is concerned, anyway.) - */ - SHUT_READ = 0x04, - }; - - class WriteRequest; - - class WriteTimeout : public TAsyncTimeout { - public: - WriteTimeout(TAsyncSocket* socket, TEventBase* eventBase) - : TAsyncTimeout(eventBase) - , socket_(socket) {} - - virtual void timeoutExpired() THRIFT_NOEXCEPT { - socket_->timeoutExpired(); - } - - private: - TAsyncSocket* socket_; - }; - - class IoHandler : public TEventHandler { - public: - IoHandler(TAsyncSocket* socket, TEventBase* eventBase) - : TEventHandler(eventBase, -1) - , socket_(socket) {} - IoHandler(TAsyncSocket* socket, TEventBase* eventBase, int fd) - : TEventHandler(eventBase, fd) - , socket_(socket) {} - - virtual void handlerReady(uint16_t events) THRIFT_NOEXCEPT { - socket_->ioReady(events); - } - - private: - TAsyncSocket* socket_; - }; - - void init(); - - // event notification methods - void ioReady(uint16_t events) THRIFT_NOEXCEPT; - virtual void checkForImmediateRead() THRIFT_NOEXCEPT; - virtual void handleInitialReadWrite() THRIFT_NOEXCEPT; - virtual void handleRead() THRIFT_NOEXCEPT; - virtual void handleWrite() THRIFT_NOEXCEPT; - virtual void handleConnect() THRIFT_NOEXCEPT; - void timeoutExpired() THRIFT_NOEXCEPT; - - /** - * Attempt to read from the socket. - * - * @param buf The buffer to read data into. - * @param buflen The length of the buffer. - * - * @return Returns the number of bytes read, or READ_EOF on EOF, or - * READ_ERROR on error, or READ_BLOCKING if the operation will - * block. - */ - virtual ssize_t performRead(void* buf, size_t buflen); - - /** - * Populate an iovec array from an IOBuf and attempt to write it. - * - * @param callback Write completion/error callback. - * @param vec Target iovec array; caller retains ownership. - * @param count Number of IOBufs to write, beginning at start of buf. - * @param buf Chain of iovecs. - * @param cork Whether to delay the output until a subsequent - * non-corked write. - */ - void writeChainImpl(WriteCallback* callback, iovec* vec, - size_t count, std::unique_ptr&& buf, bool cork); - - /** - * Write as much data as possible to the socket without blocking, - * and queue up any leftover data to send when the socket can - * handle writes again. - * - * @param callback The callback to invoke when the write is completed. - * @param vec Array of buffers to write; this method will make a - * copy of the vector (but not the buffers themselves) - * if the write has to be completed asynchronously. - * @param count Number of elements in vec. - * @param buf The IOBuf that manages the buffers referenced by - * vec, or a pointer to NULL if the buffers are not - * associated with an IOBuf. Note that ownership of - * the IOBuf is transferred here; upon completion of - * the write, the TAsyncSocket deletes the IOBuf. - * @param cork Whether to delay the write until the next non-corked - * write operation. (Note: may not be supported in all - * subclasses or on all platforms.) - */ - void writeImpl(WriteCallback* callback, const iovec* vec, size_t count, - std::unique_ptr&& buf, bool cork = false); - - /** - * Attempt to write to the socket. - * - * @param vec The iovec array pointing to the buffers to write. - * @param count The length of the iovec array. - * @param haveMore This flag is inherited from TAsyncSocket but is - * not handled here. - * @param countWritten On return, the value pointed to by this parameter - * will contain the number of iovec entries that were - * fully written. - * @param partialWritten On return, the value pointed to by this parameter - * will contain the number of bytes written in the - * partially written iovec entry. - * - * @return Returns the total number of bytes written, or -1 on error. If no - * data can be written immediately, 0 is returned. - */ - virtual ssize_t performWrite(const iovec* vec, uint32_t count, - bool haveMore, uint32_t* countWritten, - uint32_t* partialWritten); - - bool updateEventRegistration(); - - /** - * Update event registration. - * - * @param enable Flags of events to enable. Set it to 0 if no events - * need to be enabled in this call. - * @param disable Flags of events - * to disable. Set it to 0 if no events need to be disabled in this - * call. - * - * @return true iff the update is successful. - */ - bool updateEventRegistration(uint16_t enable, uint16_t disable); - - // error handling methods - void startFail(); - void finishFail(); - void fail(const char* fn, const transport::TTransportException& ex); - void failConnect(const char* fn, const transport::TTransportException& ex); - void failRead(const char* fn, const transport::TTransportException& ex); - void failWrite(const char* fn, WriteCallback* callback, size_t bytesWritten, - const transport::TTransportException& ex); - void failWrite(const char* fn, const transport::TTransportException& ex); - void failAllWrites(const transport::TTransportException& ex); - void invalidState(ConnectCallback* callback); - void invalidState(ReadCallback* callback); - void invalidState(WriteCallback* callback); - - uint8_t state_; ///< StateEnum describing current state - uint8_t shutdownFlags_; ///< Shutdown state (ShutdownFlags) - uint16_t eventFlags_; ///< TEventBase::HandlerFlags settings - int fd_; ///< The socket file descriptor - uint32_t sendTimeout_; ///< The send timeout, in milliseconds - uint16_t maxReadsPerEvent_; ///< Max reads per event loop iteration - TEventBase* eventBase_; ///< The TEventBase - WriteTimeout writeTimeout_; ///< A timeout for connect and write - IoHandler ioHandler_; ///< A TEventHandler to monitor the fd - - ConnectCallback* connectCallback_; ///< ConnectCallback - ReadCallback* readCallback_; ///< ReadCallback - WriteRequest* writeReqHead_; ///< Chain of WriteRequests - WriteRequest* writeReqTail_; ///< End of WriteRequest chain -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TASYNCSOCKET_H_ diff --git a/thrift/lib/cpp/async/TAsyncTimeout.h b/thrift/lib/cpp/async/TAsyncTimeout.h deleted file mode 100644 index 410754c0d5..0000000000 --- a/thrift/lib/cpp/async/TAsyncTimeout.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCTIMEOUT_H_ -#define THRIFT_ASYNC_TASYNCTIMEOUT_H_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include "thrift/lib/cpp/async/TEventUtil.h" -#include - -namespace apache { namespace thrift { namespace async { - -class TEventBase; - -/** - * TAsyncTimeout is used to asynchronously wait for a timeout to occur. - */ -class TAsyncTimeout : private boost::noncopyable { - public: - enum InternalEnum { - INTERNAL, - NORMAL - }; - - /** - * Create a new TAsyncTimeout object, driven by the specified TEventBase. - */ - explicit TAsyncTimeout(TEventBase* eventBase); - - /** - * Create a new internal TAsyncTimeout object. - * - * Internal timeouts are like regular timeouts, but will not stop the - * TEventBase loop from exiting if the only remaining events are internal - * timeouts. - * - * This is useful for implementing fallback timeouts to abort the TEventBase - * loop if the other events have not been processed within a specified time - * period: if the event loop takes too long the timeout will fire and can - * stop the event loop. However, if all other events complete, the event - * loop will exit even though the internal timeout is still installed. - */ - TAsyncTimeout(TEventBase* eventBase, InternalEnum internal); - - /** - * Create a new TAsyncTimeout object, not yet assigned to a TEventBase. - * - * attachEventBase() must be called prior to scheduling the timeout. - */ - TAsyncTimeout(); - - /** - * TAsyncTimeout destructor. - * - * The timeout will be automatically cancelled if it is running. - */ - virtual ~TAsyncTimeout(); - - /** - * timeoutExpired() is invoked when the timeout period has expired. - */ - virtual void timeoutExpired() THRIFT_NOEXCEPT = 0; - - /** - * Schedule the timeout to fire in the specified number of milliseconds. - * - * After the specified number of milliseconds has elapsed, timeoutExpired() - * will be invoked by the TEventBase's main loop. - * - * If the timeout is already running, it will be rescheduled with the - * new timeout value. - * - * @param milliseconds The timeout duration, in milliseconds. - * - * @return Returns true if the timeout was successfully scheduled, - * and false if an error occurred. After an error, the timeout is - * always unscheduled, even if scheduleTimeout() was just - * rescheduling an existing timeout. - */ - bool scheduleTimeout(uint32_t milliseconds); - - /** - * Cancel the timeout, if it is running. - */ - void cancelTimeout(); - - /** - * Returns true if the timeout is currently scheduled. - */ - bool isScheduled() { - return TEventUtil::isEventRegistered(&event_); - } - - /** - * Attach the timeout to a TEventBase. - * - * This may only be called if the timeout is not currently attached to a - * TEventBase (either by using the default constructor, or by calling - * detachEventBase()). - * - * This method must be invoked in the TEventBase's thread. - * - * The internal parameter specifies if this timeout should be treated as an - * internal event. TEventBase::loop() will return when there are no more - * non-internal events remaining. - */ - void attachEventBase(TEventBase* eventBase, - InternalEnum internal = NORMAL); - - /** - * Detach the timeout from its TEventBase. - * - * This may only be called when the timeout is not running. - * Once detached, the timeout may not be scheduled again until it is - * re-attached to a TEventBase by calling attachEventBase(). - * - * This method must be called from the current TEventBase's thread. - */ - void detachEventBase(); - - private: - static void libeventCallback(int fd, short events, void* arg); - - struct event event_; - - /* - * In debug builds, store a pointer to the TEventBase. We only use this - * for some assert() statements, to make sure that TAsyncTimeout is always - * used from the correct thread. - */ -#ifndef NDEBUG - TEventBase* eventBase_; -#endif -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCTIMEOUT_H_ diff --git a/thrift/lib/cpp/async/TAsyncTimeoutSet.h b/thrift/lib/cpp/async/TAsyncTimeoutSet.h deleted file mode 100644 index df5962ba38..0000000000 --- a/thrift/lib/cpp/async/TAsyncTimeoutSet.h +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCTIMEOUTSET_H_ -#define THRIFT_ASYNC_TASYNCTIMEOUTSET_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncTimeout.h" -#include "thrift/lib/cpp/async/TDelayedDestruction.h" - -#include -#include -#include - -namespace apache { namespace thrift { namespace async { - -/** - * TAsyncTimeoutSet exists for efficiently managing a group of timeouts events - * that always have the same timeout interval. - * - * TAsyncTimeoutSet takes advantage of the fact that the timeouts are always - * scheduled in sorted order. (Since each timeout has the same interval, when - * a new timeout is scheduled it will always be the last timeout in the set.) - * This avoids the need to perform any additional sorting of the timeouts - * within a single TAsyncTimeoutSet. - * - * TAsyncTimeoutSet is useful whenever you have a large group of objects that - * each need their own timeout, but with the same interval for each object. - * For example, managing idle timeouts for thousands of connection, or - * scheduling health checks for a large group of servers. - */ -class TAsyncTimeoutSet : private TAsyncTimeout, public TDelayedDestruction { - public: - typedef std::unique_ptr UniquePtr; - - /** - * A callback to be notified when a timeout has expired. - * - * TAsyncTimeoutSet::Callback is very similar to TAsyncTimeout. The primary - * distinction is that TAsyncTimeout can choose its timeout interval each - * time it is scheduled. On the other hand, TAsyncTimeoutSet::Callback - * always uses the timeout interval defined by the TAsyncTimeoutSet where it - * is scheduled. - */ - class Callback { - public: - Callback() - : timeoutSet_(NULL), - expiration_(0), - prev_(NULL), - next_(NULL) {} - - virtual ~Callback(); - - /** - * timeoutExpired() is invoked when the timeout has expired. - */ - virtual void timeoutExpired() THRIFT_NOEXCEPT = 0; - - /** - * Cancel the timeout, if it is running. - * - * If the timeout is not scheduled, cancelTimeout() does nothing. - */ - void cancelTimeout() { - if (timeoutSet_ == NULL) { - // We're not scheduled, so there's nothing to do. - return; - } - cancelTimeoutImpl(); - } - - /** - * Return true if this timeout is currently scheduled, and false otherwise. - */ - bool isScheduled() const { - return timeoutSet_ != NULL; - } - - private: - // Get the time remaining until this timeout expires - std::chrono::milliseconds getTimeRemaining( - std::chrono::milliseconds now) const { - if (now >= expiration_) { - return std::chrono::milliseconds(0); - } - return expiration_ - now; - } - - void setScheduled(TAsyncTimeoutSet* timeoutSet, Callback* prev); - void cancelTimeoutImpl(); - - TAsyncTimeoutSet* timeoutSet_; - std::chrono::milliseconds expiration_; - Callback* prev_; - Callback* next_; - - // Give TAsyncTimeoutSet direct access to our members so it can take care - // of scheduling/cancelling. - friend class TAsyncTimeoutSet; - }; - - /** - * Create a new TAsyncTimeoutSet with the specified interval. - */ - TAsyncTimeoutSet(TEventBase* eventBase, - std::chrono::milliseconds intervalMS, - std::chrono::milliseconds atMostEveryN = - std::chrono::milliseconds(0)); - - /** - * Destroy the TAsyncTimeoutSet. - * - * Normally a TAsyncTimeoutSet should only be destroyed when there are no - * more callbacks pending in the set. If there are timeout callbacks pending - * for this set, destroying the TAsyncTimeoutSet will automatically cancel - * them. If you destroy a TAsyncTimeoutSet with callbacks pending, your - * callback code needs to be aware that the callbacks will never be invoked. - */ - virtual void destroy(); - - /** - * Get the interval for this TAsyncTimeoutSet. - * - * Returns the timeout interval in milliseconds. All callbacks scheduled - * with scheduleTimeout() will be invoked after this amount of time has - * passed since the call to scheduleTimeout(). - */ - std::chrono::milliseconds getInterval() const { - return interval_; - } - - /** - * Schedule the specified Callback to be invoked after the TAsyncTimeoutSet's - * specified timeout interval. - * - * If the callback is already scheduled, this cancels the existing timeout - * before scheduling the new timeout. - */ - void scheduleTimeout(Callback* callback); - - /** - * Limit how frequently this TAsyncTimeoutSet will fire. - */ - void fireAtMostEvery(const std::chrono::milliseconds& ms) { - atMostEveryN_ = ms; - } - - /** - * Get a pointer to the next Callback scheduled to be invoked (may be null). - */ - Callback* front() { return head_; } - const Callback* front() const { return head_; } - - protected: - /** - * Protected destructor. - * - * Use destroy() instead. See the comments in TDelayedDestruction for more - * details. - */ - virtual ~TAsyncTimeoutSet(); - - private: - // Forbidden copy constructor and assignment operator - TAsyncTimeoutSet(TAsyncTimeoutSet const &) = delete; - TAsyncTimeoutSet& operator=(TAsyncTimeoutSet const &) = delete; - - // Private methods to be invoked by TAsyncTimeoutSet::Callback - void headChanged(); - - // Methods inherited from TAsyncTimeout - virtual void timeoutExpired() THRIFT_NOEXCEPT; - - std::chrono::milliseconds interval_; - std::chrono::milliseconds atMostEveryN_; - bool inTimeoutExpired_; - Callback* head_; - Callback* tail_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TASYNCTIMEOUTSET_H_ diff --git a/thrift/lib/cpp/async/TAsyncTransport.h b/thrift/lib/cpp/async/TAsyncTransport.h deleted file mode 100644 index b37bc4037d..0000000000 --- a/thrift/lib/cpp/async/TAsyncTransport.h +++ /dev/null @@ -1,445 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TASYNCTRANSPORT_H_ -#define THRIFT_ASYNC_TASYNCTRANSPORT_H_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include -#include -#include - -namespace folly { -class IOBuf; -} - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -class TTransportException; -} - -namespace async { - -class TEventBase; - -/** - * TAsyncTransport defines an asynchronous API for streaming I/O. - * - * This class provides an API to for asynchronously waiting for data - * on a streaming transport, and for asynchronously sending data. - * - * The APIs for reading and writing are intentionally asymmetric. Waiting for - * data to read is a persistent API: a callback is installed, and is notified - * whenever new data is available. It continues to be notified of new events - * until it is uninstalled. - * - * TAsyncTransport does not provide read timeout functionality, because it - * typically cannot determine when the timeout should be active. Generally, a - * timeout should only be enabled when processing is blocked waiting on data - * from the remote endpoint. For server-side applications, the timeout should - * not be active if the server is currently processing one or more outstanding - * requests on this transport. For client-side applications, the timeout - * should not be active if there are no requests pending on the transport. - * Additionally, if a client has multiple pending requests, it will ususally - * want a separate timeout for each request, rather than a single read timeout. - * - * The write API is fairly intuitive: a user can request to send a block of - * data, and a callback will be informed once the entire block has been - * transferred to the kernel, or on error. TAsyncTransport does provide a send - * timeout, since most callers want to give up if the remote end stops - * responding and no further progress can be made sending the data. - */ -class TAsyncTransport { - public: - class ReadCallback { - public: - virtual ~ReadCallback() {} - - /** - * When data becomes available, getReadBuffer() will be invoked to get the - * buffer into which data should be read. - * - * This method allows the ReadCallback to delay buffer allocation until - * data becomes available. This allows applications to manage large - * numbers of idle connections, without having to maintain a separate read - * buffer for each idle connection. - * - * It is possible that in some cases, getReadBuffer() may be called - * multiple times before readDataAvailable() is invoked. In this case, the - * data will be written to the buffer returned from the most recent call to - * readDataAvailable(). If the previous calls to readDataAvailable() - * returned different buffers, the ReadCallback is responsible for ensuring - * that they are not leaked. - * - * If getReadBuffer() throws an exception, returns a NULL buffer, or - * returns a 0 length, the ReadCallback will be uninstalled and its - * readError() method will be invoked. - * - * getReadBuffer() is not allowed to change the transport state before it - * returns. (For example, it should never uninstall the read callback, or - * set a different read callback.) - * - * @param bufReturn getReadBuffer() should update *bufReturn to contain the - * address of the read buffer. This parameter will never - * be NULL. - * @param lenReturn getReadBuffer() should update *lenReturn to contain the - * maximum number of bytes that may be written to the read - * buffer. This parameter will never be NULL. - */ - virtual void getReadBuffer(void** bufReturn, size_t* lenReturn) = 0; - - /** - * readDataAvailable() will be invoked when data has been successfully read - * into the buffer returned by the last call to getReadBuffer(). - * - * The read callback remains installed after readDataAvailable() returns. - * It must be explicitly uninstalled to stop receiving read events. - * getReadBuffer() will be called at least once before each call to - * readDataAvailable(). getReadBuffer() will also be called before any - * call to readEOF(). - * - * @param len The number of bytes placed in the buffer. - */ - virtual void readDataAvailable(size_t len) THRIFT_NOEXCEPT = 0; - - /** - * readEOF() will be invoked when the transport is closed. - * - * The read callback will be automatically uninstalled immediately before - * readEOF() is invoked. - */ - virtual void readEOF() THRIFT_NOEXCEPT = 0; - - /** - * readError() will be invoked if an error occurs reading from the - * transport. - * - * The read callback will be automatically uninstalled immediately before - * readError() is invoked. - * - * @param ex An exception describing the error that occurred. - */ - virtual void readError(const transport::TTransportException& ex) - THRIFT_NOEXCEPT = 0; - }; - - class WriteCallback { - public: - virtual ~WriteCallback() {} - - /** - * writeSuccess() will be invoked when all of the data has been - * successfully written. - * - * Note that this mainly signals that the buffer containing the data to - * write is no longer needed and may be freed or re-used. It does not - * guarantee that the data has been fully transmitted to the remote - * endpoint. For example, on socket-based transports, writeSuccess() only - * indicates that the data has been given to the kernel for eventual - * transmission. - */ - virtual void writeSuccess() THRIFT_NOEXCEPT = 0; - - /** - * writeError() will be invoked if an error occurs writing the data. - * - * @param bytesWritten The number of bytes that were successfull - * @param ex An exception describing the error that occurred. - */ - virtual void writeError(size_t bytesWritten, - const transport::TTransportException& ex) - THRIFT_NOEXCEPT = 0; - }; - - virtual ~TAsyncTransport() {} - - /** - * Set the read callback. - * - * See the documentation for ReadCallback above for a description of how the - * callback will be invoked. Note that the callback remains installed until - * it is explicitly uninstalled, or until an error occurs. - * - * If a ReadCallback is already installed, it is replaced with the new - * callback. - * - * Note that setReadCallback() may invoke the ReadCallback immediately, - * before returning. - * - * @param callback The callback to invoke when data is available. - * This parameter may be NULL to uninstall the current - * read callback. - */ - virtual void setReadCallback(ReadCallback* callback) = 0; - - /** - * Get the currently installed read callback. - * - * @return Returns a pointer to the installed ReadCallback, or NULL if no - * ReadCallback is installed. - */ - virtual ReadCallback* getReadCallback() const = 0; - - /** - * Write data to the transport. - * - * write() will always return immediately. The WriteCallback will later be - * invoked from the main TEventBase loop when the write has completed. - * - * Additional write attempts may be started before the first write completes. - * The subsequent write requests will be queued, and processed in the order - * in which they were called. - * - * @param callback The callback to invoke when the data has been written. - * The callback may not be NULL. - * @param buf The buffer containing the data to write. The caller is - * responsible for ensuring that this buffer remains valid - * until the callback is invoked. This parameter may not - * be NULL. - * @param bytes The number of bytes to write. - */ - virtual void write(WriteCallback* callback, - const void* buf, size_t bytes) = 0; - - /** - * Write non-contiguous data to the transport. - * - * writev() will always return immediately. The WriteCallback will later be - * invoked from the main TEventBase loop when the write has completed. - * - * Additional write attempts may be started before the first write completes. - * The subsequent write requests will be queued, and processed in the order - * in which they were called. - * - * @param callback The callback to invoke when the data has been written. - * The callback may not be NULL. - * @param vec A pointer to an array of iovec objects. The caller is - * responsible for ensuring that the buffers remain valid - * until the callback is invoked. This parameter may not - * be NULL. - * @param count The number of iovec objects in the vec array. - */ - virtual void writev(WriteCallback* callback, - const iovec* vec, size_t count) = 0; - - /** - * Write a chain of IOBufs to the transport. - * - * writeChain() will always return immediately. The WriteCallback will - * later be invoked from the main TEventBase loop when the write has - * completed. - * - * Additional write attempts may be started before the first write completes. - * The subsequent write requests will be queued, and processed in the order - * in which they were called. - * - * @param callback The callback to invoke when the data has been written. - * The callback may not be NULL. - * @param iob The head of an IOBuf chain. The TAsyncTransport - * will take ownership of this chain and delete it - * after writing. - * @param cork Whether to delay the write until the next non-corked - * write operation. (Note: may not be supported in all - * subclasses or on all platforms.) - */ - virtual void writeChain(WriteCallback* callback, - std::unique_ptr&& iob, - bool cork = false) = 0; - - /** - * Close the transport. - * - * This gracefully closes the transport, waiting for all pending write - * requests to complete before actually closing the underlying transport. - * - * If a read callback is set, readEOF() will be called immediately. If there - * are outstanding write requests, the close will be delayed until all - * remaining writes have completed. No new writes may be started after - * close() has been called. - */ - virtual void close() = 0; - - /** - * Close the transport immediately. - * - * This closes the transport immediately, dropping any outstanding data - * waiting to be written. - * - * If a read callback is set, readEOF() will be called immediately. - * If there are outstanding write requests, these requests will be aborted - * and writeError() will be invoked immediately on all outstanding write - * callbacks. - */ - virtual void closeNow() = 0; - - /** - * Reset the transport immediately. - * - * This closes the transport immediately, sending a reset to the remote peer - * if possible to indicate abnormal shutdown. - * - * Note that not all subclasses implement this reset functionality: some - * subclasses may treat reset() the same as closeNow(). Subclasses that use - * TCP transports should terminate the connection with a TCP reset. - */ - virtual void closeWithReset() { - closeNow(); - } - - /** - * Perform a half-shutdown of the write side of the transport. - * - * The caller should not make any more calls to write() or writev() after - * shutdownWrite() is called. Any future write attempts will fail - * immediately. - * - * Not all transport types support half-shutdown. If the underlying - * transport does not support half-shutdown, it will fully shutdown both the - * read and write sides of the transport. (Fully shutting down the socket is - * better than doing nothing at all, since the caller may rely on the - * shutdownWrite() call to notify the other end of the connection that no - * more data can be read.) - * - * If there is pending data still waiting to be written on the transport, - * the actual shutdown will be delayed until the pending data has been - * written. - * - * Note: There is no corresponding shutdownRead() equivalent. Simply - * uninstall the read callback if you wish to stop reading. (On TCP sockets - * at least, shutting down the read side of the socket is a no-op anyway.) - */ - virtual void shutdownWrite() = 0; - - /** - * Perform a half-shutdown of the write side of the transport. - * - * shutdownWriteNow() is identical to shutdownWrite(), except that it - * immediately performs the shutdown, rather than waiting for pending writes - * to complete. Any pending write requests will be immediately failed when - * shutdownWriteNow() is called. - */ - virtual void shutdownWriteNow() = 0; - - /** - * Determine if transport is open and ready to read or write. - * - * Note that this function returns false on EOF; you must also call error() - * to distinguish between an EOF and an error. - * - * @return true iff the transport is open and ready, false otherwise. - */ - virtual bool good() const = 0; - - /** - * Determine if the transport is readable or not. - * - * @return true iff the transport is readable, false otherwise. - */ - virtual bool readable() const = 0; - - /** - * Determine if transport is connected to the endpoint - * - * @return false iff the transport is connected, otherwise true - */ - virtual bool connecting() const = 0; - - /** - * Determine if an error has occurred with this transport. - * - * @return true iff an error has occurred (not EOF). - */ - virtual bool error() const = 0; - - /** - * Attach the transport to a TEventBase. - * - * This may only be called if the transport is not currently attached to a - * TEventBase (by an earlier call to detachEventBase()). - * - * This method must be invoked in the TEventBase's thread. - */ - virtual void attachEventBase(TEventBase* eventBase) = 0; - - /** - * Detach the transport from its TEventBase. - * - * This may only be called when the transport is idle and has no reads or - * writes pending. Once detached, the transport may not be used again until - * it is re-attached to a TEventBase by calling attachEventBase(). - * - * This method must be called from the current TEventBase's thread. - */ - virtual void detachEventBase() = 0; - - /** - * Get the TEventBase used by this transport. - * - * Returns NULL if this transport is not currently attached to a TEventBase. - */ - virtual TEventBase* getEventBase() const = 0; - - /** - * Set the send timeout. - * - * If write requests do not make any progress for more than the specified - * number of milliseconds, fail all pending writes and close the transport. - * - * If write requests are currently pending when setSendTimeout() is called, - * the timeout interval is immediately restarted using the new value. - * - * @param milliseconds The timeout duration, in milliseconds. If 0, no - * timeout will be used. - */ - virtual void setSendTimeout(uint32_t milliseconds) = 0; - - /** - * Get the send timeout. - * - * @return Returns the current send timeout, in milliseconds. A return value - * of 0 indicates that no timeout is set. - */ - virtual uint32_t getSendTimeout() const = 0; - - /** - * Get the address of the local endpoint of this transport. - * - * This function may throw TTransportException on error. - * - * @param address The local address will be stored in the specified - * TSocketAddress. - */ - virtual void getLocalAddress(transport::TSocketAddress* address) const = 0; - - /** - * Get the address of the remote endpoint to which this transport is - * connected. - * - * This function may throw TTransportException on error. - * - * @param address The remote endpoint's address will be stored in the - * specified TSocketAddress. - */ - virtual void getPeerAddress(transport::TSocketAddress* address) const = 0; -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TASYNCTRANSPORT_H_ diff --git a/thrift/lib/cpp/async/TBinaryAsyncChannel.h b/thrift/lib/cpp/async/TBinaryAsyncChannel.h deleted file mode 100644 index 2b8b2f5e41..0000000000 --- a/thrift/lib/cpp/async/TBinaryAsyncChannel.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TBINARYASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TBINARYASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TUnframedAsyncChannel.h" - -namespace apache { namespace thrift { namespace async { - -namespace detail { - -/** - * A class to determine the end of a raw TBinaryProtocol message. - */ -class TBinaryACProtocolTraits { - public: - TBinaryACProtocolTraits() : strictRead_(true) {} - - // Methods required by TUnframedACReadState - bool getMessageLength(uint8_t* buffer, - uint32_t bufferLength, - uint32_t* messageLength); - - // Methods specific to TBinaryAsyncChannel - - void setStrictRead(bool strictRead) { - strictRead_ = strictRead; - } - bool getStrictRead() const { - return strictRead_; - } - - private: - bool strictRead_; -}; - -} // namespace detail - -/** - * TBinaryAsyncChannel - * - * This is a TAsyncChannel implementation that reads and writes raw (unframed) - * messages encoded using TBinaryProtocol. - */ -class TBinaryAsyncChannel : - public TUnframedAsyncChannel { - private: - typedef TUnframedAsyncChannel Parent; - - public: - TBinaryAsyncChannel(const boost::shared_ptr& transport) - : Parent(transport) {} - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TBinaryAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr( - new TBinaryAsyncChannel(transport), Destructor()); - } - - // Note that we inherit setMaxMessageSize() and getMaxMessageSize() - // from TUnframedAsyncChannel. - - void setStrictRead(bool strictRead) { - readState_.getProtocolTraits()->setStrictRead(strictRead); - } - bool getStrictRead() const { - return readState_.getProtocolTraits()->getStrictRead(); - } - - protected: - /** - * Protected destructor. - * - * Users of TBinaryAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~TBinaryAsyncChannel() { } -}; - -class TBinaryAsyncChannelFactory : public TStreamAsyncChannelFactory { - public: - TBinaryAsyncChannelFactory() - : maxMessageSize_(0x7fffffff) - , recvTimeout_(0) - , sendTimeout_(0) - , strictRead_(true) {} - - void setMaxMessageSize(uint32_t bytes) { - maxMessageSize_ = bytes; - } - - void setRecvTimeout(uint32_t milliseconds) { - recvTimeout_ = milliseconds; - } - - void setSendTimeout(uint32_t milliseconds) { - sendTimeout_ = milliseconds; - } - - void setStrictRead(bool strict) { - strictRead_ = strict; - } - - virtual boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - boost::shared_ptr channel( - TBinaryAsyncChannel::newChannel(transport)); - transport->setSendTimeout(sendTimeout_); - channel->setMaxMessageSize(maxMessageSize_); - channel->setRecvTimeout(recvTimeout_); - channel->setStrictRead(strictRead_); - return channel; - } - - private: - uint32_t maxMessageSize_; - uint32_t recvTimeout_; - uint32_t sendTimeout_; - bool strictRead_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TBINARYASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TDelayedDestruction.h b/thrift/lib/cpp/async/TDelayedDestruction.h deleted file mode 100644 index 2e484765c7..0000000000 --- a/thrift/lib/cpp/async/TDelayedDestruction.h +++ /dev/null @@ -1,178 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TDELAYEDDESTRUCTION_H_ -#define THRIFT_ASYNC_TDELAYEDDESTRUCTION_H_ 1 - -#include -#include -#include - -namespace apache { namespace thrift { namespace async { - -/** - * TDelayedDestruction is a helper class to ensure objects are not deleted - * while they still have functions executing in a higher stack frame. - * - * This is useful for objects that invoke callback functions, to ensure that a - * callback does not destroy the calling object. - * - * Classes needing this functionality should: - * - derive from TDelayedDestruction - * - make their destructor private or protected, so it cannot be called - * directly - * - create a DestructorGuard object on the stack in each public method that - * may invoke a callback - * - * TDelayedDestruction does not perform any locking. It is intended to be used - * only from a single thread. - */ -class TDelayedDestruction : private boost::noncopyable { - public: - /** - * Helper class to allow TDelayedDestruction classes to be used with - * boost::shared_ptr. - * - * This class can be specified as the destructor argument when creating the - * shared_ptr, and it will destroy the guarded class properly when all - * shared_ptr references are released. - */ - class Destructor { - public: - void operator()(TDelayedDestruction* dd) const { - dd->destroy(); - } - }; - - /** - * destroy() requests destruction of the object. - * - * This method will destroy the object after it has no more functions running - * higher up on the stack. (i.e., No more DestructorGuard objects exist for - * this object.) This method must be used instead of the destructor. - */ - virtual void destroy() { - // If guardCount_ is not 0, just set destroyPending_ to delay - // actual destruction. - if (guardCount_ != 0) { - destroyPending_ = true; - } else { - destroyNow(false); - } - } - - /** - * Classes should create a DestructorGuard object on the stack in any - * function that may invoke callback functions. - * - * The DestructorGuard prevents the guarded class from being destroyed while - * it exists. Without this, the callback function could delete the guarded - * object, causing problems when the callback function returns and the - * guarded object's method resumes execution. - */ - class DestructorGuard { - public: - explicit DestructorGuard(TDelayedDestruction* dd) : dd_(dd) { - ++dd_->guardCount_; - assert(dd_->guardCount_ > 0); // check for wrapping - } - - ~DestructorGuard() { - assert(dd_->guardCount_ > 0); - --dd_->guardCount_; - if (dd_->guardCount_ == 0 && dd_->destroyPending_) { - dd_->destroyNow(true); - } - } - - private: - TDelayedDestruction* dd_; - }; - - protected: - /** - * destroyNow() is invoked to actually destroy the object, after destroy() - * has been called and no more DestructorGuard objects exist. By default it - * calls "delete this", but subclasses may override this behavior. - * - * @param delayed This parameter is true if destruction was delayed because - * of a DestructorGuard object, or false if destroyNow() is - * being called directly from destroy(). - */ - virtual void destroyNow(bool delayed) { - delete this; - (void)delayed; // prevent unused variable warnings - } - - TDelayedDestruction() - : guardCount_(0) - , destroyPending_(false) {} - - /** - * Protected destructor. - * - * Making this protected ensures that users cannot delete TDelayedDestruction - * objects directly, and that everyone must use destroy() instead. - * Subclasses of TDelayedDestruction must also define their destructors as - * protected or private in order for this to work. - * - * This also means that TDelayedDestruction objects cannot be created - * directly on the stack; they must always be dynamically allocated on the - * heap. - * - * In order to use a TDelayedDestruction object with a shared_ptr, create the - * shared_ptr using a TDelayedDestruction::Destructor as the second argument - * to the shared_ptr constructor. - */ - virtual ~TDelayedDestruction() {} - - /** - * Get the number of DestructorGuards currently protecting this object. - * - * This is primarily intended for debugging purposes, such as asserting - * that an object has at least 1 guard. - */ - uint32_t getDestructorGuardCount() const { - return guardCount_; - } - - private: - /** - * guardCount_ is incremented by DestructorGuard, to indicate that one of - * the TDelayedDestruction object's methods is currently running. - * - * If destroy() is called while guardCount_ is non-zero, destruction will - * be delayed until guardCount_ drops to 0. This allows TDelayedDestruction - * objects to invoke callbacks without having to worry about being deleted - * before the callback returns. - */ - uint32_t guardCount_; - - /** - * destroyPending_ is set to true if destoy() is called while guardCount_ is - * non-zero. - * - * If destroyPending_ is true, the object will be destroyed the next time - * guardCount_ drops to 0. - */ - bool destroyPending_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TDELAYEDDESTRUCTION_H_ diff --git a/thrift/lib/cpp/async/TEventBase.h b/thrift/lib/cpp/async/TEventBase.h deleted file mode 100644 index 42009a756d..0000000000 --- a/thrift/lib/cpp/async/TEventBase.h +++ /dev/null @@ -1,397 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_ASYNC_TEVENTBASE_H_ -#define THRIFT_ASYNC_TEVENTBASE_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/async/TAsyncTimeout.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TTransportUtils.h" -#include "thrift/lib/cpp/concurrency/ThreadManager.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include // libevent -#include -#include - -namespace apache { namespace thrift { namespace async { - -typedef std::tr1::function Cob; -template -class TNotificationQueue; - -/** - * This class is a wrapper for all asynchronous I/O processing functionality - * used in thrift. - * - * TEventBase provides a main loop that notifies TEventHandler callback objects - * when I/O is ready on a file descriptor, and notifies TAsyncTimeout objects - * when a specified timeout has expired. More complex, higher-level callback - * mechanisms can then be built on top of TEventHandler and TAsyncTimeout. - * - * A TEventBase object can only drive an event loop for a single thread. To - * take advantage of multiple CPU cores, most asynchronous I/O servers have one - * thread per CPU, and use a separate TEventBase for each thread. - * - * In general, most TEventBase methods may only be called from the thread - * running the TEventBase's loop. There are a few exceptions to this rule, for - * methods that are explicitly intended to allow communication with a - * TEventBase from other threads. When it is safe to call a method from - * another thread it is explicitly listed in the method comments. - */ -class TEventBase : private boost::noncopyable { - public: - /** - * A callback interface to use with runInLoop() - * - * Derive from this class if you need to delay some code execution until the - * next iteration of the event loop. This allows you to schedule code to be - * invoked from the top-level of the loop, after your immediate callers have - * returned. - * - * If a LoopCallback object is destroyed while it is scheduled to be run in - * the next loop iteration, it will automatically be cancelled. - */ - class LoopCallback { - public: - virtual ~LoopCallback() {} - - virtual void runLoopCallback() THRIFT_NOEXCEPT = 0; - void cancelLoopCallback() { - hook_.unlink(); - } - - bool isLoopCallbackScheduled() const { - return hook_.is_linked(); - } - - private: - typedef boost::intrusive::list_member_hook< - boost::intrusive::link_mode > ListHook; - - ListHook hook_; - - typedef boost::intrusive::list< - LoopCallback, - boost::intrusive::member_hook, - boost::intrusive::constant_time_size > List; - - // TEventBase needs access to LoopCallbackList (and therefore to hook_) - friend class TEventBase; - }; - - /** - * Create a new TEventBase object. - */ - TEventBase(); - - /** - * Create a new TEventBase object that will use the specified libevent - * event_base object to drive the event loop. - * - * The TEventBase will take ownership of this event_base, and will call - * event_base_free(evb) when the TEventBase is destroyed. - */ - explicit TEventBase(event_base* evb); - ~TEventBase(); - - /** - * Runs the event loop. - * - * loop() will loop waiting for I/O or timeouts and invoking TEventHandler - * and TAsyncTimeout callbacks as their events become ready. loop() will - * only return when there are no more events remaining to process, or after - * terminateLoopSoon() has been called. - * - * loop() may be called again to restart event processing after a previous - * call to loop() or loopForever() has returned. - * - * Returns true if the loop completed normally (if it processed all - * outstanding requests, or if terminateLoopSoon() was called). If an error - * occurs waiting for events, false will be returned. - */ - bool loop(); - - /** - * Runs the event loop. - * - * loopForever() behaves like loop(), except that it keeps running even if - * when there are no more user-supplied TEventHandlers or TAsyncTimeouts - * registered. It will only return after terminateLoopSoon() has been - * called. - * - * This is useful for callers that want to wait for other threads to call - * runInEventBaseThread(), even when there are no other scheduled events. - * - * loopForever() may be called again to restart event processing after a - * previous call to loop() or loopForever() has returned. - * - * Throws a TLibraryException if an error occurs. - */ - void loopForever(); - - /** - * Causes the event loop to exit soon. - * - * This will cause an existing call to loop() or loopForever() to stop event - * processing and return, even if there are still events remaining to be - * processed. - * - * It is safe to call terminateLoopSoon() from another thread to cause loop() - * to wake up and return in the TEventBase loop thread. terminateLoopSoon() - * may also be called from the loop thread itself (for example, a - * TEventHandler or TAsyncTimeout callback may call terminateLoopSoon() to - * cause the loop to exit after the callback returns.) - * - * Note that the caller is responsible for ensuring that cleanup of all event - * callbacks occurs properly. Since terminateLoopSoon() causes the loop to - * exit even when there are pending events present, there may be remaining - * callbacks present waiting to be invoked. If the loop is later restarted - * pending events will continue to be processed normally, however if the - * TEventBase is destroyed after calling terminateLoopSoon() it is the - * caller's responsibility to ensure that cleanup happens properly even if - * some outstanding events are never processed. - */ - void terminateLoopSoon(); - - /** - * Adds the given callback to a queue of things run after the current pass - * through the event loop completes. Note that if this callback calls - * runInLoop() the new callback won't be called until the main event loop - * has gone through a cycle. - * - * This method may only be called from the TEventBase's thread. This - * essentially allows an event handler to schedule an additional callback to - * be invoked after it returns. - * - * Use runInEventBaseThread() to schedule functions from another thread. - */ - void runInLoop(LoopCallback* callback); - - /** - * Convenience function to call runInLoop() with a tr1::function. - * - * This creates a LoopCallback object to wrap the tr1::function, and invoke - * the tr1::function when the loop callback fires. This is slightly more - * expensive than defining your own LoopCallback, but more convenient in - * areas that aren't performance sensitive where you just want to use - * tr1::bind. (tr1::bind is fairly slow on even by itself.) - * - * This method may only be called from the TEventBase's thread. This - * essentially allows an event handler to schedule an additional callback to - * be invoked after it returns. - * - * Use runInEventBaseThread() to schedule functions from another thread. - */ - void runInLoop(const Cob& c); - - /** - * Run the specified function in the TEventBase's thread. - * - * This method is thread-safe, and may be called from another thread. - * - * If runInEventBaseThread() is called when the TEventBase loop is not - * running, the function call will be delayed until the next time the loop is - * started. - * - * If runInEventBaseThread() returns true the function has successfully been - * scheduled to run in the loop thread. However, if the loop is terminated - * (and never later restarted) before it has a chance to run the requested - * function, the function may never be run at all. The caller is responsible - * for handling this situation correctly if they may terminate the loop with - * outstanding runInEventBaseThread() calls pending. - * - * If two calls to runInEventBaseThread() are made from the same thread, the - * functions will always be run in the order that they were scheduled. - * Ordering between functions scheduled from separate threads is not - * guaranteed. - * - * @param fn The function to run. The function must not throw any - * exceptions. - * @param arg An argument to pass to the function. - * - * @return Returns true if the function was successfully scheduled, or false - * if there was an error scheduling the function. - */ - template - bool runInEventBaseThread(void (*fn)(T*), T* arg) { - return runInEventBaseThread(reinterpret_cast(fn), - reinterpret_cast(arg)); - } - - bool runInEventBaseThread(void (*fn)(void*), void* arg); - - /** - * Run the specified function in the TEventBase's thread - * - * This version of runInEventBaseThread() takes a tr1::function object. - * Note that this is less efficient than the version that takes a plain - * function pointer and void* argument, as it has to allocate memory to copy - * the tr1::function object. - * - * If the TEventBase loop is terminated before it has a chance to run this - * function, the allocated memory will be leaked. The caller is responsible - * for ensuring that the TEventBase loop is not terminated before this - * function can run. - * - * The function must not throw any exceptions. - */ - bool runInEventBaseThread(const std::tr1::function& fn); - - /** - * Runs the given Cob at some time after the specified number of - * milliseconds. (No guarantees exactly when.) - * - * @return true iff the cob was successfully registered. - */ - bool runAfterDelay(const Cob& c, int milliseconds); - - /** - * Set the maximum desired latency in us and provide a callback which will be - * called when that latency is exceeded. - */ - void setMaxLatency(int64_t maxLatency, const Cob& maxLatencyCob) { - maxLatency_ = maxLatency; - maxLatencyCob_ = maxLatencyCob; - } - /** - * Set smoothing coefficient for loop load average; # of milliseconds - * for exp(-1) (1/2.71828...) decay. - */ - void setLoadAvgMsec(uint32_t ms); - - /** - * Get the average loop time in microseconds (an exponentially-smoothed ave) - */ - double getAvgLoopTime() const { - return avgLoopTime_; - } - - /** - * Verify that current thread is the TEventBase thread, if the TEventBase is - * running. - * - * This is primarily intended for debugging, to assert that functions that - * register or unregister events are only ever invoked in the TEventBase's - * thread. - */ - bool isInEventBaseThread() const { - return !running_ || pthread_equal(loopThread_, pthread_self()); - } - - // --------- interface to underlying libevent base ------------ - // Avoid using these functions if possible. These functions are not - // guaranteed to always be present if we ever provide alternative TEventBase - // implementations that do not use libevent internally. - event_base* getLibeventBase() const { return evb_; } - static const char* getLibeventVersion() { return event_get_version(); } - static const char* getLibeventMethod() { return event_get_method(); } - - private: - // --------- libevent callbacks (not for client use) ------------ - - /** - * Called after a delay to break out of an idle event loop. We need to - * use this instead of event_base_loopexit() since the latter installs - * an event within libevent which is queued until it expires. Installing - * our own timed event lets us delete it when another event causes the - * loop to exit earlier.. - */ - static void loopTimerCallback(int fd, short which, void* arg); - - static void runTr1FunctionPtr(std::tr1::function* fn); - - // small object used as a callback arg with enough info to execute the - // appropriate client-provided Cob - class CobTimeout : public TAsyncTimeout { - public: - CobTimeout(TEventBase* b, const Cob& c) : TAsyncTimeout(b), cob_(c) {} - - virtual void timeoutExpired() THRIFT_NOEXCEPT; - - private: - Cob cob_; - - public: - typedef boost::intrusive::list_member_hook< - boost::intrusive::link_mode > ListHook; - - ListHook hook; - - typedef boost::intrusive::list< - CobTimeout, - boost::intrusive::member_hook, - boost::intrusive::constant_time_size > List; - }; - - typedef LoopCallback::List LoopCallbackList; - class FunctionRunner; - - // executes any callbacks queued by runInLoop() - void runLoopCallbacks(); - - void initNotificationQueue(); - - CobTimeout::List pendingCobTimeouts_; - - LoopCallbackList loopCallbacks_; - - // stop_ is set by terminateLoopSoon() and is used by the main loop - // to determine if it should exit - bool stop_; - // running_ is set to true while loop() is running - bool running_; - // The ID of the thread running the main loop. - // Only valid while running_ is true. - pthread_t loopThread_; - - // pointer to underlying event_base class doing the heavy lifting - event_base* evb_; - - // A notification queue for runInEventBaseThread() to use - // to send function requests to the TEventBase thread. - std::unique_ptr>> queue_; - std::unique_ptr fnRunner_; - - // limit for latency in microseconds (0 disables) - int64_t maxLatency_; - - // smoothed loop time used to invoke latency callbacks; differs from - // avgLoopTime_ in that it's scaled down after triggering a callback - // to reduce spamminess - double maxLatencyLoopTime_; - - // exponentially-smoothed average loop time for latency-limiting - double avgLoopTime_; - - // set to true if the event_base_loop(EVLOOP_ONCE) returned because - // the loop timeout fired, rather than because it found events to process - bool loopTimedOut_; - - // factor used for exponential smoothing of load average - double expCoeff_; - - // callback called when latency limit is exceeded - Cob maxLatencyCob_; - - // we'll wait this long before running deferred callbacks if the event - // loop is idle. - static const int kDEFAULT_IDLE_WAIT_USEC = 20000; // 20ms -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TEVENTBASE_H_ diff --git a/thrift/lib/cpp/async/TEventBaseManager.h b/thrift/lib/cpp/async/TEventBaseManager.h deleted file mode 100644 index d6d1ae0101..0000000000 --- a/thrift/lib/cpp/async/TEventBaseManager.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TEVENTBASEMANAGER_H -#define THRIFT_ASYNC_TEVENTBASEMANAGER_H 1 - -#include "thrift/lib/cpp/concurrency/ThreadLocal.h" - -namespace apache { namespace thrift { namespace async { - -class TEventBase; - -/** - * Manager for per-thread TEventBase objects. - * This class will find or create a TEventBase for the current - * thread, associated with thread-specific storage for that thread. - * Although a typical application will generally only have one - * TEventBaseManager, there is no restriction on multiple instances; - * the TEventBases belong to one instance are isolated from those of - * another. - */ -class TEventBaseManager { - public: - TEventBaseManager() {} - ~TEventBaseManager() {} - - /** - * Get the TEventBase for this thread, or create one if none exists yet. - * - * If no TEventBase exists for this thread yet, a new one will be created and - * returned. May throw std::bad_alloc if allocation fails. - */ - TEventBase* getEventBase() const { - // localStore_.get() will never return NULL. - // InfoManager::allocate() will throw an exception instead if it cannot - // allocate a new EventBaseInfo or TEventBase. - return localStore_.get()->eventBase; - } - - /** - * Get the TEventBase for this thread. - * - * Returns NULL if no TEventBase has been created for this thread yet. - */ - TEventBase* getExistingEventBase() const { - EventBaseInfo* info = localStore_.getNoAlloc(); - if (info == NULL) { - return NULL; - } - return info->eventBase; - } - - /** - * Set the TEventBase to be used by this thread. - * - * This may only be called if no TEventBase has been defined for this thread - * yet. If a TEventBase is already defined for this thread, a - * TLibraryException is thrown. std::bad_alloc may also be thrown if - * allocation fails while setting the TEventBase. - * - * This should typically be invoked by the code that will call loop() on the - * TEventBase, to make sure the TEventBaseManager points to the correct - * TEventBase that is actually running in this thread. - */ - void setEventBase(TEventBase *eventBase, bool takeOwnership); - - /** - * Clear the TEventBase for this thread. - * - * This can be used if the code driving the TEventBase loop() has finished - * the loop and new events should no longer be added to the TEventBase. - */ - void clearEventBase(); - - private: - struct EventBaseInfo { - EventBaseInfo(TEventBase *evb, bool owned) - : eventBase(evb), - owned(owned) {} - - TEventBase *eventBase; - bool owned; - }; - - class InfoManager { - public: - EventBaseInfo* allocate(); - void destroy(EventBaseInfo* info); - - void replace(EventBaseInfo* oldInfo, EventBaseInfo* newInfo) { - if (oldInfo != newInfo) { - destroy(oldInfo); - } - } - }; - - // Forbidden copy constructor and assignment opererator - TEventBaseManager(TEventBaseManager const &); - TEventBaseManager& operator=(TEventBaseManager const &); - - concurrency::ThreadLocal localStore_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TEVENTBASEMANAGER_H diff --git a/thrift/lib/cpp/async/TEventConnection.h b/thrift/lib/cpp/async/TEventConnection.h deleted file mode 100644 index c46c749ba9..0000000000 --- a/thrift/lib/cpp/async/TEventConnection.h +++ /dev/null @@ -1,239 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_ASYNC_TEVENTCONNECTION_H_ -#define THRIFT_ASYNC_TEVENTCONNECTION_H_ 1 - -#include "thrift/lib/cpp/server/TConnectionContext.h" -#include "thrift/lib/cpp/transport/TSocketAddress.h" -#include "thrift/lib/cpp/async/TEventServer.h" -#include -#include - -namespace apache { namespace thrift { - -class TProcessor; - -namespace protocol { -class TProtocol; -} - -namespace server { -class TServerEventHandler; -} - -namespace transport { -class TMemoryBuffer; -} - -namespace async { - -class TAsyncEventChannel; -class TAsyncProcessor; -class TEventWorker; -class TAsyncSocket; -class TaskCompletionMessage; - -/** - * Represents a connection that is handled via libevent. This connection - * essentially encapsulates a socket that has some associated libevent state. - */ -class TEventConnection : private boost::noncopyable, - public TEventBase::LoopCallback { - public: - - /** - * Constructor for TEventConnection. - * - * @param asyncSocket shared pointer to the async socket - * @param address the peer address of this connection - * @param worker the worker instance that is handling this connection - */ - TEventConnection(boost::shared_ptr asyncSocket, - const transport::TSocketAddress* address, - TEventWorker* worker, TEventServer::TransportType transport); - - /** - * (Re-)Initialize a TEventConnection. We break this out from the - * constructor to allow for pooling. - * - * @param asyncSocket shared pointer to the async socket - * @param address the peer address of this connection - * @param worker the worker instance that is handling this connection - */ - void init(boost::shared_ptr asyncSocket, - const transport::TSocketAddress* address, - TEventWorker* worker, TEventServer::TransportType transport); - - /// First cause -- starts i/o on connection - void start(); - - /// Shut down the connection even if it's OK; used for load reduction. - void stop() { - shutdown_ = true; - } - - /// Return a pointer to the worker that owns us - TEventWorker* getWorker() const { - return worker_; - } - - /// cause the notification callback to occur within the appropriate context - bool notifyCompletion(TaskCompletionMessage &&msg); - - /// Run scheduled read when there are too many reads on the stack - void runLoopCallback() THRIFT_NOEXCEPT; - - boost::shared_ptr getProcessor() const { - return processor_; - } - - boost::shared_ptr - getInputProtocol() const { - return inputProtocol_; - } - - boost::shared_ptr - getOutputProtocol() const { - return outputProtocol_; - } - - /// Get the per-server event handler set for this server, if any - boost::shared_ptr - getServerEventHandler() const { - return serverEventHandler_; - } - - /// Get the TConnectionContext for this connection - server::TConnectionContext* getConnectionContext() { - return &context_; - } - - /// Destructor -- close down the connection. - ~TEventConnection(); - - /** - * Check the size of our memory buffers and resize if needed. Do not call - * when a call is in progress. - */ - void checkBufferMemoryUsage(); - - private: - class ConnContext : public server::TConnectionContext { - public: - void init(const transport::TSocketAddress* address, - boost::shared_ptr inputProtocol, - boost::shared_ptr outputProtocol) { - address_ = *address; - inputProtocol_ = inputProtocol; - outputProtocol_ = outputProtocol; - } - - virtual const transport::TSocketAddress* getPeerAddress() const { - return &address_; - } - - void reset() { - address_.reset(); - cleanupUserData(); - } - - // TODO(dsanduleac): implement the virtual getInputProtocol() & such - - virtual boost::shared_ptr getInputProtocol() const { - // from TEventConnection - return inputProtocol_; - } - - virtual boost::shared_ptr getOutputProtocol() const { - return outputProtocol_; - } - - private: - transport::TSocketAddress address_; - boost::shared_ptr inputProtocol_; - boost::shared_ptr outputProtocol_; - }; - - void readNextRequest(); - void handleReadSuccess(); - void handleReadFailure(); - void handleAsyncTaskComplete(bool success); - void handleSendSuccess(); - void handleSendFailure(); - - void handleEOF(); - void handleFailure(const char* msg); - void cleanup(); - - //! The worker instance handling this connection. - TEventWorker* worker_; - - //! This connection's socket. - boost::shared_ptr asyncSocket_; - - //! Transport that the processor reads from. - boost::shared_ptr inputTransport_; - - //! Transport that the processor writes to. - boost::shared_ptr outputTransport_; - - /// Largest size of read buffer seen since buffer was constructed - size_t largestReadBufferSize_; - - /// Largest size of write buffer seen since buffer was constructed - size_t largestWriteBufferSize_; - - /// Count of the number of calls for use with getResizeBufferEveryN(). - int32_t callsForResize_; - - //! Protocol decoder. - boost::shared_ptr inputProtocol_; - - //! Protocol encoder. - boost::shared_ptr outputProtocol_; - - //! Channel that actually performs the socket I/O and callbacks. - TAsyncEventChannel* asyncChannel_; - - /// Count of outstanding processor callbacks (generally 0 or 1). - int32_t processorActive_; - - //! Count of the number of handleReadSuccess frames on the stack - int32_t readersActive_; - - /// Sync processor if we're in queuing mode - boost::shared_ptr processor_; - - /// Flag used to shut down connection (used for load-shedding mechanism). - bool shutdown_; - - /// Flag indicating that we have deferred closing down (processor was active) - bool closing_; - - /// The per-server event handler set for this erver, if any - boost::shared_ptr - serverEventHandler_; - - /// per-connection context - ConnContext context_; - - /// Our processor - boost::shared_ptr asyncProcessor_; - - /// So that TEventWorker can call handleAsyncTaskComplete(); - friend class TEventWorker; - - /// Make the server a friend so it can manage tasks when overloaded - friend class TEventServer; - - /// Make an async task a friend so it can communicate a cleanup() to us. - friend class TEventTask; -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TEVENTCONNECTION_H_ diff --git a/thrift/lib/cpp/async/TEventHandler.h b/thrift/lib/cpp/async/TEventHandler.h deleted file mode 100644 index 0d720ed311..0000000000 --- a/thrift/lib/cpp/async/TEventHandler.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TEVENTHANDLER_H_ -#define THRIFT_ASYNC_TEVENTHANDLER_H_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include "thrift/lib/cpp/async/TEventUtil.h" -#include -#include - -namespace apache { namespace thrift { namespace async { - -class TEventBase; - -/** - * The TEventHandler class is used to asynchronously wait for events on a file - * descriptor. - * - * Users that wish to wait on I/O events should derive from TEventHandler and - * implement the handlerReady() method. - */ -class TEventHandler : private boost::noncopyable { - public: - enum EventFlags { - NONE = 0, - READ = EV_READ, - WRITE = EV_WRITE, - READ_WRITE = (READ | WRITE), - PERSIST = EV_PERSIST - }; - - /** - * Create a new TEventHandler object. - * - * @param eventBase The TEventBase to use to drive this event handler. - * This may be NULL, in which case the TEventBase must be - * set separately using initHandler() or attachEventBase() - * before the handler can be registered. - * @param fd The file descriptor that this TEventHandler will - * monitor. This may be -1, in which case the file - * descriptor must be set separately using initHandler() or - * changeHandlerFD() before the handler can be registered. - */ - explicit TEventHandler(TEventBase* eventBase = NULL, int fd = -1); - - /** - * TEventHandler destructor. - * - * The event will be automatically unregistered if it is still registered. - */ - virtual ~TEventHandler(); - - /** - * handlerReady() is invoked when the handler is ready. - * - * @param events A bitset indicating the events that are ready. - */ - virtual void handlerReady(uint16_t events) THRIFT_NOEXCEPT = 0; - - /** - * Register the handler. - * - * If the handler is already registered, the registration will be updated - * to wait on the new set of events. - * - * @param events A bitset specifying the events to monitor. - * If the PERSIST bit is set, the handler will remain - * registered even after handlerReady() is called. - * - * @return Returns true if the handler was successfully registered, - * or false if an error occurred. After an error, the handler is - * always unregistered, even if it was already registered prior to - * this call to registerHandler(). - */ - bool registerHandler(uint16_t events) { - return registerImpl(events, false); - } - - /** - * Unregister the handler, if it is registered. - */ - void unregisterHandler(); - - /** - * Returns true if the handler is currently registered. - */ - bool isHandlerRegistered() const { - return TEventUtil::isEventRegistered(&event_); - } - - /** - * Attach the handler to a TEventBase. - * - * This may only be called if the handler is not currently attached to a - * TEventBase (either by using the default constructor, or by calling - * detachEventBase()). - * - * This method must be invoked in the TEventBase's thread. - */ - void attachEventBase(TEventBase* eventBase); - - /** - * Detach the handler from its TEventBase. - * - * This may only be called when the handler is not currently registered. - * Once detached, the handler may not be registered again until it is - * re-attached to a TEventBase by calling attachEventBase(). - * - * This method must be called from the current TEventBase's thread. - */ - void detachEventBase(); - - /** - * Change the file descriptor that this handler is associated with. - * - * This may only be called when the handler is not currently registered. - */ - void changeHandlerFD(int fd); - - /** - * Attach the handler to a TEventBase, and change the file descriptor. - * - * This method may only be called if the handler is not currently attached to - * a TEventBase. This is primarily intended to be used to initialize - * TEventHandler objects created using the default constructor. - */ - void initHandler(TEventBase* eventBase, int fd); - - /** - * Return the set of events that we're currently registered for. - */ - uint16_t getRegisteredEvents() const { - return (isHandlerRegistered()) ? - event_.ev_events : 0; - } - - /** - * Register the handler as an internal event. - * - * This event will not count as an active event for determining if the - * TEventBase loop has more events to process. The TEventBase loop runs - * only as long as there are active TEventHandlers, however "internal" event - * handlers are not counted. Therefore this event handler will not prevent - * TEventBase loop from exiting with no more work to do if there are no other - * non-internal event handlers registered. - * - * This is intended to be used only in very rare cases by the internal - * TEventBase code. This API is not guaranteed to remain stable or portable - * in the future. - */ - bool registerInternalHandler(uint16_t events) { - return registerImpl(events, true); - } - - private: - bool registerImpl(uint16_t events, bool internal); - void ensureNotRegistered(const char* fn); - - static void libeventCallback(int fd, short events, void* arg); - - struct event event_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TEVENTHANDLER_H_ diff --git a/thrift/lib/cpp/async/TEventServer.h b/thrift/lib/cpp/async/TEventServer.h deleted file mode 100644 index a79fccc90e..0000000000 --- a/thrift/lib/cpp/async/TEventServer.h +++ /dev/null @@ -1,1037 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TEVENTSERVER_H_ -#define THRIFT_ASYNC_TEVENTSERVER_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/async/TAsyncProcessor.h" -#include "thrift/lib/cpp/transport/TTransportUtils.h" -#include "thrift/lib/cpp/transport/TSSLSocket.h" -#include "thrift/lib/cpp/protocol/THeaderProtocol.h" -#include "thrift/lib/cpp/concurrency/Mutex.h" -#include "thrift/lib/cpp/concurrency/ThreadLocal.h" -#include "thrift/lib/cpp/async/TEventBase.h" -#include "thrift/lib/cpp/async/TEventBaseManager.h" -#include -#include -#include -#include - -namespace apache { namespace thrift { - -namespace concurrency { -class ThreadFactory; -class ThreadManager; -} - -namespace async { - -using apache::thrift::protocol::TDualProtocolFactory; - -// Forward declaration of classes -class TAsyncServerSocket; -class TEventConnection; -class TEventWorker; - -/** - This is a non-blocking event-based server for high performance that - operates an I/O thread for each cpu core and uses callbacks for - notification of processing or I/O operations. - - It does not use the TServerTransport framework, but rather has socket - operations hardcoded for use with libevent and implements framing - compatible with TFramedTransport. A single "listener" thread accepts - connections and sends them to the server threads via a single socketpair(); - the server threads are each responsible for allocating and pooling actual - connection objects, avoiding the need for the locks required by a common - pool. - - The original Thrift server was by Mark Slee . - A non-blocking variant was produced which allowed for a large number - of processing threads but restricted network I/O to a single thread -- - suboptimal on a multi-core CPU. David Reiss - and Mark Rabkin refactored this server into a - callback-driven event-based configuration. Ed Hall - elaborated on this to support network I/O on multiple threads (ideally - one per CPU core). - - @author Mark Slee - @author David Reiss - @author Mark Rabkin - @author Ed Hall - */ - -class TEventServer : public apache::thrift::server::TServer { - - public: - enum TransportType { - FRAMED = 0, - HEADER = 1, - - /*********** Deprecation Warning ******************* - * * - * The unframed transports are deprecated ! * - * They should be used for legancy services only * - * Also note: they only works with TBinaryProtocol * - ***************************************************/ - - UNFRAMED_BINARY = 2 - }; - - protected: - //! Default max size of per-worker connection pool. - static const uint32_t T_ASYNC_MAX_CONNECTION_POOL_SIZE = 64; - - /// Starting size of a TEventConnection's read buffer - static const int T_ASYNC_READ_BUFFER_DEFAULT_SIZE = 1024; - - /// Starting size of a TEventConnection's write buffer - static const int T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE = 1024; - - /// Maximum size of read buffer allocated to idle connection (0 = unlimited) - static const int T_ASYNC_IDLE_READ_BUFFER_LIMIT = 0; - - /// Maximum size of write buffer allocated to idle connection (0 = unlimited) - static const int T_ASYNC_IDLE_WRITE_BUFFER_LIMIT = 0; - - /// # of calls before resizing oversized buffers (0 = check only on close) - static const int T_ASYNC_RESIZE_BUFFER_EVERY_N = 0; - - //! Default number of worker threads (should be # of processor cores). - static const int T_ASYNC_DEFAULT_WORKER_THREADS = 4; - - //! Maximum size of a frame we'll accept (default = 64MB) - static const int T_ASYNC_DEFAULT_MAX_FRAME_SIZE = 67108864; - - static const uint32_t T_MAX_NUM_MESSAGES_IN_PIPE = 0xffffffff; - - /// Listen backlog - static const int T_LISTEN_BACKLOG = 1024; - - //! Transport type - static const TransportType T_ASYNC_DEFAULT_TRANSPORT_TYPE = FRAMED; - - private: - struct WorkerInfo { - boost::shared_ptr worker; - boost::shared_ptr thread; - }; - - //! Max size of per-worker connection pool (may be set). - uint32_t maxConnectionPoolSize_; - - //! SSL context - boost::shared_ptr sslContext_; - - //! Factory that creates connection processor objects. - boost::shared_ptr asyncProcessorFactory_; - - //! Port to listen on - uint16_t port_; - - //! Listen socket - TAsyncServerSocket* socket_; - - //! The TEventBase currently driving serve(). NULL when not serving. - TEventBase* serveEventBase_; - - //! Number of worker threads (may be set) (should be # of CPU cores) - int nWorkers_; - - //! Milliseconds we'll wait for data to appear (0 = infinity) - int timeout_; - - //! Manager of per-thread TEventBase objects. - TEventBaseManager eventBaseManager_; - - //! Last worker chosen -- used to select workers in round-robin sequence. - uint32_t workerChoice_; - - //! List of workers. - typedef std::vector WorkerVector; - WorkerVector workers_; - - //! Maximum number of bytes accepted in a frame. - uint32_t maxFrameSize_; - - /// We initialize (and reinitialize) TEventConnection's read buffer to - /// this size. - size_t readBufferDefaultSize_; - - /// We initialize (and reinitialize) TEventConnection's write buffer to - /// this size. - size_t writeBufferDefaultSize_; - - /** - * Max read buffer size for an idle TConnection. When we place an idle - * TConnection into TEventWorker::connectionStack_ or on every - * resizeBufferEveryN_ calls, we insure that its read buffer is <= to - * this size; otherwise we replace it with a new one to insure that idle - * connections don't hog memory. 0 disables this check. - */ - size_t idleReadBufferLimit_; - - /** - * Max write buffer size for an idle connection. When we place an idle - * TConnection into TEventWorker::connectionStack_ or on every - * resizeBufferEveryN_ calls, we insure that its write buffer is <= to - * this size; otherwise we replace it with a new one to insure that idle - * connections don't hog memory. 0 disables this check. - */ - size_t idleWriteBufferLimit_; - - /** - * Every N calls we check the buffer size limits on a connected - * TEventConnection. 0 disables (i.e. the checks are only done when a - * connection closes). - */ - int32_t resizeBufferEveryN_; - - /** - * Call timeout in ms. When nonzero, limits the amount of time we allow - * between the start of a call and the actual invokation of its processor. - * The connection closes if it is exceeded. - */ - int32_t callTimeout_; - - /** - * The thread manager used when we're in queuing mode. - */ - boost::shared_ptr threadManager_; - - /** - * Thread local storage to track the current connection being processed - */ - concurrency::ThreadLocal > - currentConnection_; - - /** - * The time in milliseconds before an unperformed task expires -- - * queuing mode only. (0 == infinite) - */ - uint64_t taskExpireTime_; - - /** - * Set true if we are in queuing mode, false if not. - */ - bool queuingMode_; - - /** - * The speed for adjusting connection accept rate. - * 0 for disabling auto adjusting connection accept rate. - */ - double acceptRateAdjustSpeed_; - - /** - * The maximum number of unprocessed messages which a NotificationPipe - * can hold. - */ - uint32_t maxNumMsgsInPipe_; - - /** - * The max number of active connections for each worker - */ - int32_t maxNumActiveConnectionsPerWorker_; - - /** - * The transport type to use - */ - TransportType transportType_; - - void addWorker(concurrency::ThreadFactory* threadFactory); - - /** - * No-op signal handler (for SIGPIPE) - */ - static void sigNoOp(int signo) { - (void)signo; - } - - /** - * Set the current connection - */ - void setCurrentConnection(TEventConnection* conn) { - assert(currentConnection_.get() == NULL); - currentConnection_.set(conn); - } - - /** - * Clear the current connection - */ - void clearCurrentConnection() { - currentConnection_.clear(); - } - // Allow TEventConnection and TEventTask to access setCurrentConnection() - // and clearCurrentConnection(). Only these two private - // methods are meant to be used by TEventConnection and TEventTask. - friend class TEventConnection; - friend class TEventTask; - - public: - /** Construct an async Thrift server. - You need to compile your thrift configuration with thrift_cpp_options = - "cob_style" to get the required TAsyncProcessor class; this differs - from the usual TProcessor object by adding a completion callback. - TBinaryProtocol is assumed for both input and output with this - constructor. - @param processor the TAsyncProcessor object for this service - @param port the TCP port number for this service - @param nWorkers the number of worker threads -- should be the same - as the number of CPU cores, though if a process has - more than one TEventServer the cores can be split - between them. - */ - template - TEventServer(boost::shared_ptr processor, - int port, - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(AsyncProcessor, TAsyncProcessor)) : - apache::thrift::server::TServer(boost::shared_ptr()), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - asyncProcessorFactory_(new TAsyncSingletonProcessorFactory(processor)), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(false), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - processor->setAsyncServer(this); - } - - /** Construct an async Thrift server for a particular TProtocol. - See above; adds a "protocolFactory" parameter to replace the - default TBinaryProtocol. - @param processor the TAsyncProcessor object for this service - @param protocolFactory the TProtocolFactory to use for input & output - @param port the TCP port number for this service - @param nWorkers the number of worker threads - */ - template - TEventServer(boost::shared_ptr processor, - boost::shared_ptr - protocolFactory, - int port, - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(AsyncProcessor, TAsyncProcessor)) : - apache::thrift::server::TServer(boost::shared_ptr()), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - asyncProcessorFactory_(new TAsyncSingletonProcessorFactory(processor)), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(false), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - processor->setAsyncServer(this); - - setProtocolFactory(protocolFactory); - } - - /** Construct an async Thrift server with different input & output TProtocol. - See above; adds "inputProtocolFactory" and "outputProtocolFactory" - parameters. - @param processor the TAsyncProcessor object for this service - @param inputProtocolFactory the TProtocolFactory to use for input - @param outputProtocolFactory the TProtocolFactory to use for output - @param port the TCP port number for this service - @param nWorkers the number of worker threads - - @deprecated use TDuplex* ctor below - */ - template - TEventServer(boost::shared_ptr processor, - boost::shared_ptr - inputProtocolFactory, - boost::shared_ptr - outputProtocolFactory, - int port, - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(AsyncProcessor, TAsyncProcessor)) : - apache::thrift::server::TServer(boost::shared_ptr()), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - asyncProcessorFactory_(new TAsyncSingletonProcessorFactory(processor)), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(false), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - processor->setAsyncServer(this); - - setDuplexProtocolFactory( - boost::shared_ptr( - new TDualProtocolFactory(inputProtocolFactory, outputProtocolFactory))); - } - - - /** Construct an async Thrift server with custom input & output TProtocol. - See above; Replaces protocolFactory with duplexProtocolFactory - parameters. - @param processor the TAsyncProcessor object for this service - @param duplexProtocolFactory the TProtocolFactory to use for input/output - @param port the TCP port number for this service - @param nWorkers the number of worker threads - */ - template - TEventServer( - boost::shared_ptr processor, - boost::shared_ptr - duplexProtocolFactory, - int port, - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(AsyncProcessor, TAsyncProcessor)): - apache::thrift::server::TServer(boost::shared_ptr()), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - asyncProcessorFactory_(new TAsyncSingletonProcessorFactory(processor)), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(false), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - processor->setAsyncServer(this); - - setDuplexProtocolFactory(duplexProtocolFactory); - } - - - /** Construct a task-queuing Thrift server for a particular TProtocol. - Largely compatible with TNonblockingServer. - - @param processor the TProcessor object for this service - @param protocolFactory the TProtocolFactory to use for input & output - @param port the TCP port number for this service - @param threadManager the thread manager we use for task queuing - @param nWorkers the number of worker threads - */ - template - TEventServer( - boost::shared_ptr processor, - boost::shared_ptr - protocolFactory, - int port, - boost::shared_ptr const& threadManager = - boost::shared_ptr(), - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - apache::thrift::server::TServer(processor), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(true), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - setProtocolFactory(protocolFactory); - setThreadManager(threadManager); - } - - /** Construct a task-queuing Thrift server for a particular TProtocol. - Largely compatible with TNonblockingServer. - - @param processor the TProcessor object for this service - @param protocolFactory the TProtocolFactory to use for input & output - @param port the TCP port number for this service - @param threadManager the thread manager we use for task queuing - @param nWorkers the number of worker threads - */ - template - TEventServer( - boost::shared_ptr processor, - boost::shared_ptr - duplexProtocolFactory, - int port, - boost::shared_ptr const& threadManager = - boost::shared_ptr(), - int nWorkers = T_ASYNC_DEFAULT_WORKER_THREADS, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - apache::thrift::server::TServer(processor), - maxConnectionPoolSize_(T_ASYNC_MAX_CONNECTION_POOL_SIZE), - port_(port), - socket_(NULL), - serveEventBase_(NULL), - nWorkers_(nWorkers), - timeout_(0), - eventBaseManager_(), - workerChoice_(0), - maxFrameSize_(T_ASYNC_DEFAULT_MAX_FRAME_SIZE), - readBufferDefaultSize_(T_ASYNC_READ_BUFFER_DEFAULT_SIZE), - writeBufferDefaultSize_(T_ASYNC_WRITE_BUFFER_DEFAULT_SIZE), - idleReadBufferLimit_(T_ASYNC_IDLE_READ_BUFFER_LIMIT), - idleWriteBufferLimit_(T_ASYNC_IDLE_WRITE_BUFFER_LIMIT), - resizeBufferEveryN_(T_ASYNC_RESIZE_BUFFER_EVERY_N), - callTimeout_(0), - taskExpireTime_(0), - queuingMode_(true), - acceptRateAdjustSpeed_(0), - maxNumMsgsInPipe_(T_MAX_NUM_MESSAGES_IN_PIPE), - maxNumActiveConnectionsPerWorker_(0), - transportType_(T_ASYNC_DEFAULT_TRANSPORT_TYPE) { - setDuplexProtocolFactory(duplexProtocolFactory); - setThreadManager(threadManager); - } - - virtual ~TEventServer() { - } - - /** - * - */ - void setSSLContext(boost::shared_ptr context) { - sslContext_ = context; - } - - boost::shared_ptr getSSLContext() const { - return sslContext_; - } - - /** - * Use the provided socket rather than binding to port_. The caller must - * call ::bind on this socket, but should not call ::listen. - * - * NOTE: TEventServe takes ownership of this 'socket' so if binding fails - * we destroy this socket, while cleaning itself up. So, 'accept' better - * work the first time :) - */ - void useExistingSocket(int socket); - - /** - * Return the file descriptor associated with the listening socket - */ - int getListenSocket() const; - - /** - * Get the TAsyncProcessorFactory object used by this server. - * - * @return a pointer to the processorFactory. - */ - boost::shared_ptr getAsyncProcessorFactory() const { - return asyncProcessorFactory_; - } - - /** - * Set the TAsyncProcessor object used by this server. - */ - void setAsyncProcessorFactory(boost::shared_ptr pf) { - asyncProcessorFactory_ = pf; - } - - /** - * Get the TEventBase used by the current thread. - * This will be different between each worker and the listener. Use this - * for any event monitoring within a processor and be careful NOT to - * cache between connections (since they may be executed by different - * workers). - * - * @return a pointer to the TEventBase. - */ - TEventBase* getEventBase() const { - return eventBaseManager_.getEventBase(); - } - - /** - * Get the TEventServer's main event base. - * - * @return a pointer to the TEventBase. - */ - TEventBase* getServeEventBase() const { - return serveEventBase_; - } - - /** - * Get the TEventBaseManager used by this server. - * This can be used to find or create the TEventBase associated with - * any given thread, including any new threads created by clients. - * - * @return a pointer to the TEventBaseManager. - */ - TEventBaseManager* getEventBaseManager() { - return &eventBaseManager_; - } - const TEventBaseManager* getEventBaseManager() const { - return &eventBaseManager_; - } - - /** - * Set the port to serve - */ - void setPort(uint16_t port) { - port_ = port ; - } - - /** - *Set the maximum number of inactive connection objects pooled. - * Since these objects consume memory, we need to limit how many we keep. - * You can disable pooling altogether by setting this to zero. Note that - * the actual maximum is nWorkers*size since each worker thread maintains - * its own pool (to avoid the need for locks). - * - * @param size the maximum number of inactive connections to pool. - */ - void setMaxConnectionPoolSize(uint32_t size) { - maxConnectionPoolSize_ = size; - } - - /** Get the maximum number of inactive connection objects pooled. - @return the maximum pool size. - */ - uint32_t getMaxConnectionPoolSize() const { - return maxConnectionPoolSize_; - } - - /** - * Get the maximum number of unprocessed messages which a NotificationPipe - * can hold. - */ - uint32_t getMaxNumMessagesInPipe() const { - return maxNumMsgsInPipe_; - } - /** - * Set the maximum number of unprocessed messages in NotificationPipe. - * No new message will be sent to that NotificationPipe if there are more - * than such number of unprocessed messages in that pipe. - */ - void setMaxNumMessagesInPipe(uint32_t num) { - maxNumMsgsInPipe_ = num; - } - - /** - * Get the maxmum number of active connections each TAsyncWorker can have - */ - int32_t getMaxNumActiveConnectionsPerWorker() const { - return maxNumActiveConnectionsPerWorker_; - } - - /** - * Set the maxmum number of active connections each TAsyncWorker can have. - * Zero means unlimited - */ - void setMaxNumActiveConnectionsPerWorker(int32_t num) { - maxNumActiveConnectionsPerWorker_ = num; - } - - /** - * Get the speed of adjusting connection accept rate. - */ - double getAcceptRateAdjustSpeed() const { - return acceptRateAdjustSpeed_; - } - - /** - * Set the speed of adjusting connection accept rate. - */ - void setAcceptRateAdjustSpeed(double speed) { - acceptRateAdjustSpeed_ = speed; - } - - /** - * Get the number of connections dropped by the TAsyncServerSocket - */ - uint64_t getNumDroppedConnections() const; - - /** Reset the maximum number of inactive connection objects to the default. - */ - void resetMaxConnectionPoolSize() { - setMaxConnectionPoolSize(T_ASYNC_MAX_CONNECTION_POOL_SIZE); - } - - /** Get maximum number of milliseconds we'll wait for data (0 = infinity). - * - * @return number of milliseconds, or 0 if no timeout set. - */ - int getRecvTimeout() const { - return timeout_; - } - - /** Set maximum number of milliseconds we'll wait for data (0 = infinity). - * Note: existing connections are unaffected by this call. - * - * @param timeout number of milliseconds, or 0 to disable timeouts. - */ - void setRecvTimeout(int timeout) { - timeout_ = timeout; - } - - /** Set the maximum frame size server will accept. - * - * @param size the maximum size in bytes of a frame we'll accept. - */ - void setMaxFrameSize(uint32_t size) { - maxFrameSize_ = size; - } - - /** Get the maximum frame size server will accept. - * - * @return the maximum pool size. - */ - uint32_t getMaxFrameSize() const { - return maxFrameSize_; - } - - /** - * Get the starting size of a TEventConnection object's read buffer. - * - * @return # bytes we init a TEventConnection object's read buffer to. - */ - size_t getReadBufferDefaultSize() const { - return readBufferDefaultSize_; - } - - /** - * Set the starting size of a TEventConnection object's read buffer. - * - * @param size # bytes we init a TEventConnection object's read buffer to. - */ - void setReadBufferDefaultSize(size_t size) { - readBufferDefaultSize_ = size; - } - - /** - * Get the starting size of a TEventConnection object's write buffer. - * - * @return # bytes we init a TEventConnection object's write buffer to. - */ - size_t getWriteBufferDefaultSize() const { - return writeBufferDefaultSize_; - } - - /** - * Set the starting size of a TEventConnection object's write buffer. - * - * @param size # bytes we init a TEventConnection object's write buffer to. - */ - void setWriteBufferDefaultSize(size_t size) { - writeBufferDefaultSize_ = size; - } - - /** - * Get the maximum size of read buffer allocated to idle TConnection objects. - * - * @return # bytes beyond which we will shrink buffers when idle. - */ - size_t getIdleReadBufferLimit() const { - return idleReadBufferLimit_; - } - - /** - * Set the maximum size read buffer allocated to idle TEventConnection - * objects. If a TEventConnection object is found (either on connection - * close or between calls when resizeBufferEveryN_ is set) with more than - * this much memory - * allocated to its read buffer, we shrink it to this value. - * - * @param limit of bytes beyond which we will shrink buffers when checked. - */ - void setIdleReadBufferLimit(size_t limit) { - idleReadBufferLimit_ = limit; - } - - /** - * Get the maximum size of write buffer allocated to idle TEventConnection - * objects. - * - * @return # bytes beyond which we will reallocate buffers when checked. - */ - size_t getIdleWriteBufferLimit() const { - return idleWriteBufferLimit_; - } - - /** - * Set the maximum size write buffer allocated to idle TEventConnection - * objects. If a TEventConnection object is found (either on connection - * close or between calls when resizeBufferEveryN_ is set) with more than - * this much memory allocated to its write buffer, we destroy and construct - * that buffer. - * - * @param limit of bytes beyond which we will shrink buffers when idle. - */ - void setIdleWriteBufferLimit(size_t limit) { - idleWriteBufferLimit_ = limit; - } - - /** - * Get # of calls made between buffer size checks. 0 means disabled. - * - * @return # of calls between buffer size checks. - */ - int32_t getResizeBufferEveryN() const { - return resizeBufferEveryN_; - } - - /** - * Check buffer sizes every "count" calls. This allows buffer limits - * to be enforced for persistant connections with a controllable degree - * of overhead. 0 disables checks except at connection close. - * - * @param count the number of calls between checks, or 0 to disable - */ - void setResizeBufferEveryN(int32_t count) { - resizeBufferEveryN_ = count; - } - - /** - * Set a call timeout in milliseconds. - * - * When a worker's TEventBase starts taking longer than this amount of time - * to process a single loop, start dropping connections to reduce loadj - * - * TODO: This should be renamed something other than "call timeout" - * - * @param milliseconds the call timeout (0 inhibits) - */ - void setCallTimeout(int32_t milliseconds) { - callTimeout_ = milliseconds; - } - - /** - * Get the call timeout in milliseconds. 0 (default) disables. - * - * @return the call timeout in milliseconds - */ - int32_t getCallTimeout() const { - return callTimeout_; - } - - /** - * Set Thread Manager (for queuing mode). - * - * @param threadManager a shared pointer to the thread manager - */ - void setThreadManager(boost::shared_ptr - threadManager) { - threadManager_ = threadManager; - } - - /** - * Get Thread Manager (for queuing mode). - * - * @return a shared pointer to the thread manager - */ - boost::shared_ptr getThreadManager() { - return threadManager_; - } - - /** - * Get the task expire time (for queuing mode). - * - * @return task expire time - */ - int64_t getTaskExpireTime() const { - return taskExpireTime_; - } - - /** - * Return whether we are in queuing mode or not. - * - * @return true if we are in queuing mode, false if not. - */ - bool queuingMode() const { - return queuingMode_; - } - - /** - * Set the transport type to use - * - * @param transportType transport type - */ - void setTransportType(TransportType transportType) { - - /*********** Deprecation Warning ******************* - * * - * The unframed transports are deprecated ! * - * They should be used for legancy services only * - * Also note: they only works with TBinaryProtocol * - ***************************************************/ - - if (transportType == UNFRAMED_BINARY && - !dynamic_cast( - getDuplexProtocolFactory()->getInputProtocolFactory().get())) { - throw TLibraryException( - "UnFramedTransport can only be used with TBinaryProtocol"); - } else if (transportType == HEADER && - !dynamic_cast( - getDuplexProtocolFactory()->getInputProtocolFactory().get())) { - throw TLibraryException( - "HEADER transport can only be used with THeaderProtocol"); - } - - transportType_ = transportType; - } - - /** - * Get the transport type to use - * - * @return transport type - */ - TransportType getTransportType() { - return transportType_; - } - - - /** - * Call this to complete initialization - */ - void setup(); - - /** - * Kill the workers and wait for listeners to quit - */ - void cleanUp(); - - /** - * One stop solution: - * - * starts worker threads, enters accept loop; when - * the accept loop exits, shuts down and joins workers. - */ - void serve(); - - /** - * Call this to stop the server, if started by serve() - * - * This causes the main serve() function to stop listening for new - * connections, closes existing connections, shut down the worker threads, - * and then return. - */ - void stop(); - - /** - * Call this to stop listening on the server port. - * - * This causes the main serve() function to stop listening for new - * connections while still allows the worker threads to process - * existing connections. stop() still needs to be called to clear - * up the worker threads. - */ - void stopListening(); - - /** - * Terminate a given pending task. Callable by the thread manager or - * from the server context. - */ - void expireClose( - boost::shared_ptr task); - - /** - * In task queue mode, drop a task from the head of the queue and shut - * down the associated connection. - */ - bool drainPendingTask(); - - /** - * Get the TConnectionContext for the connection currently being processed. - * - * This is intended to be invoked from within the TAsyncProcessor (or the - * handler used by the TProcessor). - * - * @return Return a pointer to the TConnectionContext for the current - * connection, or NULL if invoked outside of a call to - * TAsyncProcessor::process(). The returned TConnectionContext - * object is guaranteed to remain valid until the - * TAsyncProcessor invokes its success or error callback. However, - * getConnectionContext() may return NULL when invoked after - * process() has returned. - * - * In other words, async handlers may continue using the - * TConnectionContext object for the duration of the handler - * processing. However, they must retrieve the TConnectionContext - * inside the call to process() and cache it for later use if - * they need it later. - */ - virtual server::TConnectionContext* getConnectionContext() const; - - // We use this to get the processor when in task queue mode - using TServer::getProcessor; -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_ASYNC_TEVENTSERVER_H_ diff --git a/thrift/lib/cpp/async/TEventTask.h b/thrift/lib/cpp/async/TEventTask.h deleted file mode 100644 index ab21081ca6..0000000000 --- a/thrift/lib/cpp/async/TEventTask.h +++ /dev/null @@ -1,49 +0,0 @@ -#ifndef _THRIFT_TEVENTTASK_H_ -#define _THRIFT_TEVENTTASK_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/concurrency/ThreadManager.h" -#include "thrift/lib/cpp/async/TEventConnection.h" -#include -#include -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" - -namespace apache { namespace thrift { namespace async { - -class TEventTask : public apache::thrift::concurrency::Runnable { - public: - explicit TEventTask(TEventConnection* connection); - - void run(); - - TEventConnection* getConnection() const { - return connection_; - } - - private: - boost::shared_ptr processor_; - boost::shared_ptr input_; - boost::shared_ptr output_; - TEventConnection* connection_; - TConnectionContext* connectionContext_; -}; - -class TaskCompletionMessage { - public: - explicit TaskCompletionMessage(TEventConnection *inConnection) - : connection(inConnection) {} - - TaskCompletionMessage(TaskCompletionMessage &&msg) - : connection(msg.connection) { - msg.connection = NULL; - } - - TEventConnection *connection; -}; - -} } } // namespace apache::thrift::async - -#endif // !_THRIFT_TEVENTTASK_H_ diff --git a/thrift/lib/cpp/async/TEventUtil.h b/thrift/lib/cpp/async/TEventUtil.h deleted file mode 100644 index 4d0b62b68f..0000000000 --- a/thrift/lib/cpp/async/TEventUtil.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TEVENTUTIL_H_ -#define THRIFT_ASYNC_TEVENTUTIL_H_ 1 - -#include // libevent - -namespace apache { namespace thrift { namespace async { - -/** - * low-level libevent utility functions - */ -class TEventUtil { - public: - static bool isEventRegistered(const struct event* ev) { - // If any of these flags are set, the event is registered. - enum { - EVLIST_REGISTERED = (EVLIST_INSERTED | EVLIST_ACTIVE | - EVLIST_TIMEOUT | EVLIST_SIGNAL) - }; - return (ev->ev_flags & EVLIST_REGISTERED); - } -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TEVENTUTIL_H_ diff --git a/thrift/lib/cpp/async/TEventWorker.h b/thrift/lib/cpp/async/TEventWorker.h deleted file mode 100644 index 8fcbd21c3a..0000000000 --- a/thrift/lib/cpp/async/TEventWorker.h +++ /dev/null @@ -1,276 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_SERVER_TEVENTWORKER_H_ -#define THRIFT_SERVER_TEVENTWORKER_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncServerSocket.h" -#include "thrift/lib/cpp/async/TAsyncSSLSocket.h" -#include "thrift/lib/cpp/async/TEventServer.h" -#include "thrift/lib/cpp/async/TEventBase.h" -#include "thrift/lib/cpp/async/TEventHandler.h" -#include "thrift/lib/cpp/async/TNotificationQueue.h" -#include "thrift/lib/cpp/server/TServer.h" -#include -#include -#include - -namespace apache { namespace thrift { namespace async { - -// Forward declaration of classes -class TAsyncProcessorFactory; -class TEventConnection; -class TEventServer; -class TaskCompletionMessage; -/** - * TEventWorker drives the actual I/O for TEventServer connections. - * - * The TEventServer itself accepts incoming connections, then hands off each - * connection to a TEventWorker running in another thread. There should - * typically be around one TEventWorker thread per core. - */ -class TEventWorker : - public apache::thrift::server::TServer, - public TAsyncServerSocket::AcceptCallback, - public TAsyncSSLSocket::HandshakeCallback, - public TNotificationQueue::Consumer { - private: - /// Object that processes requests. - boost::shared_ptr asyncProcessorFactory_; - - /// The mother ship. - TEventServer* server_; - - /// An instance's TEventBase for I/O. - TEventBase eventBase_; - - /// Our ID in [0:nWorkers). - uint32_t workerID_; - - /// Pipe that task completion notifications are sent over - TNotificationQueue notificationQueue_; - - /** - * A stack of idle TEventConnection objects for reuse. - * When we close a connection, we place it on this stack so that the - * object can be reused later, rather than freeing the memory and - * reallocating a new object later. - */ - std::stack connectionStack_; - - /// Transport type to use - TEventServer::TransportType transportType_; - - /** - * Called when the connection is fully accepted (after SSL accept if needed) - */ - void finishConnectionAccepted(TAsyncSocket *asyncSock); - - /** - * Create or reuse a TEventConnection initialized for the given socket FD. - * - * @param socket the FD of a freshly-connected socket. - * @param address the peer address of the socket. - * @return pointer to a TConenction object for that socket. - */ - TEventConnection* createConnection( - boost::shared_ptr asyncSocket, - const transport::TSocketAddress* address); - - /** - * Handler called when a new connection may be available. - */ - void acceptConnections(); - - void makeCompletionCallback(); - - /** - * Initialize our TEventBase to generate incoming connection events. - * Note that this is called once before the main loop is executed and - * sets up a READ event on the output of the listener's socktpair. - */ - void registerEvents(); - - /** - * Callback used when loop latency exceeds the requested threshold. - */ - void maxLatencyCob(); - - typedef std::list ConnectionList; - - // pointer hash functor - static const uint64_t kPtrHashMult = 5700357409661599291LL; - static const uint64_t kPtrHashShift = 3; - template - struct hash { }; - template - struct hash { - size_t operator()(T* p) const { - return ((size_t)p ^ ((size_t)p >> kPtrHashShift)) * kPtrHashMult; - } - size_t operator()(const T* p) const { - return ((size_t)p ^ ((size_t)p >> kPtrHashShift)) * kPtrHashMult; - } - }; - typedef __gnu_cxx::hash_map > ConnectionMap; - - /** - * The list of active connections (used to allow the oldest connections - * to be shed during overload). - */ - ConnectionList activeConnectionList_; - /** - * A hash map used to map connections to their place in the connection list - */ - ConnectionMap activeConnectionMap_; - - // Max number of active connections - int32_t maxNumActiveConnections_; - - public: - - /** - * TEventWorker is the actual server object for existing connections. - * One or more of these should be created by TEventServer (one per - * CPU core is recommended). - * - * @param processorFactory a TAsyncProcessorFactory object as - * obtained from the generated Thrift code (the user service - * is integrated through this). - * @param inputProtocolFactory the TProtocolFactory class supporting - * inbound Thrift requests. - * @param outputProtocolFactory the TProtocolFactory class supporting - * responses (if any) after processing completes. - * @param server the TEventServer which created us. - * @param workerID the ID assigned to this worker - */ - TEventWorker(boost::shared_ptr processorFactory, - boost::shared_ptr - protocolFactory, - TEventServer* server, - uint32_t workerID) : - TServer(boost::shared_ptr()), - asyncProcessorFactory_(processorFactory), - server_(server), - eventBase_(), - workerID_(workerID), - transportType_(TEventServer::FRAMED), - maxNumActiveConnections_(0) { - - setDuplexProtocolFactory(protocolFactory); - transportType_ = server->getTransportType(); - if (transportType_ == TEventServer::FRAMED) { - // do the dynamic cast once rather than per connection - if (dynamic_cast( - protocolFactory.get())) { - transportType_ = TEventServer::HEADER; - } - } - } - - /** - * Destroy a TEventWorker. We've use boost::scoped_ptr<> to take care - * of freeing up memory, so nothing to be done here but release the - * connection stack. - */ - virtual ~TEventWorker(); - - /** - * Get my TAsyncProcessorFactory object. - * - * @returns pointer to my TAsyncProcessorFactory object. - */ - boost::shared_ptr getAsyncProcessorFactory() { - return asyncProcessorFactory_; - } - - /** - * Get my TEventBase object. - * - * @returns pointer to my TEventBase object. - */ - TEventBase* getEventBase() { - return &eventBase_; - } - - /** - * Get underlying server. - * - * @returns pointer to TEventServer - */ - TEventServer* getServer() const { - return server_; - } - - /** - * Get my numeric worker ID (for diagnostics). - * - * @return integer ID of this worker - */ - int32_t getID() { - return workerID_; - } - - void setMaxNumActiveConnections(int32_t numActiveConnections) { - maxNumActiveConnections_ = numActiveConnections; - } - - int32_t getMaxNumActiveConnections() const { - return maxNumActiveConnections_; - } - - /** - * Dispose of a TEventConnection object. - * Will add to a pool of these objects or destroy as necessary. - * - * @param connection a now-idle connection. - */ - void returnConnection(TEventConnection* connection); - - /** - * Cause a completion callback for the requested connection to occur - * within that connection's context. - * - * @param msg task completion message - * @return true if notification was sent, false if it failed. - */ - bool notifyCompletion(TaskCompletionMessage &&msg); - - /** - * Task completed (called in this worker's thread) - */ - void messageAvailable(TaskCompletionMessage &&msg); - - virtual void connectionAccepted(int fd, - const transport::TSocketAddress& clientAddr) - THRIFT_NOEXCEPT; - virtual void acceptError(const std::exception& ex) THRIFT_NOEXCEPT; - virtual void acceptStopped() THRIFT_NOEXCEPT; - - /** - * TAsyncSSLSocket::HandshakeCallback interface - */ - void handshakeSuccess(TAsyncSSLSocket *sock) THRIFT_NOEXCEPT; - void handshakeError(TAsyncSSLSocket *sock, - const transport::TTransportException& ex) THRIFT_NOEXCEPT; - - - /** - * Enter event loop and serve. - */ - void serve(); - - /** - * Exit event loop. - */ - void shutdown(); -}; - -}}} // apache::thrift::async - -#endif // #ifndef THRIFT_SERVER_TEVENTWORKER_H_ diff --git a/thrift/lib/cpp/async/TFramedAsyncChannel.h b/thrift/lib/cpp/async/TFramedAsyncChannel.h deleted file mode 100644 index 40a6819e24..0000000000 --- a/thrift/lib/cpp/async/TFramedAsyncChannel.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TFRAMEDASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TFRAMEDASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TStreamAsyncChannel.h" - -namespace apache { namespace thrift { namespace async { - -namespace detail { - -/** - * Encapsulation of one outstanding write request on a TFramedAsyncChannel. - */ -class TFramedACWriteRequest : - public TAsyncChannelWriteRequestBase { - public: - TFramedACWriteRequest(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message, - TAsyncEventChannel* channel); - - void write(TAsyncTransport* transport, - TAsyncTransport::WriteCallback* callback) THRIFT_NOEXCEPT; - - void writeSuccess() THRIFT_NOEXCEPT; - void writeError(size_t bytesWritten, - const transport::TTransportException& ex) THRIFT_NOEXCEPT; - - private: - union { - uint32_t frameSize_; - char frameSizeBuf_[sizeof(uint32_t)]; - }; -}; - -/** - * Read state for TFramedAsyncChannel - */ -class TFramedACReadState { - public: - typedef std::tr1::function VoidCallback; - - TFramedACReadState(); - - // Methods required by TStreamAsyncChannel - - void setCallbackBuffer(transport::TMemoryBuffer* buffer) { - buffer_ = buffer; - bytesRead_ = 0; - } - void unsetCallbackBuffer() { - buffer_ = NULL; - } - - bool hasReadAheadData() { - assert(bytesRead_ == 0); - return false; - } - bool hasPartialMessage() { - return (bytesRead_ > 0); - } - - void getReadBuffer(void** bufReturn, size_t* lenReturn); - bool readDataAvailable(size_t len); - - // Other methods specifict to TFramedAsyncChannel - - void setMaxFrameSize(uint32_t size) { - maxFrameSize_ = size; - } - - uint32_t getMaxFrameSize() const { - return maxFrameSize_; - } - - private: - /// maximum frame size accepted - uint32_t maxFrameSize_; - - union { - uint32_t frameSize_; - char frameSizeBuf_[sizeof(uint32_t)]; - }; - - /** - * The number of bytes read. - * - * This includes the bytes in the frame size. When bytesRead_ is less than - * sizeof(uint32_t), we are still reading the frame size. Otherwise, we have - * read bytesRead_ - sizeof(uint32_t) bytes of the body. - */ - uint32_t bytesRead_; - apache::thrift::transport::TMemoryBuffer* buffer_; -}; - -} // namespace detail - -/** - * TFramedAsyncChannel - * - * This is a TAsyncChannel implementation that reads and writes messages - * prefixed with a 4-byte frame length. - * - * Its messages are compatible with TFramedTransport. - */ -class TFramedAsyncChannel : - public TStreamAsyncChannel { - private: - typedef TStreamAsyncChannel Parent; - - public: - explicit TFramedAsyncChannel( - const boost::shared_ptr& transport - ) - : Parent(transport) {} - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TFramedAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr( - new TFramedAsyncChannel(transport), Destructor()); - } - - /// size in bytes beyond which we'll reject a given frame size. - void setMaxFrameSize(uint32_t size) { - readState_.setMaxFrameSize(size); - } - - uint32_t getMaxFrameSize() const { - return readState_.getMaxFrameSize(); - } - - protected: - /** - * Protected destructor. - * - * Users of TFramedAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~TFramedAsyncChannel() { } -}; - -class TFramedAsyncChannelFactory : public TStreamAsyncChannelFactory { - public: - TFramedAsyncChannelFactory() - : maxFrameSize_(0x7fffffff) - , recvTimeout_(0) - , sendTimeout_(0) {} - - void setMaxFrameSize(uint32_t bytes) { - maxFrameSize_ = bytes; - } - - void setRecvTimeout(uint32_t milliseconds) { - recvTimeout_ = milliseconds; - } - - void setSendTimeout(uint32_t milliseconds) { - sendTimeout_ = milliseconds; - } - - virtual boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - boost::shared_ptr channel( - TFramedAsyncChannel::newChannel(transport)); - transport->setSendTimeout(sendTimeout_); - channel->setMaxFrameSize(maxFrameSize_); - channel->setRecvTimeout(recvTimeout_); - return channel; - } - - private: - uint32_t maxFrameSize_; - uint32_t recvTimeout_; - uint32_t sendTimeout_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TFRAMEDASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/THeaderAsyncChannel.h b/thrift/lib/cpp/async/THeaderAsyncChannel.h deleted file mode 100644 index ecb77c3ff7..0000000000 --- a/thrift/lib/cpp/async/THeaderAsyncChannel.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_THEADERASYNCCHANNEL_H_ -#define THRIFT_ASYNC_THEADERASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TUnframedAsyncChannel.h" - -namespace apache { namespace thrift { namespace async { - -namespace detail { - -/** - * A class to determine the end of a THeaderProtocol message. This is not as - * sophisticated as the logic in THeaderTransport, so it cannot yet handle any - * unframed transports, just THeader and TFramed. However, the previous - * implementation used TFramedAsyncChannel, so the limitation is not new. - */ -class THeaderACProtocolTraits { - public: - - THeaderACProtocolTraits() - : maxMessageSize_(0x7ffffff) {} - - // Methods required by TUnframedACReadState - bool getMessageLength(uint8_t* buffer, - uint32_t bufferLength, - uint32_t* messageLength); - - void setMaxMessageSize(uint32_t maxMessageSize) { - maxMessageSize_ = maxMessageSize; - } - - private: - uint32_t maxMessageSize_; -}; - -} // namespace detail - -/** - * THeaderAsyncChannel - * - * This is a TAsyncChannel implementation that reads and writes - * messages encoded using THeaderProtocol. - */ -class THeaderAsyncChannel : - public TUnframedAsyncChannel { - private: - typedef TUnframedAsyncChannel Parent; - - public: - explicit THeaderAsyncChannel( - const boost::shared_ptr& transport) - : Parent(transport) {} - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since THeaderAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr( - new THeaderAsyncChannel(transport), Destructor()); - } - - void setMaxMessageSize(uint32_t size) { - Parent::setMaxMessageSize(size); - readState_.getProtocolTraits()->setMaxMessageSize(size); - } - - // Note that we inherit getMaxMessageSize() from TUnframedAsyncChannel. - - protected: - /** - * Protected destructor. - * - * Users of THeaderAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~THeaderAsyncChannel() { } -}; - -class THeaderAsyncChannelFactory : public TStreamAsyncChannelFactory { - public: - THeaderAsyncChannelFactory() - : maxMessageSize_(0x7fffffff) - , recvTimeout_(0) - , sendTimeout_(0) {} - - void setMaxMessageSize(uint32_t bytes) { - maxMessageSize_ = bytes; - } - - void setRecvTimeout(uint32_t milliseconds) { - recvTimeout_ = milliseconds; - } - - void setSendTimeout(uint32_t milliseconds) { - sendTimeout_ = milliseconds; - } - - virtual boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - boost::shared_ptr channel( - THeaderAsyncChannel::newChannel(transport)); - transport->setSendTimeout(sendTimeout_); - channel->setMaxMessageSize(maxMessageSize_); - channel->setRecvTimeout(recvTimeout_); - return channel; - } - - private: - uint32_t maxMessageSize_; - uint32_t recvTimeout_; - uint32_t sendTimeout_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_THEADERASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/THttpAsyncChannel.h b/thrift/lib/cpp/async/THttpAsyncChannel.h deleted file mode 100644 index 9eafc3a819..0000000000 --- a/thrift/lib/cpp/async/THttpAsyncChannel.h +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_THTTPASYNCCHANNEL_H_ -#define THRIFT_ASYNC_THTTPASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TStreamAsyncChannel.h" -#include "thrift/lib/cpp/util/THttpParser.h" - -namespace apache { namespace thrift { namespace async { - -class THttpAsyncChannel; - -namespace detail { - -/** - * Encapsulation of one outstanding write request on a THttpAsyncChannel. - */ -class THttpACWriteRequest : - public TAsyncChannelWriteRequestBase { - public: - typedef std::tr1::function VoidCallback; - - THttpACWriteRequest(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message, - TAsyncEventChannel* channel); - - void write(TAsyncTransport* transport, - TAsyncTransport::WriteCallback* callback) THRIFT_NOEXCEPT; - - void writeSuccess() THRIFT_NOEXCEPT; - void writeError(size_t bytesWritten, - const transport::TTransportException& ex) THRIFT_NOEXCEPT; - - private: - char lengthBuf_[64]; - THttpAsyncChannel* channel_; -}; - -/** - * Read state for THttpAsyncChannel - */ -class THttpACReadState { - public: - typedef std::tr1::function VoidCallback; - - THttpACReadState() { - } - - // Methods required by TStreamAsyncChannel - - void setCallbackBuffer(transport::TMemoryBuffer* buffer) { - parser_->setDataBuffer(buffer); - } - void unsetCallbackBuffer() { - parser_->unsetDataBuffer(); - } - - bool hasReadAheadData() { - return parser_->hasReadAheadData(); - } - bool hasPartialMessage() { - return parser_->hasPartialMessage(); - } - - void getReadBuffer(void** bufReturn, size_t* lenReturn); - bool readDataAvailable(size_t len); - - // Other methods specific to THttpAsyncChannel - void setParser(boost::shared_ptr parser) { - parser_ = parser; - } - private: - boost::shared_ptr parser_; -}; - -} // namespace detail - -/** - * THttpAsyncChannel - * - * This is a TAsyncChannel implementation that reads and writes messages - * encapuated in HTTP. - * - * Its messages are compatible with THttpTransport. - */ -class THttpAsyncChannel : - public TStreamAsyncChannel { - private: - typedef TStreamAsyncChannel Parent; - boost::shared_ptr parser_; - - public: - explicit THttpAsyncChannel( - const boost::shared_ptr& transport) - : Parent(transport) { - } - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since THttpAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr( - new THttpAsyncChannel(transport), Destructor()); - } - - /// size in bytes beyond which we'll reject a given http size. - void setMaxHttpSize(uint32_t size) { - parser_->setMaxSize(size); - } - - uint32_t getMaxHttpSize() const { - return parser_->getMaxSize(); - } - - void setParser(boost::shared_ptr parser) { - parser_ = parser; - readState_.setParser(parser); - } - - boost::shared_ptr getParser() const { - return parser_; - } - - int constructHeader(iovec* ops, - int opsLen, - int contentLength, - char* contentLengthBuf) { - return parser_->constructHeader(ops, - opsLen, - contentLength, - contentLengthBuf); - } - - protected: - /** - * Protected destructor. - * - * Users of THttpAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~THttpAsyncChannel() { } -}; - -class THttpAsyncChannelFactory : public TStreamAsyncChannelFactory { - public: - THttpAsyncChannelFactory() - : maxHttpSize_(0x7fffffff) - , recvTimeout_(0) - , sendTimeout_(0) {} - - void setMaxHttpSize(uint32_t bytes) { - maxHttpSize_ = bytes; - } - - void setRecvTimeout(uint32_t milliseconds) { - recvTimeout_ = milliseconds; - } - - void setSendTimeout(uint32_t milliseconds) { - sendTimeout_ = milliseconds; - } - - virtual boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - boost::shared_ptr channel( - THttpAsyncChannel::newChannel(transport)); - transport->setSendTimeout(sendTimeout_); - channel->setMaxHttpSize(maxHttpSize_); - channel->setRecvTimeout(recvTimeout_); - return channel; - } - - private: - uint32_t maxHttpSize_; - uint32_t recvTimeout_; - uint32_t sendTimeout_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_THTTPASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TNotificationPipe.h b/thrift/lib/cpp/async/TNotificationPipe.h deleted file mode 100644 index 40b2f51d52..0000000000 --- a/thrift/lib/cpp/async/TNotificationPipe.h +++ /dev/null @@ -1,337 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TNOTIFICATIONPIPE_H -#define THRIFT_ASYNC_TNOTIFICATIONPIPE_H 1 - -#include "thrift/lib/cpp/async/TDelayedDestruction.h" -#include "thrift/lib/cpp/async/TEventBase.h" -#include "thrift/lib/cpp/async/TEventHandler.h" -#include "thrift/lib/cpp/concurrency/Mutex.h" -#include -#include -#include - -namespace apache { namespace thrift { namespace async { - -/** - * A simple notification pipe for sending messages to a TEventBase thread. - * - * TNotificationPipe is a unidirectional pipe for sending small, atomic - * messages. - * - * TNotificationPipe cannot be send messages larger than a fixed size. - * TNotificationPipe::kMaxMessageSize defines the maximum message size - * supported. If you need to pass larger amounts of data between threads, - * consider just passing a pointer to the data over the pipe, and using some - * external mechanism to synchronize management of the memory. - * - * - * TNotificationPipe provides two parallel APIs for writing and closing the - * pipe: a thread-safe version and a non-thread-safe version. Which version to - * use depends on how the caller uses the pipe: - * - * - If there is only a single writer thread, you can use the non-thread-safe - * versions of trySendMessage() and close(). This guarantees close() is - * never called by one thread while another thread is attempting to send a - * message. - * - * - If there are multiple writers, but the pipe is never closed by the - * writers, you can use the non-thread-safe version of trySendMessage(). - * Multiple simultaneous trySendMessage() calls will not interfere with each - * other. Since none of the writer threads call close, a call to close() - * cannot be running simultaneously with a write attempt. (With this model, - * the TNotificationPipe is never closed until it is destroyed. It is up to - * the caller to ensure the TNotificationPipe is not destroyed while write - * threads still have a pointer or reference to it.) - * - * In other circumstances (if one thread may call close while another thread is - * simultaneously trying to write), the thread-safe versions - * trySendMessageSync() and closeSync() must be used. - */ -class TNotificationPipe : public TDelayedDestruction, - private TEventHandler, - private TEventBase::LoopCallback { - public: - /** - * A callback interface for receiving notification of messages from the pipe. - */ - class Callback { - public: - virtual ~Callback() {} - - /** - * notificationMessage() will be invoked whenever a new - * message is available from the pipe. - */ - virtual void notificationMessage(const void *msg, uint32_t msgSize) = 0; - - /** - * notificationPipeError() will be invoked if an error occurs while reading - * from the pipe. Before notificationPipeError() is invoked, the read - * callback will automatically be uninstalled and the pipe will be closed. - */ - virtual void notificationPipeError(const std::exception& ex) = 0; - - /** - * notificationPipeClosed() is invoked in the read thread after the write - * end of the pipe is closed. - */ - virtual void notificationPipeClosed() = 0; - }; - - /** - * Helper function to create a new shared_ptr. - * - * This simply sets the correct destructor to call destroy() instead of - * directly deleting the TNotificationPipe. - */ - static boost::shared_ptr newPipe(TEventBase *base) { - return boost::shared_ptr(new TNotificationPipe(base), - Destructor()); - } - - /** - * Create a new TNotificationPipe. - * - * @param eventBase The TEventBase to use for receiving read notifications - * from this pipe. All read events will be processed in this - * TEventBase's thread. trySendMessage() may be called from any thread. - */ - TNotificationPipe(TEventBase *eventBase); - - /** - * Destroy this TNotificationPipe. - * - * This method may only be called from the read thread. - * - * This will automatically close the pipe if it is not already closed. - */ - virtual void destroy(); - - /** - * Close the pipe. - * - * This version of close() is not thread-safe. It should only be used if the - * caller is sure no other thread is attempting to write a message at the - * same time. - * - * Use closeSync() if other threads may be attempting to send a message - * simultaneously. The other threads must use also use the thread-safe - * trySendMessageSync() or trySendFrameSync() calls. - */ - void close(); - - /** - * A thread-safe version of close(). - */ - void closeSync(); - - /** - * Send a message over the pipe. - * - * trySendMessage() is best-effort. It will either immediately succeed to - * send the message, or it will fail immediately if the pipe reader is too - * busy and it's backlog of unread messages is too large. - * - * trySendMessage() also does not support arbitrarily large messages. - * It will also fail immediately if msgSize is larger than (PIPE_BUF - 4). - * - * If trySendMessage() succeeds, the message is guaranteed to be delivered to - * the pipe reader, except in the case where the pipe reader explicitly stops - * reading and destroys the pipe before processing all of its messages. - * - * On failure a TTransportException is thrown. The error code will be - * TTransportException::BAD_ARGS if the message is too large, - * TTransportException::TIMED_OUT if the message cannot be sent right now - * because the pipe is full, or TTransportException::NOT_OPEN if the pipe has - * already been closed. - * - * This method is thread safe with other simultaneous trySendMessage() calls, - * but not with close() calls. Use trySendMessageSync() and closeSync() if a - * close may occur simultaneously on another thread. - */ - void trySendMessage(const void *msg, uint32_t msgSize); - - /** - * A thread-safe version of trySendMessage(). - * - * This may be called simultaneously with closeSync(). - */ - void trySendMessageSync(const void *msg, uint32_t msgSize); - - /** - * Send a message over the pipe. - * - * This is identical to trySendMessage(), except that the caller must provide - * 4 bytes at the beginning of the message where we can write a frame length. - * This allows us to avoid copying the message into a new buffer. - * (trySendMessage() always has to make a copy of the message.) - * - * @param frame A pointer to the frame buffer. trySendFrame() will - * overwrite the first 4 bytes of this buffer. When the read callback - * receives the message, it will not see these first 4 bytes. - * @param frameSize The full size of the frame buffer. This must be at - * least 4 bytes long. The actual message size that will be sent is - * frameSize - 4. - */ - void trySendFrame(void *frame, uint32_t frameSize); - - /** - * A thread-safe version of trySendFrame(). - * - * This may be called simultaneously with closeSync(). - */ - void trySendFrameSync(void *frame, uint32_t frameSize); - - /** - * Get the number of messages which haven't been processed. - */ - int64_t getNumNotProcessed() const { - return numInputs_ - numOutputs_; - } - - /** - * Set the callback to receive read notifications from this pipe. - * - * This method must be invoked from the pipe's read thread. - * - * May throw TLibraryException on error. The callback will always be unset - * (NULL) after an error. - */ - void setReadCallback(Callback *callback); - - /** - * Mark the pipe read event handler as an "internal" event handler. - * - * This causes the notification pipe not to be counted when determining if - * the TEventBase has any more active events to wait on. This is intended to - * be used only be internal TEventBase code. This API is not guaranteed to - * remain stable or portable in the future. - * - * May throw TLibraryException if it fails to re-register its event handler - * with the correct flags. - */ - void setInternal(bool internal); - - /** - * Get the maximum number of messages that will be read on a single iteration - * of the event loop. - */ - uint32_t getMaxReadAtOnce() const { - return maxReadAtOnce_; - } - - /** - * Set the maximum number of messages to read each iteration of the event - * loop. - * - * If messages are being received faster than they can be processed, this - * helps limit the rate at which they will be read. This can be used to - * prevent the notification pipe reader from starving other users of the - * event loop. - */ - void setMaxReadAtOnce(uint32_t numMessages) { - maxReadAtOnce_ = numMessages; - } - - /** - * The maximum message size that can be sent over a TNotificationPipe. - * - * This restriction ensures that trySendMessage() can send all messages - * atomically. This is (PIPE_BUF - 4) bytes. (On Linux, this is 4092 - * bytes.) - */ - static const uint32_t kMaxMessageSize = PIPE_BUF - 4; - - /** - * The default maximum number of messages that will be read each time around - * the event loop. - * - * This value used for each TNotificationPipe can be changed using the - * setMaxReadAtOnce() method. - */ - static const uint32_t kDefaultMaxReadAtOnce = 10; - - private: - enum ReadAction { - kDoNothing, - kContinue, - kWaitForRead, - kRunInNextLoop, - }; - - // Forbidden copy constructor and assignment opererator - TNotificationPipe(TNotificationPipe const &); - TNotificationPipe& operator=(TNotificationPipe const &); - - // TEventHandler methods - virtual void handlerReady(uint16_t events) THRIFT_NOEXCEPT; - - // TEventBase::LoopCallback methods - virtual void runLoopCallback() THRIFT_NOEXCEPT; - - void initPipe(); - void registerPipeEvent(); - void readMessages(ReadAction action); - ReadAction performRead(); - ReadAction processReadData(uint32_t* messagesProcessed); - ReadAction handleError(const char* fmt, ...) - __attribute__((format(printf, 2, 3))); - void checkMessage(uint32_t msgSize); - void writeFrame(const void *frame, uint32_t frameSize); - - TEventBase *eventBase_; - Callback *readCallback_; - int readPipe_; - int writePipe_; - bool internal_; - uint32_t maxReadAtOnce_; - int64_t numInputs_; - int64_t numOutputs_; - - /** - * Mutex for guarding numInputs_ - */ - concurrency::Mutex numInputsMutex_; - - /** - * A mutex that guards writePipe_. - * - * This is used by closeSync(), trySendMessageSync(), and trySendFrameSync(), - * since trySendMessageSync() and trySendFrameSync() read writePipe_ - * and closeSync() resets it to -1. - */ - concurrency::NoStarveReadWriteMutex writePipeMutex_; - - /** - * A pointer to the end of valid read data in the read buffer. - */ - uint8_t *readPtr_; - /** - * An internal read buffer - * - * This is large enough to contain the maximum possible message plus the - * mssage length. - */ - uint8_t readBuffer_[kMaxMessageSize + 4]; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TNOTIFICATIONPIPE_H diff --git a/thrift/lib/cpp/async/TNotificationQueue.h b/thrift/lib/cpp/async/TNotificationQueue.h deleted file mode 100644 index e2538e0793..0000000000 --- a/thrift/lib/cpp/async/TNotificationQueue.h +++ /dev/null @@ -1,592 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TNOTIFICATIONQUEUE_H_ -#define THRIFT_ASYNC_TNOTIFICATIONQUEUE_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/async/TEventBase.h" -#include "thrift/lib/cpp/async/TEventHandler.h" - -#include "external/google_base/spinlock.h" -#include "external/glog/logging.h" -#include -#include "folly/eventfd.h" - -namespace apache { namespace thrift { namespace async { - -/** - * An exception class to be thrown when a TNotificationQueue is full. - */ -class TQueueFullException : public TLibraryException { - public: - TQueueFullException() : - TLibraryException("unable to add message to TNotificationQueue: " - "queue is full") {} -}; - -/** - * A producer-consumer queue for passing messages between TEventBase threads. - * - * Messages can be added to the queue from any thread. Multiple consumers may - * listen to the queue from multiple TEventBase threads. - * - * A TNotificationQueue may not be destroyed while there are still consumers - * registered to receive events from the queue. It is the user's - * responsibility to ensure that all consumers are unregistered before the - * queue is destroyed. - * - * MessageT should be MoveConstructible (i.e., must support either a move - * constructor or a copy constructor, or both). Ideally it's move constructor - * (or copy constructor if no move constructor is provided) should never throw - * exceptions. If the constructor may throw, the consumers could end up - * spinning trying to move a message off the queue and failing, and then - * retrying. - */ -template -class TNotificationQueue { - public: - /** - * A callback interface for consuming messages from the queue as they arrive. - */ - class Consumer : private TEventHandler { - public: - enum : uint16_t { kDefaultMaxReadAtOnce = 10 }; - - Consumer() - : queue_(NULL), - destroyedFlagPtr_(NULL), - maxReadAtOnce_(kDefaultMaxReadAtOnce) {} - - virtual ~Consumer(); - - /** - * messageAvailable() will be invoked whenever a new - * message is available from the pipe. - */ - virtual void messageAvailable(MessageT&& message) = 0; - - /** - * Begin consuming messages from the specified queue. - * - * messageAvailable() will be called whenever a message is available. This - * consumer will continue to consume messages until stopConsuming() is - * called. - * - * A Consumer may only consume messages from a single TNotificationQueue at - * a time. startConsuming() should not be called if this consumer is - * already consuming. - */ - void startConsuming(TEventBase* eventBase, TNotificationQueue* queue) { - init(eventBase, queue); - registerHandler(READ | PERSIST); - } - - /** - * Same as above but registers this event handler as internal so that it - * doesn't count towards the pending reader count for the IOLoop. - */ - void startConsumingInternal( - TEventBase* eventBase, TNotificationQueue* queue) { - init(eventBase, queue); - registerInternalHandler(READ | PERSIST); - } - - /** - * Stop consuming messages. - * - * startConsuming() may be called again to resume consumption of messages - * at a later point in time. - */ - void stopConsuming(); - - /** - * Get the TNotificationQueue that this consumer is currently consuming - * messages from. Returns NULL if the consumer is not currently consuming - * events from any queue. - */ - TNotificationQueue* getCurrentQueue() const { - return queue_; - } - - /** - * Set a limit on how many messages this consumer will read each iteration - * around the event loop. - * - * This helps rate-limit how much work the Consumer will do each event loop - * iteration, to prevent it from starving other event handlers. - * - * A limit of 0 means no limit will be enforced. If unset, the limit - * defaults to kDefaultMaxReadAtOnce (defined to 10 above). - */ - void setMaxReadAtOnce(uint32_t maxAtOnce) { - maxReadAtOnce_ = maxAtOnce; - } - uint32_t getMaxReadAtOnce() const { - return maxReadAtOnce_; - } - - private: - void init(TEventBase* eventBase, TNotificationQueue* queue); - - virtual void handlerReady(uint16_t events) THRIFT_NOEXCEPT; - - TNotificationQueue* queue_; - bool* destroyedFlagPtr_; - uint32_t maxReadAtOnce_; - }; - - enum class FdType { - EVENTFD, - PIPE - }; - - /** - * Create a new TNotificationQueue. - * - * If the maxSize parameter is specified, this sets the maximum queue size - * that will be enforced by tryPutMessage(). (This size is advisory, and may - * be exceeded if producers explicitly use putMessage() instead of - * tryPutMessage().) - * - * The fdType parameter determines the type of file descriptor used - * internally to signal message availability. The default (eventfd) is - * preferable for performance and because it won't fail when the queue gets - * too long. It is not available on on older and non-linux kernels, however. - * In this case the code will fall back to using a pipe, the parameter is - * mostly for testing purposes. - */ - explicit TNotificationQueue(uint32_t maxSize = 0, - FdType fdType = FdType::EVENTFD) - : spinlock_(), - eventfd_(-1), - pipeFds_{-1, -1}, - advisoryMaxQueueSize_(maxSize), - queue_() { - if (fdType == FdType::EVENTFD) { - eventfd_ = folly::eventfd(0, EFD_CLOEXEC | EFD_NONBLOCK | EFD_SEMAPHORE); - if (eventfd_ == -1) { - if (errno == ENOSYS || errno == EINVAL) { - // eventfd not availalble - T_ERROR("failed to create eventfd for TNotificationQueue: %d, " - "falling back to pipe mode", errno); - fdType = FdType::PIPE; - } else { - // some other error - throw TLibraryException("Failed to create eventfd for " - "TNotificationQueue", errno); - } - } - } - if (fdType == FdType::PIPE) { - if (pipe(pipeFds_)) { - throw TLibraryException("Failed to create pipe for TNotificationQueue", - errno); - } - try { - // put both ends of the pipe into non-blocking mode - if (fcntl(pipeFds_[0], F_SETFL, O_RDONLY | O_NONBLOCK) != 0) { - throw TLibraryException("failed to put TNotificationQueue pipe read " - "endpoint into non-blocking mode", errno); - } - if (fcntl(pipeFds_[1], F_SETFL, O_WRONLY | O_NONBLOCK) != 0) { - throw TLibraryException("failed to put TNotificationQueue pipe write " - "endpoint into non-blocking mode", errno); - } - } catch (...) { - ::close(pipeFds_[0]); - ::close(pipeFds_[1]); - throw; - } - } - } - - ~TNotificationQueue() { - if (eventfd_ >= 0) { - ::close(eventfd_); - eventfd_ = -1; - } - if (pipeFds_[0] >= 0) { - ::close(pipeFds_[0]); - pipeFds_[0] = -1; - } - if (pipeFds_[1] >= 0) { - ::close(pipeFds_[1]); - pipeFds_[1] = -1; - } - } - - /** - * Set the advisory maximum queue size. - * - * This maximum queue size affects calls to tryPutMessage(). Message - * producers can still use the putMessage() call to unconditionally put a - * message on the queue, ignoring the configured maximum queue size. This - * can cause the queue size to exceed the configured maximum. - */ - void setMaxQueueSize(uint32_t max) { - advisoryMaxQueueSize_ = max; - } - - /** - * Attempt to put a message on the queue if the queue is not already full. - * - * If the queue is full, a TQueueFullException will be thrown. The - * setMaxQueueSize() function controls the maximum queue size. - * - * This method may contend briefly on a spinlock if many threads are - * concurrently accessing the queue, but for all intents and purposes it will - * immediately place the message on the queue and return. - * - * tryPutMessage() may throw std::bad_alloc if memory allocation fails, and - * may throw any other exception thrown by the MessageT move/copy - * constructor. - */ - void tryPutMessage(MessageT&& message) { - putMessageImpl(std::move(message), advisoryMaxQueueSize_); - } - void tryPutMessage(const MessageT& message) { - putMessageImpl(message, advisoryMaxQueueSize_); - } - - /** - * Unconditionally put a message on the queue. - * - * This method is like tryPutMessage(), but ignores the maximum queue size - * and always puts the message on the queue, even if the maximum queue size - * would be exceeded. - * - * putMessage() may throw std::bad_alloc if memory allocation fails, and may - * throw any other exception thrown by the MessageT move/copy constructor. - */ - void putMessage(MessageT&& message) { - putMessageImpl(std::move(message), 0); - } - void putMessage(const MessageT& message) { - putMessageImpl(message, 0); - } - - /** - * Put several messages on the queue. - */ - template - void putMessages(InputIteratorT first, InputIteratorT last) { - typedef typename std::iterator_traits::iterator_category - IterCategory; - putMessagesImpl(first, last, IterCategory()); - } - - /** - * Try to immediately pull a message off of the queue, without blocking. - * - * If a message is immediately available, the result parameter will be - * updated to contain the message contents and true will be returned. - * - * If no message is available, false will be returned and result will be left - * unmodified. - */ - bool tryConsume(MessageT& result) { - if (!tryConsumeEvent()) { - return false; - } - - try { - facebook::SpinLockHolder guard(&spinlock_); - result = std::move(queue_.front()); - queue_.pop_front(); - } catch (...) { - // Handle an exception if the assignment operator happens to throw. - // We consumed an event but weren't able to pop the message off the - // queue. Signal the event again since the message is still in the - // queue. - signalEvent(1); - throw; - } - - return true; - } - - private: - // Forbidden copy constructor and assignment operator - TNotificationQueue(TNotificationQueue const &) = delete; - TNotificationQueue& operator=(TNotificationQueue const &) = delete; - - inline void checkQueueSize(size_t maxSize) const { - assert(spinlock_.IsHeld()); - if (maxSize > 0 && queue_.size() >= maxSize) { - throw TQueueFullException(); - } - } - - inline void signalEvent(uint64_t numAdded = 1) const { - static const uint8_t kPipeMessage[] = { - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - }; - - ssize_t bytes_written = 0; - ssize_t bytes_expected = 0; - if (eventfd_ >= 0) { - bytes_expected = static_cast(sizeof(numAdded)); - bytes_written = ::write(eventfd_, &numAdded, sizeof(numAdded)); - } else { - // pipe semantics, add one message for each numAdded - bytes_expected = numAdded; - do { - size_t messageSize = std::min(numAdded, sizeof(kPipeMessage)); - ssize_t rc = ::write(pipeFds_[1], kPipeMessage, messageSize); - if (rc < 0) { - // TODO: if the pipe is full, write will fail with EAGAIN. - // See task #1044651 for how this could be handled - break; - } - numAdded -= rc; - bytes_written += rc; - } while (numAdded > 0); - } - if (bytes_written != bytes_expected) { - throw TLibraryException("failed to signal TNotificationQueue after " - "write", errno); - } - } - - bool tryConsumeEvent() { - uint64_t value = 0; - ssize_t rc = -1; - if (eventfd_ >= 0) { - rc = ::read(eventfd_, &value, sizeof(value)); - } else { - uint8_t value8; - rc = ::read(pipeFds_[0], &value8, sizeof(value8)); - value = value8; - } - if (rc < 0) { - // EAGAIN should pretty much be the only error we can ever get. - // This means someone else already processed the only available message. - assert(errno == EAGAIN); - return false; - } - assert(value == 1); - return true; - } - - void putMessageImpl(MessageT&& message, size_t maxSize) { - { - facebook::SpinLockHolder guard(&spinlock_); - checkQueueSize(maxSize); - queue_.push_back(std::move(message)); - } - signalEvent(); - } - - void putMessageImpl(const MessageT& message, size_t maxSize) { - { - facebook::SpinLockHolder guard(&spinlock_); - checkQueueSize(maxSize); - queue_.push_back(message); - } - signalEvent(); - } - - template - void putMessagesImpl(InputIteratorT first, InputIteratorT last, - std::input_iterator_tag) { - uint64_t numAdded = 0; - { - facebook::SpinLockHolder guard(&spinlock_); - while (first != last) { - queue_.push_back(*first); - ++first; - ++numAdded; - } - } - signalEvent(numAdded); - } - - template - void putMessagesImpl(InputIteratorT first, InputIteratorT last, - std::forward_iterator_tag) { - uint64_t numAdded = std::distance(first, last); - { - facebook::SpinLockHolder guard(&spinlock_); - queue_.insert(queue_.end(), first, last); - } - signalEvent(numAdded); - } - - facebook::SpinLock spinlock_; - int eventfd_; - int pipeFds_[2]; // to fallback to on older/non-linux systems - uint32_t advisoryMaxQueueSize_; - std::deque queue_; -}; - -template -TNotificationQueue::Consumer::~Consumer() { - // If we are in the middle of a call to handlerReady(), destroyedFlagPtr_ - // will be non-NULL. Mark the value that it points to, so that - // handlerReady() will know the callback is destroyed, and that it cannot - // access any member variables anymore. - if (destroyedFlagPtr_) { - *destroyedFlagPtr_ = true; - } -} - -template -void TNotificationQueue::Consumer::handlerReady(uint16_t events) - THRIFT_NOEXCEPT { - uint32_t numProcessed = 0; - while (true) { - // Try to decrement the eventfd. - // - // We decrement the eventfd before checking the queue, and only pop a - // message off the queue if we read from the eventfd. - // - // Reading the eventfd first allows us to not have to hold the spinlock - // while accessing the eventfd. If we popped from the queue first, we - // would have to hold the lock while reading from or writing to the - // eventfd. (Multiple consumers may be woken up from a single eventfd - // notification. If we popped from the queue first, we could end up - // popping a message from the queue before the eventfd has been notified by - // the producer, unless the consumer and producer both held the spinlock - // around the entire operation.) - if (!queue_->tryConsumeEvent()) { - // no message available right now - return; - } - - // Now pop the message off of the queue. - // We successfully consumed the eventfd notification. - // There should be a message available for us to consume. - // - // We have to manually acquire and release the spinlock here, rather than - // using SpinLockHolder since the MessageT has to be constructed while - // holding the spinlock and available after we release it. SpinLockHolder - // unfortunately doesn't provide a release() method. (We can't construct - // MessageT first since we have no guarantee that MessageT has a default - // constructor. - queue_->spinlock_.Lock(); - bool locked = true; - - try { - // The eventfd is incremented once for every message, and only - // decremented when a message is popped off. There should always be a - // message here to read. - CHECK(!queue_->queue_.empty()); - - // Pull a message off the queue. - MessageT msg(std::move(queue_->queue_.front())); - queue_->queue_.pop_front(); - - // Check to see if the queue is empty now. - // We use this as an optimization to see if we should bother trying to - // loop again and read another message after invoking this callback. - bool wasEmpty = queue_->queue_.empty(); - - // Now unlock the spinlock before we invoke the callback. - queue_->spinlock_.Unlock(); - locked = false; - - // Call the callback - bool callbackDestroyed = false; - CHECK(destroyedFlagPtr_ == NULL); - destroyedFlagPtr_ = &callbackDestroyed; - messageAvailable(std::move(msg)); - - // If the callback was destroyed before it returned, we are done - if (callbackDestroyed) { - return; - } - destroyedFlagPtr_ = NULL; - - // If the callback is no longer installed, we are done. - if (queue_ == NULL) { - return; - } - - // If we have hit maxReadAtOnce_, we are done. - ++numProcessed; - if (maxReadAtOnce_ > 0 && numProcessed >= maxReadAtOnce_) { - return; - } - - // If the queue was empty before we invoked the callback, it's probable - // that it is still empty now. Just go ahead and return, rather than - // looping again and trying to re-read from the eventfd. (If a new - // message had in fact arrived while we were invoking the callback, we - // will simply be woken up the next time around the event loop and will - // process the message then.) - if (wasEmpty) { - return; - } - } catch (const std::exception& ex) { - // This catch block is really just to handle the case where the MessageT - // constructor throws. The messageAvailable() callback itself is - // declared as noexcept and should never throw. - // - // If the MessageT constructor does throw we try to handle it as best as - // we can, but we can't work miracles. We will just ignore the error for - // now and return. The next time around the event loop we will end up - // trying to read the message again. If MessageT continues to throw we - // will never make forward progress and will keep trying each time around - // the event loop. - if (locked) { - // Unlock the spinlock. - queue_->spinlock_.Unlock(); - - // Push a notification back on the eventfd since we didn't actually - // read the message off of the queue. - queue_->signalEvent(1); - } - - return; - } - } -} - -template -void TNotificationQueue::Consumer::init( - TEventBase* eventBase, - TNotificationQueue* queue) { - assert(eventBase->isInEventBaseThread()); - assert(queue_ == NULL); - assert(!isHandlerRegistered()); - - queue_ = queue; - if (queue_->eventfd_ >= 0) { - initHandler(eventBase, queue_->eventfd_); - } else { - initHandler(eventBase, queue_->pipeFds_[0]); - } -} - -template -void TNotificationQueue::Consumer::stopConsuming() { - if (queue_ == NULL) { - assert(!isHandlerRegistered()); - return; - } - - assert(isHandlerRegistered()); - unregisterHandler(); - detachEventBase(); - queue_ = NULL; -} - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TNOTIFICATIONQUEUE_H_ diff --git a/thrift/lib/cpp/async/TQueuingAsyncProcessor.h b/thrift/lib/cpp/async/TQueuingAsyncProcessor.h deleted file mode 100644 index 5f2c649823..0000000000 --- a/thrift/lib/cpp/async/TQueuingAsyncProcessor.h +++ /dev/null @@ -1,70 +0,0 @@ -#ifndef _THRIFT_TQUEUINGASYNCPROCESSOR_H_ -#define _THRIFT_TQUEUINGASYNCPROCESSOR_H_ 1 - -#include -#include -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/async/TAsyncProcessor.h" -#include "thrift/lib/cpp/async/TEventTask.h" -#include "thrift/lib/cpp/concurrency/Exception.h" - -namespace apache { namespace thrift { namespace async { - -/** - * Adapter to allow a TProcessor to be used as a TAsyncProcessor. - * - * Note: this is not intended for use outside of TEventConnection since the - * callback mechanism used in TEventTask will invoke handleAsyncTaskComplete() - * regardless of what is passed in as the cob. - * - * Uses a per-server task queue for all calls. - */ -class TQueuingAsyncProcessor : public TAsyncProcessor { - public: - TQueuingAsyncProcessor( - boost::shared_ptr processor, - boost::shared_ptr threadManager, - int64_t taskExpireTime, - TEventConnection* connection) - : processor_(processor) - , threadManager_(threadManager) - , taskExpireTime_(taskExpireTime) - , connection_(connection) - {} - - virtual void process( - std::tr1::function cob, - boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* context) { - - boost::shared_ptr task = - boost::shared_ptr( - new TEventTask(connection_)); - - try { - threadManager_->add(task, 0LL, taskExpireTime_); - } catch (apache::thrift::concurrency::IllegalStateException & ise) { - T_ERROR("IllegalStateException: TQueuingAsyncProcessor::process() %s", - ise.what()); - // no task will be making a callback - return cob(false); - } - } - - private: - boost::shared_ptr processor_; - - /// For processing via thread pool - boost::shared_ptr threadManager_; - - /// Time in milliseconds before an unperformed task expires (0 == infinite). - int64_t taskExpireTime_; - - /// The worker that started us - TEventConnection* connection_; -}; - -}}} // apache::thrift::async - -#endif // #ifndef _THRIFT_TQUEUINGASYNCPROCESSOR_H_ diff --git a/thrift/lib/cpp/async/TStreamAsyncChannel.h b/thrift/lib/cpp/async/TStreamAsyncChannel.h deleted file mode 100644 index 3e9ec9f001..0000000000 --- a/thrift/lib/cpp/async/TStreamAsyncChannel.h +++ /dev/null @@ -1,456 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TSTREAMASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TSTREAMASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncEventChannel.h" -#include "thrift/lib/cpp/async/TAsyncTransport.h" -#include "thrift/lib/cpp/async/TAsyncTimeout.h" - -#include - -namespace apache { namespace thrift { namespace async { - -class TAsyncTransport; - -template -class TAsyncChannelWriteRequestBase { - public: - typedef std::tr1::function VoidCallback; - - TAsyncChannelWriteRequestBase(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message) - : buffer_(message), - next_(NULL), - callback_(callback), - errorCallback_(errorCallback) { - - // The WriteRequest's buffer consumes all of the data in message, - // so we don't attempt to resend data; yet is also an observer - // which prevents consumed data from being overwritten while it's pending - // for the transport - uint32_t len = message->available_read(); - message->borrow(NULL, &len); - message->consume(len); - } - - virtual ~TAsyncChannelWriteRequestBase() { - } - - void setNext(Subclass_* next) { - assert(next_ == NULL); - next_ = next; - } - - Subclass_* getNext() const { - return next_; - } - - protected: - apache::thrift::transport::TMemoryBuffer buffer_; - - void invokeCallback() { - // unlink the buffer before invoking the callback, since we are - // now done with it. Not strictly required but faster. - buffer_.unlink(); - callback_(); - } - - void invokeErrorCallback() { - // unlink the buffer before invoking the callback, since we are - // now done with it. Not strictly required but faster. - buffer_.unlink(); - errorCallback_(); - } - - private: - TAsyncChannelWriteRequestBase(); - - Subclass_* next_; - - VoidCallback callback_; - VoidCallback errorCallback_; -}; - - -/** - * TStreamAsyncChannel is a helper class for channel implementations that use - * TAsyncTransport underneath. - * - * TStreamAsyncChannel provides the basic functionality for implementing a - * message-based asynchronous channel on top of a streaming TAsyncTransport. - * - * It requires two template arguments that control how the stream is broken up - * into messagess: - * - * WriteRequest_: - * - * This template parameter controls how messages are written to the - * underlying stream. It must implement the following methods: - * - * - WriteRequest_(const VoidCallback& callback, - * const VoidCallback& errorCallback, - * transport::TMemoryBuffer* message); - * - * The WriteRequest_ constructor accepts the success and error callbacks, - * and the TMemoryBuffer containing the data to send. The WriteRequest_ - * may consume data from the message, but does not own the TMemoryBuffer - * (i.e., it should not delete the TMemoryBuffer.) - * - * - void setNext(WriteRequest_* next); - * - WriteRequest_* getNext() const; - * - * These two methods support chaining together a list of WriteRequest_ - * objects. This is used when multiple write requests are pending on the - * channel. - * - * - void write(TAsyncTransport* transport, - * TAsyncTransport::WriteCallback* callback) THRIFT_NOEXCEPT; - * - * This method will be called to schedule the write. The WriteRequest_ - * should invoke the transport's write() or writev() method with the data - * to send, and set the specified callback as the transport callback. - * - * Note that this API requires the WriteRequest_ to write the entire - * message with a single write() or writev() call. This allows the code - * to let the TAsyncTransport perform the write queuing when multiple - * messages are pending. (If needed we could rewrite this API in the - * future to relax this restriction.) - * - * - void writeSuccess() THRIFT_NOEXCEPT; - * - void writeError(size_t bytesWritten, - * const TTransportException& ex) THRIFT_NOEXCEPT; - * - * Either writeSuccess() or writeError() will be invoked once the message - * write has completed. - * - * ReadState_: - * - * This template parameter controls how the incoming stream is broken up into - * individual messages. It must implement the following methods: - * - * - ReadState_(); - * - * The ReadState_ constructor takes no arguments. - * - * - void setCallbackBuffer(transport::TMemoryBuffer* buffer); - * - * When a new read is started, setCallbackBuffer() is called to set the - * buffer into which the message data should be placed. - * - * - void unsetCallbackBuffer(); - * - * unsetCallbackBuffer() is called to clear the callback buffer when after - * a full message has been read. - * - * - bool hasReadAheadData(); - * - * Some ReadState_ implementations may perform read-ahead, and read past - * the end of the message when reading from the underlying transport. - * hasReadAheadData() is called when a new read starts, to see if the - * ReadState_ has pending data for a new message that has already been read - * from the transport. - * - * If hasReadAheadData() returns true, readDataAvailable(0) will be called - * immediately, rather than waiting for new data from the transport. - * - * - bool hasPartialMessage(); - * - * When EOF is read from the underlying transport, hasPartialMessage() is - * called to see if the EOF should be treated as an error or a normal - * close. (It is an error if hasPartialMessage() returns true.) - * - * - void getReadBuffer(void** bufReturn, size_t* lenReturn); - * - * When data becomes available on the underlying transport, getReadBuffer() - * is called to get the buffer where the data should be placed. - * - * - bool readDataAvailable(size_t len); - * - * readDataAvailable() is called when new data has been read from the - * underlying transport. The data will have been placed in the buffer - * returned by the previous getReadBuffer() call. - */ -template -class TStreamAsyncChannel : public TAsyncEventChannel, - protected TAsyncTransport::ReadCallback, - protected TAsyncTransport::WriteCallback, - protected TAsyncTimeout { - public: - explicit TStreamAsyncChannel( - const boost::shared_ptr& transport); - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TStreamAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr( - new TStreamAsyncChannel(transport), Destructor()); - } - - /** - * Destroy the channel. - * - * destroy() must be called to destroy the channel. The normal destructor - * is private, and should not be invoked directly. This prevents callers - * from deleting a TStreamAsyncChannel while it is invoking a callback. - */ - virtual void destroy(); - - // Methods inherited from TAsyncEventChannel - virtual bool readable() const; - virtual bool good() const; - virtual bool error() const; - virtual bool timedOut() const; - - /** - * Send a message to the channel; note that "errorCob" will be called - * after a partial write as well as other errors. We will call "errorCob" - * immediately (before return) if the channel is unusable for some reason, - * and "cob" immediately if we're able to perform the write without delay. - */ - virtual void sendMessage(const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* message); - - /** - * Receive a message from the channel; note that "errorCob" will be called - * after a partial read as well as other errors. We will call "errorCob" - * immediately (before return) if the channel is unusable for some reason, - * and "cob" immediately if we're able to perform the read without delay. - * - * Note that an EOF is considered normal, so "cob" will be called although - * "good()" will be false. - */ - virtual void recvMessage(const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* message); - - /** - * Send a message to the channel and receive the response; note that the - * "errorCob: will be called after a write error and no receive is attempted. - * Also, a partial write or read will result in errorCob being called. - * We call "errorCob" before return if the channel is unusable for some - * reason. It is conceivable that "cob" will be called before return if data - * is somehow available in the channel when a read is first attempted. - */ - virtual void sendAndRecvMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* sendBuf, - transport::TMemoryBuffer* recvBuf); - - /** - * Close this channel. - * - * This gracefully closes the channel, waiting for all pending send - * requests to complete before actually closing the underlying transport. - * - * If a recvMessage() call is pending, it will be immediately failed. - */ - void close(); - - /** - * Close the channel immediately. - * - * This closes the channel immediately, dropping any outstanding messages - * waiting to be sent. - * - * If a recvMessage() call is pending, it will be immediately failed. - */ - void closeNow(); - - /** - * Attach the channel to a TEventBase. - * - * This may only be called if the channel is not currently attached to a - * TEventBase (by an earlier call to detachEventBase()). - * - * This method must be invoked in the TEventBase's thread. - */ - void attachEventBase(TEventBase* eventBase); - - /** - * Detach the channel from its TEventBase. - * - * This may only be called when the channel is idle and has no reads or - * writes pending. Once detached, the channel may not be used again until it - * is re-attached to a TEventBase by calling attachEventBase(). - * - * This method must be called from the current TEventBase's thread. - */ - void detachEventBase(); - - /** - * Get the TEventBase used by this channel. - */ - TEventBase* getEventBase() const; - - /** - * Set the timeout for receiving messages. - * - * When set to a non-zero value, the entire message must be received within - * the specified number of milliseconds, or the receive will fail and the - * channel will be closed. - * - * If setRecvTimeout() is invoked while a recvMessage() call is currently in - * progress, the timeout will be restarted using the new value. - */ - void setRecvTimeout(uint32_t milliseconds); - - /** - * Get the receive timeout. - * - * @return Returns the current receive timeout, in milliseconds. A return - * value of 0 indicates that no timeout is set. - */ - uint32_t getRecvTimeout() const { - return recvTimeout_; - } - - /** - * Cancel pending callbacks. Use this when the channel is closing because the - * server had been shut down. - */ - virtual void cancelCallbacks() { - readCallback_ = NULL; - readErrorCallback_ = NULL; - } - - /** - * Get the TAsyncTransport used by this channel. - */ - virtual boost::shared_ptr getTransport() { - return transport_; - } - - /** - * Determine if this channel is idle (i.e., has no outstanding reads or - * writes). - */ - bool isIdle() const { - return (writeReqHead_ == NULL) && (!readCallback_) && - !transport_->connecting(); - } - - protected: - struct ReadQueueEntry { - ReadQueueEntry(const VoidCallback& cob, - const VoidCallback& errorCob, - apache::thrift::transport::TMemoryBuffer* message) { - readCallback = cob; - readErrorCallback = errorCob; - readBuffer = message; - } - VoidCallback readCallback; - VoidCallback readErrorCallback; - transport::TMemoryBuffer *readBuffer; - int64_t startTime; - }; - - /** - * Protected destructor. - * - * Users of TStreamAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~TStreamAsyncChannel() {} - - // callbacks from TAsyncTransport - void getReadBuffer(void** bufReturn, size_t* lenReturn); - void readDataAvailable(size_t len) THRIFT_NOEXCEPT; - void readEOF() THRIFT_NOEXCEPT; - void readError(const transport::TTransportException& ex) THRIFT_NOEXCEPT; - - void writeSuccess() THRIFT_NOEXCEPT; - void writeError(size_t bytesWritten, - const transport::TTransportException& ex) THRIFT_NOEXCEPT; - - // callback from TAsyncTimeout - void timeoutExpired() THRIFT_NOEXCEPT; - - bool invokeReadDataAvailable(size_t len) THRIFT_NOEXCEPT; - void processReadEOF() THRIFT_NOEXCEPT; - void invokeReadCallback(VoidCallback cb, - char const* callbackName) THRIFT_NOEXCEPT; - - void pushWriteRequest(WriteRequest_* req) { - if (writeReqTail_ == NULL) { - assert(writeReqHead_ == NULL); - writeReqHead_ = req; - } else { - writeReqTail_->setNext(req); - } - writeReqTail_ = req; - } - - WriteRequest_* popWriteRequest() { - assert(writeReqHead_ != NULL); - - WriteRequest_* req = writeReqHead_; - writeReqHead_ = req->getNext(); - if (writeReqHead_ == NULL) { - assert(writeReqTail_ == req); - writeReqTail_ = NULL; - } - return req; - } - - void clearCallbacks() { - readCallback_ = NULL; - readErrorCallback_ = NULL; - } - - void failAllReads(); - - boost::shared_ptr transport_; - WriteRequest_* writeReqHead_; - WriteRequest_* writeReqTail_; - - ReadState_ readState_; - VoidCallback readCallback_; - VoidCallback readErrorCallback_; - std::list readCallbackQ_; - - uint32_t recvTimeout_; - // true if a timeout has occurred - bool timedOut_; - - private: - // Forbidden copy constructor and assignment opererator - TStreamAsyncChannel(TStreamAsyncChannel const &); - TStreamAsyncChannel& operator=(TStreamAsyncChannel const &); -}; - -class TStreamAsyncChannelFactory { - public: - virtual ~TStreamAsyncChannelFactory() {} - - virtual boost::shared_ptr newChannel( - const boost::shared_ptr& transport) = 0; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TSTREAMASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TStreamAsyncChannel.tcc b/thrift/lib/cpp/async/TStreamAsyncChannel.tcc deleted file mode 100644 index f149e0f2ea..0000000000 --- a/thrift/lib/cpp/async/TStreamAsyncChannel.tcc +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TSTREAMASYNCCHANNEL_TCC_ -#define THRIFT_ASYNC_TSTREAMASYNCCHANNEL_TCC_ 1 - -#include "thrift/lib/cpp/async/TStreamAsyncChannel.h" -#include "thrift/lib/cpp/transport/TSocketAddress.h" - -namespace apache { namespace thrift { namespace async { - -template -TStreamAsyncChannel::TStreamAsyncChannel( - const boost::shared_ptr& transport) - : TAsyncTimeout(transport->getEventBase()) - , transport_(transport) - , writeReqHead_(NULL) - , writeReqTail_(NULL) - , readState_() - , readCallback_() - , readErrorCallback_() - , recvTimeout_(0) - , timedOut_(false) { -} - -template -void TStreamAsyncChannel::destroy() { - // When destroy is called, close the channel immediately - closeNow(); - - // Then call TDelayedDestruction::destroy() to take care of - // whether or not we need immediate or delayed destruction - TDelayedDestruction::destroy(); -} - -template -bool TStreamAsyncChannel::readable() const { - return transport_->readable(); -} - -template -bool TStreamAsyncChannel::good() const { - return transport_->good(); -} - -template -bool TStreamAsyncChannel::error() const { - return (timedOut_ || transport_->error()); -} - -template -bool TStreamAsyncChannel::timedOut() const { - return timedOut_; -} - -template -void TStreamAsyncChannel::sendMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* message) { - assert(message); - DestructorGuard dg(this); - - if (!good()) { - T_DEBUG_T("sendMessage: transport went bad, bailing out."); - return errorCob(); - } - - if (message->available_read() == 0) { - T_ERROR("sendMessage: buffer is empty"); - return errorCob(); - } - - WriteRequest_* writeReq; - try { - writeReq = new WriteRequest_(cob, errorCob, message, this); - } catch (const std::exception& ex) { - T_ERROR("sendMessage: failed to allocate new write request object"); - errorCob(); - return; - } - - pushWriteRequest(writeReq); - writeReq->write(transport_.get(), this); -} - -template -void TStreamAsyncChannel::recvMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* message) { - assert(message); - DestructorGuard dg(this); - - if (!good()) { - T_DEBUG_T("recvMessage: transport went bad, bailing out."); - return errorCob(); - } - - if (message->available_read() != 0) { - T_ERROR("recvMessage: buffer is not empty."); - return errorCob(); - } - - if (readCallbackQ_.empty() && readCallback_ == NULL) { - readState_.setCallbackBuffer(message); - readCallback_ = cob; - readErrorCallback_ = errorCob; - } else { - readCallbackQ_.push_back(ReadQueueEntry(cob, errorCob, message)); - return; - } - - // Some ReadState implementations perform read-ahead, - // and they may already have data waiting to be processed. - // If so, we need to invoke readDataAvailable() immediately, rather than - // waiting for new data from the transport. - if (readState_.hasReadAheadData()) { - if (invokeReadDataAvailable(0)) { - // We already invoked the callback - return; - } - } - - // start the read timeout - if (recvTimeout_ > 0) { - scheduleTimeout(recvTimeout_); - } - - // start reading from the transport - // Note that setReadCallback() may invoke our read callback methods - // immediately, so the read may complete before setReadCallback() returns. - transport_->setReadCallback(this); -} - -template -void TStreamAsyncChannel::sendAndRecvMessage( - const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* sendBuf, - transport::TMemoryBuffer* recvBuf) { - // TODO: it would be better to perform this bind once, rather than - // each time sendAndRecvMessage() is called. - const VoidCallback& send_done = - std::tr1::bind(&TStreamAsyncChannel::recvMessage, this, cob, errorCob, - recvBuf); - - return sendMessage(send_done, errorCob, sendBuf); -} - -template -void TStreamAsyncChannel::close() { - DestructorGuard dg(this); // transport::close can invoke callbacks - - transport_->setReadCallback(NULL); - transport_->close(); - - if (readCallback_) { - processReadEOF(); - } - - // no need to free the write-queue here. The underlying transport will - // drain the writes first -} - -template -void TStreamAsyncChannel::closeNow() { - DestructorGuard dg(this); // transport::closeNow can invoke callbacks - - transport_->setReadCallback(NULL); - transport_->closeNow(); - - if (readCallback_) { - processReadEOF(); - } - - // no need to free the write-queue here. The underlying transport will - // fail pending writes first -} - -template -void TStreamAsyncChannel::attachEventBase( - TEventBase* eventBase) { - TAsyncTimeout::attachEventBase(eventBase); - transport_->attachEventBase(eventBase); -} - -template -void TStreamAsyncChannel::detachEventBase() { - // detachEventBase() may not be called while in the middle of reading or - // writing a message. Make sure there are no read callbacks - assert(!readCallback_ && readCallbackQ_.empty()); - // Even though readCallback_ is unset, the read timeout might still be - // installed. This happens when detachEventBase() is invoked by the - // recvMessage() callback, because invokeReadDataAvailable() optimizes and - // leaves the timeout and transport read callback installed while invoking - // the recvMessage() callback. Make sure we cancel the read timeout before - // detaching from the event base. - if (transport_->getReadCallback() == this) { - cancelTimeout(); - transport_->setReadCallback(NULL); - } - - TAsyncTimeout::detachEventBase(); - transport_->detachEventBase(); -} - -template -TEventBase* -TStreamAsyncChannel::getEventBase() const { - return transport_->getEventBase(); -} - -template -void TStreamAsyncChannel::setRecvTimeout( - uint32_t milliseconds) { - recvTimeout_ = milliseconds; - // If we are currently reading, update the timeout - if (transport_->getReadCallback() == this) { - if (milliseconds > 0) { - scheduleTimeout(milliseconds); - } else { - cancelTimeout(); - } - } -} - -template -void TStreamAsyncChannel::getReadBuffer( - void** bufReturn, size_t* lenReturn) { - readState_.getReadBuffer(bufReturn, lenReturn); -} - -template -void TStreamAsyncChannel::readDataAvailable( - size_t len) THRIFT_NOEXCEPT { - invokeReadDataAvailable(len); -} - -template -void TStreamAsyncChannel::readEOF() THRIFT_NOEXCEPT { - // readCallback_ may be NULL if readEOF() is invoked while the read callback - // is already running inside invokeReadDataAvailable(), since - // invokeReadDataAvailable() leaves the transport read callback installed - // while calling the channel read callback. - if (readCallback_) { - processReadEOF(); - } -} - -template -void TStreamAsyncChannel::readError( - const transport::TTransportException& ex) THRIFT_NOEXCEPT { - // readCallback_ may be NULL if readEOF() is invoked while the read callback - // is already running inside invokeReadDataAvailable(), since - // invokeReadDataAvailable() leaves the transport read callback installed - // while calling the channel read callback. - if (!readCallback_) { - return; - } - - DestructorGuard dg(this); - - cancelTimeout(); - failAllReads(); -} - -template -void TStreamAsyncChannel::writeSuccess() - THRIFT_NOEXCEPT { - DestructorGuard dg(this); - - WriteRequest_* req = popWriteRequest(); - req->writeSuccess(); - delete req; -} - -template -void TStreamAsyncChannel::writeError( - size_t bytesWritten, - const transport::TTransportException& ex) THRIFT_NOEXCEPT { - DestructorGuard dg(this); - - if (ex.getType() == transport::TTransportException::TIMED_OUT) { - timedOut_ = true; - } - - WriteRequest_* req = popWriteRequest(); - req->writeError(bytesWritten, ex); - delete req; -} - -template -void TStreamAsyncChannel::timeoutExpired() - THRIFT_NOEXCEPT { - DestructorGuard dg(this); - - timedOut_ = true; - - // Close the transport. It isn't usable anymore, since we are leaving - // it in a state with a partial message outstanding. - transport_->setReadCallback(NULL); - transport_->close(); - - // TODO: It would be nice not to have to always log an error message here; - // ideally the callback should decide if this is worth logging or not. - // Unfortunately the TAsyncChannel API doesn't allow us to pass any error - // info back to the callback. - T_ERROR("TStreamAsyncChannel: read timeout"); - - failAllReads(); -} - -template -bool TStreamAsyncChannel::invokeReadDataAvailable( - size_t len) THRIFT_NOEXCEPT { - DestructorGuard dg(this); - assert(readCallback_); - - bool readDone; - try { - readDone = readState_.readDataAvailable(len); - } catch (const std::exception& ex) { - // The channel is in an unknown state after an error processing read data. - // Close the channel to ensure that callers cannot try to read from this - // channel again. - // - // Make sure we do this after clearing our callbacks, so that the - // channel won't call our readEOF() method. - cancelTimeout(); - transport_->setReadCallback(NULL); - - std::string addressStr; - try { - transport::TSocketAddress addr; - transport_->getPeerAddress(&addr); - addressStr = addr.describe(); - } catch (const std::exception& e) { - addressStr = "unknown"; - } - - T_ERROR("error reading message from %s: %s", addressStr.c_str(), ex.what()); - failAllReads(); - return true; - } - - if (!readDone) { - // We read some data, but didn't finish reading a full message. - if (recvTimeout_ > 0) { - // Reset the timeout whenever we receive any data. - // TODO: This matches the old TAsyncChannel behavior, but it seems like - // it would make more sense to have the timeout apply to the entire - // message as a whole. Eventually we should remove this code that resets - // the timeout. - scheduleTimeout(recvTimeout_); - } - return false; - } - - TEventBase* ourEventBase = transport_->getEventBase(); - - // We read a full message. Invoke the read callback. - invokeReadCallback(readCallback_, "read callback"); - - // Note that we cleared readCallback_ and readErrorCallback_ before invoking - // the callback, but left ourself installed as the TAsyncTransport read - // callback. - // - // This allows us to avoid changing the TAsyncTransport read callback if the - // channel read callback immediately called recvMessage() again. This is - // fairly common, and we avoid 2 unnecessary epoll_ctl() calls by not - // changing the transport read callback. This results in a noticeable - // performance improvement. - // - // If readCallback_ is set again after the callback returns, we're still - // reading. recvMessage() will have taken care of reseting the receive - // timeout, so we have nothing else to do. - // - // If readCallback_ is unset, recvMessage() wasn't called again and we need - // to stop reading. If our TEventBase has changed, detachEventBase() will - // have already stopped reading. (Note that if the TEventBase has changed, - // it's possible that readCallback_ has already been set again to start - // reading in the other thread.) - if (transport_->getEventBase() == ourEventBase && !readCallback_) { - if (readCallbackQ_.empty()) { - cancelTimeout(); - transport_->setReadCallback(NULL); - } else { - // There are queued readers, pop one. This block should have the same - // effect as if recvMessage were called - const ReadQueueEntry &qentry = readCallbackQ_.front(); - readCallback_ = qentry.readCallback; - readErrorCallback_ = qentry.readErrorCallback; - readState_.setCallbackBuffer(qentry.readBuffer); - readCallbackQ_.pop_front(); - - if (readState_.hasReadAheadData()) { - return invokeReadDataAvailable(0); - } else if (recvTimeout_ > 0) { - scheduleTimeout(recvTimeout_); - } - } - } - return true; -} - -template -void TStreamAsyncChannel::failAllReads() { - invokeReadCallback(readErrorCallback_, "read error callback"); - - while (!readCallbackQ_.empty()) { - const ReadQueueEntry &qentry = readCallbackQ_.front(); - invokeReadCallback(qentry.readErrorCallback, "read error callback"); - readCallbackQ_.pop_front(); - } -} - -template -void TStreamAsyncChannel::processReadEOF() - THRIFT_NOEXCEPT { - DestructorGuard dg(this); - assert(readCallback_); - - VoidCallback cb; - const char* cbName; - if (readState_.hasPartialMessage()) { - cb = readErrorCallback_; - cbName = "read error callback"; - } else { - // We call the normal (non-error) callback if no data has been received yet - // when EOF occurs. - // - // TODO: It would be nicer to have a mechanism to indicate to the caller - // that EOF was received, instead of treating this just like 0-sized - // message. - cb = readCallback_; - cbName = "read callback"; - } - - cancelTimeout(); - invokeReadCallback(cb, cbName); - - // Any queued reads should be notified like the else case above as only - // the first reader can have partial data. - while (!readCallbackQ_.empty()) { - const ReadQueueEntry &qentry = readCallbackQ_.front(); - invokeReadCallback(qentry.readCallback, cbName); - readCallbackQ_.pop_front(); - } -} - -template -void TStreamAsyncChannel::invokeReadCallback( - VoidCallback cb, char const* callbackName) THRIFT_NOEXCEPT { - readState_.unsetCallbackBuffer(); - readCallback_ = VoidCallback(); - readErrorCallback_ = VoidCallback(); - - try { - cb(); - } catch (const std::exception& ex) { - T_ERROR("TAsyncChannel: %s threw %s exception: %s", - callbackName, typeid(ex).name(), ex.what()); - abort(); - } catch (...) { - T_ERROR("TAsyncChannel: %s threw exception", callbackName); - abort(); - } -} - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TSTREAMASYNCCHANNEL_TCC_ diff --git a/thrift/lib/cpp/async/TSyncToAsyncProcessor.h b/thrift/lib/cpp/async/TSyncToAsyncProcessor.h deleted file mode 100644 index 4099a9c022..0000000000 --- a/thrift/lib/cpp/async/TSyncToAsyncProcessor.h +++ /dev/null @@ -1,42 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TSYNCTOASYNCPROCESSOR_H_ -#define _THRIFT_TSYNCTOASYNCPROCESSOR_H_ 1 - -#include -#include -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/async/TAsyncProcessor.h" - -namespace apache { namespace thrift { namespace async { - -/** - * Adapter to allow a TProcessor to be used as a TAsyncProcessor. - * - * Note that this should only be used for handlers that return quickly without - * blocking, since async servers can be stalled by a single blocking operation. - */ -class TSyncToAsyncProcessor : public TAsyncProcessor { - public: - TSyncToAsyncProcessor(boost::shared_ptr processor) - : processor_(processor) - {} - - virtual void process(std::tr1::function _return, - boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* context) { - return _return(processor_->process(in, out, context)); - } - - private: - boost::shared_ptr processor_; -}; - -}}} // apache::thrift::async - -#endif // #ifndef _THRIFT_TSYNCTOASYNCPROCESSOR_H_ diff --git a/thrift/lib/cpp/async/TUndelayedDestruction.h b/thrift/lib/cpp/async/TUndelayedDestruction.h deleted file mode 100644 index fcc9a5cb9c..0000000000 --- a/thrift/lib/cpp/async/TUndelayedDestruction.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TUNDELAYEDDESTRUCTION_H_ -#define THRIFT_ASYNC_TUNDELAYEDDESTRUCTION_H_ 1 - -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace async { - -/** - * A helper class to allow a TDelayedDestruction object to be instantiated on - * the stack. - * - * This class derives from an existing TDelayedDestruction type and makes the - * destructor public again. This allows objects of this type to be declared on - * the stack or directly inside another class. Normally TDelayedDestruction - * objects must be dynamically allocated on the heap. - * - * However, the trade-off is that you lose some of the protections provided by - * TDelayedDestruction::destroy(). TDelayedDestruction::destroy() will - * automatically delay destruction of the object until it is safe to do so. - * If you use TUndelayedDestruction, you become responsible for ensuring that - * you only destroy the object where it is safe to do so. Attempting to - * destroy a TUndelayedDestruction object while it has a non-zero destructor - * guard count will abort the program. - */ -template -class TUndelayedDestruction : public TDD { - public: - // We want to expose all constructors provided by the parent class. - // C++11 adds constructor inheritance to support this. Unfortunately gcc - // does not implement constructor inheritance yet, so we have to fake it with - // variadic templates. -#if THRIFT_HAVE_CONSTRUCTOR_INHERITANCE - using TDD::TDD; -#else - // We unfortunately can't simulate constructor inheritance as well as I'd - // like. - // - // Ideally we would use std::enable_if<> and std::is_constructible<> to - // provide only constructor methods that are valid for our parent class. - // Unfortunately std::is_constructible<> doesn't work for types that aren't - // destructible. In gcc-4.6 it results in a compiler error. In the latest - // gcc code it looks like it has been fixed to return false. (The language - // in the standard seems to indicate that returning false is the correct - // behavior for non-destructible types, which is unfortunate.) - template - explicit TUndelayedDestruction(Args&& ...args) - : TDD(std::forward(args)...) {} -#endif - - /** - * Public destructor. - * - * The caller is responsible for ensuring that the object is only destroyed - * where it is safe to do so. (i.e., when the destructor guard count is 0). - * - * The exact conditions for meeting this may be dependant upon your class - * semantics. Typically you are only guaranteed that it is safe to destroy - * the object directly from the event loop (e.g., directly from a - * TEventBase::LoopCallback), or when the event loop is stopped. - */ - virtual ~TUndelayedDestruction() { - // Crash if the caller is destroying us with outstanding destructor guards. - if (this->getDestructorGuardCount() != 0) { - abort(); - } - // Invoke destroy. This is necessary since our base class may have - // implemented custom behavior in destroy(). - this->destroy(); - } - - protected: - /** - * Override our parent's destroy() method to make it protected. - * Callers should use the normal destructor instead of destroy - */ - virtual void destroy() { - this->TDD::destroy(); - } - - virtual void destroyNow(bool delayed) { - // Do nothing. This will always be invoked from the call to destroy inside - // our destructor. - assert(!delayed); - // prevent unused variable warnings when asserts are compiled out. - (void)delayed; - } - - private: - // Forbidden copy constructor and assignment operator - TUndelayedDestruction(TUndelayedDestruction const &) = delete; - TUndelayedDestruction& operator=(TUndelayedDestruction const &) = delete; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TUNDELAYEDDESTRUCTION_H_ diff --git a/thrift/lib/cpp/async/TUnframedAsyncChannel.h b/thrift/lib/cpp/async/TUnframedAsyncChannel.h deleted file mode 100644 index 9dbffde392..0000000000 --- a/thrift/lib/cpp/async/TUnframedAsyncChannel.h +++ /dev/null @@ -1,168 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TStreamAsyncChannel.h" - -namespace apache { namespace thrift { namespace async { - -namespace detail { - -/** - * Encapsulation of one outstanding write request on a TUnframedAsyncChannel. - */ -class TUnframedACWriteRequest : - public TAsyncChannelWriteRequestBase { - public: - typedef std::tr1::function VoidCallback; - - TUnframedACWriteRequest(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message, - TAsyncEventChannel* channel); - - void write(TAsyncTransport* transport, - TAsyncTransport::WriteCallback* callback) THRIFT_NOEXCEPT; - - void writeSuccess() THRIFT_NOEXCEPT; - void writeError(size_t bytesWritten, - const transport::TTransportException& ex) THRIFT_NOEXCEPT; -}; - -/** - * Read state for TUnframedAsyncChannel - */ -template -class TUnframedACReadState { - public: - typedef std::tr1::function VoidCallback; - typedef ProtocolTraits_ ProtocolTraits; - - TUnframedACReadState(); - ~TUnframedACReadState(); - - // Methods required by TStreamAsyncChannel - - void setCallbackBuffer(transport::TMemoryBuffer* buffer) { - callbackBuffer_ = buffer; - } - void unsetCallbackBuffer() { - callbackBuffer_ = NULL; - } - - bool hasReadAheadData() { - return (memBuffer_.available_read() > 0); - } - bool hasPartialMessage() { - return (memBuffer_.available_read() > 0); - } - - void getReadBuffer(void** bufReturn, size_t* lenReturn); - bool readDataAvailable(size_t len); - - // Methods specific to TUnframedACReadState - - void setMaxMessageSize(uint32_t size) { - maxMessageSize_ = size; - } - - uint32_t getMaxMessageSize() const { - return maxMessageSize_; - } - - ProtocolTraits_* getProtocolTraits() { - return &protocolTraits_; - } - const ProtocolTraits_* getProtocolTraits() const { - return &protocolTraits_; - } - - private: - bool getMessageLength(uint8_t* buffer, - uint32_t bufferLength, - uint32_t* messageLength); - - /// maximum frame size accepted - uint32_t maxMessageSize_; - - apache::thrift::transport::TMemoryBuffer memBuffer_; - apache::thrift::transport::TMemoryBuffer* callbackBuffer_; - ProtocolTraits_ protocolTraits_; -}; - -} // namespace detail - -/** - * TUnframedAsyncChannel - * - * This is a TAsyncChannel implementation that reads and writes raw (unframed) - * messages. When reading messages, ProtocolTraits_ is used to determine the - * end of a message. - */ -template -class TUnframedAsyncChannel : - public TStreamAsyncChannel > { - private: - typedef TStreamAsyncChannel > - Parent; - typedef TUnframedAsyncChannel Self; - - public: - explicit TUnframedAsyncChannel( - const boost::shared_ptr& transport - ) - : Parent(transport) {} - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TUnframedAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& transport) { - return boost::shared_ptr(new Self(transport), - typename Self::Destructor()); - } - - /// size in bytes beyond which we'll reject a given message. - void setMaxMessageSize(uint32_t size) { - this->readState_.setMaxMessageSize(size); - } - - uint32_t getMaxMessageSize() const { - return this->readState_.getMaxMessageSize(); - } - - protected: - /** - * Protected destructor. - * - * Users of TUnframedAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~TUnframedAsyncChannel() { } -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/async/TUnframedAsyncChannel.tcc b/thrift/lib/cpp/async/TUnframedAsyncChannel.tcc deleted file mode 100644 index b23d2461b3..0000000000 --- a/thrift/lib/cpp/async/TUnframedAsyncChannel.tcc +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_TCC_ -#define THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_TCC_ 1 - -#include "thrift/lib/cpp/async/TUnframedAsyncChannel.h" - -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -namespace { -const uint32_t kInitialBufferSize = 4096; -} - -namespace apache { namespace thrift { namespace async { namespace detail { - -template -TUnframedACReadState::TUnframedACReadState() - : maxMessageSize_(0x7fffffff) - , memBuffer_(kInitialBufferSize) - , callbackBuffer_(NULL) - , protocolTraits_() { -} - -template -TUnframedACReadState::~TUnframedACReadState() { -} - -template -void TUnframedACReadState::getReadBuffer(void** bufReturn, - size_t* lenReturn) { - uint32_t bytesAvailable = memBuffer_.available_write(); - if (bytesAvailable > 0) { - // If there is room available in the buffer, just return it. - *lenReturn = bytesAvailable; - *bufReturn = memBuffer_.getWritePtr(bytesAvailable); - return; - } - - uint32_t bufferSize = memBuffer_.getBufferSize(); - uint32_t available_read = memBuffer_.available_read(); - // we get this much without growing the buffer capacity - uint32_t additionalSpace = bufferSize - available_read; - if (additionalSpace == 0) { - // We need more room. memBuffer_ will at least double it's capacity when - // asked for even a single byte. - additionalSpace = kInitialBufferSize; - } - - // Don't allow more than maxMessageSize_. - // Be careful not to over- or underflow uint32_t when checking. - // - // readDataAvailable() fails the read when we've already read maxMessageSize_ - // bytes, so available_read should always be less than maxMessageSize_ here. - // (Unless maxMessageSize_ is 0, but that's a programmer bug.) - assert(available_read < maxMessageSize_); - if (available_read > maxMessageSize_ - additionalSpace) { - // Don't ask for more than maxMessageSize_ total (but we might get more) - additionalSpace = maxMessageSize_ - available_read; - } - - try { - uint8_t* newBuffer = memBuffer_.getWritePtr(additionalSpace); - *lenReturn = memBuffer_.available_write(); - *bufReturn = newBuffer; - } catch (std::exception &ex) { - T_ERROR("TUnframedAsyncChannel: failed to allocate larger read buffer: %s", - ex.what()); - *lenReturn = 0; - *bufReturn = NULL; - } -} - -template -bool TUnframedACReadState::readDataAvailable(size_t len) { - assert(memBuffer_.available_read() + len <= memBuffer_.getBufferSize()); - memBuffer_.wroteBytes(len); - - uint32_t messageLength = 0; - uint32_t bytesRead = memBuffer_.available_read(); - uint8_t *buffer = (uint8_t *)memBuffer_.borrow(NULL, &bytesRead); - if (!protocolTraits_.getMessageLength(buffer, bytesRead, &messageLength)) { - // We're not at the end of the message yet. - // - // If we've hit maxMessageSize_ already, fail now instead of waiting until - // getReadBuffer() is called again. - if (bytesRead >= maxMessageSize_) { - throw transport::TTransportException( - transport::TTransportException::CORRUPTED_DATA, - "TUnframedAsyncChannel: max message size exceeded"); - } - return false; - } - - // We've read a full message. - // Swap the data into the callback's buffer. - // Note that we may have actually read more than one message, - // so we have to make sure to save any remaining data after the end of the - // message. - assert(messageLength <= bytesRead); - - callbackBuffer_->link(&memBuffer_, messageLength); - memBuffer_.consume(messageLength); - - // We've put a new message in callbackBuffer_ - return true; -} - -}}}} // apache::thrift::async::detail - -#endif // THRIFT_ASYNC_TUNFRAMEDASYNCCHANNEL_TCC_ diff --git a/thrift/lib/cpp/async/TZlibAsyncChannel.h b/thrift/lib/cpp/async/TZlibAsyncChannel.h deleted file mode 100644 index bf32bc800d..0000000000 --- a/thrift/lib/cpp/async/TZlibAsyncChannel.h +++ /dev/null @@ -1,180 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_ASYNC_TZLIBASYNCCHANNEL_H_ -#define THRIFT_ASYNC_TZLIBASYNCCHANNEL_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncEventChannel.h" -#include "thrift/lib/cpp/transport/TZlibTransport.h" - -namespace apache { namespace thrift { namespace async { - -class TZlibAsyncChannel : public TAsyncEventChannel { - public: - explicit TZlibAsyncChannel( - const boost::shared_ptr& channel); - - /** - * Helper function to create a shared_ptr. - * - * This passes in the correct destructor object, since TZlibAsyncChannel's - * destructor is protected and cannot be invoked directly. - */ - static boost::shared_ptr newChannel( - const boost::shared_ptr& channel) { - return boost::shared_ptr( - new TZlibAsyncChannel(channel), Destructor()); - } - virtual bool readable() const { - return channel_->readable(); - } - virtual bool good() const { - return channel_->good(); - } - virtual bool error() const { - return channel_->error(); - } - virtual bool timedOut() const { - return channel_->timedOut(); - } - virtual bool isIdle() const { - return channel_->isIdle(); - } - - virtual void sendMessage(const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* message); - virtual void recvMessage(const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* message); - virtual void sendAndRecvMessage(const VoidCallback& cob, - const VoidCallback& errorCob, - transport::TMemoryBuffer* sendBuf, - transport::TMemoryBuffer* recvBuf); - - virtual boost::shared_ptr getTransport() { - return channel_->getTransport(); - } - - virtual void attachEventBase(TEventBase* eventBase) { - channel_->attachEventBase(eventBase); - } - virtual void detachEventBase() { - channel_->detachEventBase(); - } - - virtual uint32_t getRecvTimeout() const { - return channel_->getRecvTimeout(); - } - - virtual void setRecvTimeout(uint32_t milliseconds) { - channel_->setRecvTimeout(milliseconds); - } - - virtual void cancelCallbacks() { - sendRequest_.cancelCallbacks(); - recvRequest_.cancelCallbacks(); - } - - protected: - /** - * Protected destructor. - * - * Users of TZlibAsyncChannel must never delete it directly. Instead, - * invoke destroy(). - */ - virtual ~TZlibAsyncChannel() { } - - private: - class SendRequest { - public: - SendRequest(); - - bool isSet() const { - return static_cast(callback_); - } - - void set(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message); - - void send(TAsyncEventChannel* channel); - - void cancelCallbacks() { - callback_ = NULL; - errorCallback_ = NULL; - } - - private: - void invokeCallback(VoidCallback callback); - void sendSuccess(); - void sendError(); - - boost::shared_ptr compressedBuffer_; - transport::TZlibTransport zlibTransport_; - VoidCallback sendSuccess_; - VoidCallback sendError_; - - VoidCallback callback_; - VoidCallback errorCallback_; - }; - - class RecvRequest { - public: - RecvRequest(); - - bool isSet() const { - return static_cast(callback_); - } - - void set(const VoidCallback& callback, - const VoidCallback& errorCallback, - transport::TMemoryBuffer* message); - - void recv(TAsyncEventChannel* channel); - - void cancelCallbacks() { - callback_ = NULL; - errorCallback_ = NULL; - } - - private: - void invokeCallback(VoidCallback callback); - void recvSuccess(); - void recvError(); - - boost::shared_ptr compressedBuffer_; - transport::TZlibTransport zlibTransport_; - VoidCallback recvSuccess_; - VoidCallback recvError_; - - VoidCallback callback_; - VoidCallback errorCallback_; - transport::TMemoryBuffer *callbackBuffer_; - }; - - boost::shared_ptr channel_; - - // TODO: support multiple pending send requests - SendRequest sendRequest_; - RecvRequest recvRequest_; -}; - -}}} // apache::thrift::async - -#endif // THRIFT_ASYNC_TZLIBASYNCCHANNEL_H_ diff --git a/thrift/lib/cpp/concurrency/Exception.h b/thrift/lib/cpp/concurrency/Exception.h deleted file mode 100644 index bef1eb2f9c..0000000000 --- a/thrift/lib/cpp/concurrency/Exception.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_EXCEPTION_H_ -#define _THRIFT_CONCURRENCY_EXCEPTION_H_ 1 - -#include -#include "thrift/lib/cpp/Thrift.h" - -namespace apache { namespace thrift { namespace concurrency { - -class NoSuchTaskException : public apache::thrift::TLibraryException {}; - -class UncancellableTaskException : public apache::thrift::TLibraryException {}; - -class InvalidArgumentException : public apache::thrift::TLibraryException {}; - -class IllegalStateException : public apache::thrift::TLibraryException { -public: - IllegalStateException() {} - IllegalStateException(const std::string& message) : TLibraryException(message) {} -}; - -class TimedOutException : public apache::thrift::TLibraryException { -public: - TimedOutException():TLibraryException("TimedOutException"){}; - TimedOutException(const std::string& message ) : - TLibraryException(message) {} -}; - -class TooManyPendingTasksException : public apache::thrift::TLibraryException { -public: - TooManyPendingTasksException():TLibraryException("TooManyPendingTasksException"){}; - TooManyPendingTasksException(const std::string& message ) : - TLibraryException(message) {} -}; - -class SystemResourceException : public apache::thrift::TLibraryException { -public: - SystemResourceException() {} - - SystemResourceException(const std::string& message) : - TLibraryException(message) {} -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_EXCEPTION_H_ diff --git a/thrift/lib/cpp/concurrency/FunctionRunner.h b/thrift/lib/cpp/concurrency/FunctionRunner.h deleted file mode 100644 index 322d0c3136..0000000000 --- a/thrift/lib/cpp/concurrency/FunctionRunner.h +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_FUNCTION_RUNNER_H -#define _THRIFT_CONCURRENCY_FUNCTION_RUNNER_H 1 - -#include -#include "thrift/lib/cpp/concurrency/Thread.h" - -namespace apache { namespace thrift { namespace concurrency { - -/** - * Convenient implementation of Runnable that will execute arbitrary callbacks. - * Interfaces are provided to accept both a generic 'void(void)' callback, and - * a 'void* (void*)' pthread_create-style callback. - * - * Example use: - * void* my_thread_main(void* arg); - * shared_ptr factory = ...; - * // To create a thread that executes my_thread_main once: - * shared_ptr thread = factory->newThread( - * FunctionRunner::create(my_thread_main, some_argument)); - * thread->start(); - * - * bool A::foo(); - * A* a = new A(); - * // To create a thread that executes a.foo() every 100 milliseconds: - * factory->newThread(FunctionRunner::create( - * std::tr1::bind(&A::foo, a), 100))->start(); - * - */ - -class FunctionRunner : public Runnable { - public: - // This is the type of callback 'pthread_create()' expects. - typedef void* (*PthreadFuncPtr)(void *arg); - // This a fully-generic void(void) callback for custom bindings. - typedef std::tr1::function VoidFunc; - - typedef std::tr1::function BoolFunc; - - /** - * Syntactic sugar to make it easier to create new FunctionRunner - * objects wrapped in shared_ptr. - */ - static boost::shared_ptr create(const VoidFunc& cob) { - return boost::shared_ptr(new FunctionRunner(cob)); - } - - static boost::shared_ptr create(PthreadFuncPtr func, - void* arg) { - return boost::shared_ptr(new FunctionRunner(func, arg)); - } - - static boost::shared_ptr create(const BoolFunc& cob, - int intervalMs) { - return boost::shared_ptr(new FunctionRunner(cob, - intervalMs)); - } - - /** - * Given a 'pthread_create' style callback, this FunctionRunner will - * execute the given callback. Note that the 'void*' return value is ignored. - */ - FunctionRunner(PthreadFuncPtr func, void* arg) - : func_(std::tr1::bind(func, arg)), repFunc_(0), initFunc_(0) - { } - - /** - * Given a generic callback, this FunctionRunner will execute it. - */ - FunctionRunner(const VoidFunc& cob) - : func_(cob), repFunc_(0), initFunc_(0) - { } - - /** - * Given a bool foo(...) type callback, FunctionRunner will execute - * the callback repeatedly with 'intervalMs' milliseconds between the calls, - * until it returns false. Note that the actual interval between calls will - * be intervalMs plus execution time of the callback. - */ - FunctionRunner(const BoolFunc& cob, int intervalMs) - : func_(0), repFunc_(cob), intervalMs_(intervalMs), initFunc_(0) - { } - - /** - * Set a callback to be called when the thread is started. - */ - void setInitFunc(const VoidFunc& initFunc) { - initFunc_ = initFunc; - } - - void run() { - if (initFunc_) { - initFunc_(); - } - if (repFunc_) { - while(repFunc_()) { - usleep(intervalMs_*1000); - } - } else { - func_(); - } - } - - private: - VoidFunc func_; - BoolFunc repFunc_; - int intervalMs_; - VoidFunc initFunc_; -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_FUNCTION_RUNNER_H diff --git a/thrift/lib/cpp/concurrency/Monitor.h b/thrift/lib/cpp/concurrency/Monitor.h deleted file mode 100644 index c5164ff917..0000000000 --- a/thrift/lib/cpp/concurrency/Monitor.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_MONITOR_H_ -#define _THRIFT_CONCURRENCY_MONITOR_H_ 1 - -#include "thrift/lib/cpp/concurrency/Exception.h" -#include "thrift/lib/cpp/concurrency/Mutex.h" - -#include - - -namespace apache { namespace thrift { namespace concurrency { - -/** - * A monitor is a combination mutex and condition-event. Waiting and - * notifying condition events requires that the caller own the mutex. Mutex - * lock and unlock operations can be performed independently of condition - * events. This is more or less analogous to java.lang.Object multi-thread - * operations. - * - * Note the Monitor can create a new, internal mutex; alternatively, a - * separate Mutex can be passed in and the Monitor will re-use it without - * taking ownership. It's the user's responsibility to make sure that the - * Mutex is not deallocated before the Monitor. - * - * Note that all methods are const. Monitors implement logical constness, not - * bit constness. This allows const methods to call monitor methods without - * needing to cast away constness or change to non-const signatures. - * - * @version $Id:$ - */ -class Monitor : boost::noncopyable { - public: - /** Creates a new mutex, and takes ownership of it. */ - Monitor(); - - /** Uses the provided mutex without taking ownership. */ - explicit Monitor(Mutex* mutex); - - /** Uses the mutex inside the provided Monitor without taking ownership. */ - explicit Monitor(Monitor* monitor); - - /** Deallocates the mutex only if we own it. */ - virtual ~Monitor(); - - Mutex& mutex() const; - - virtual void lock() const; - - virtual void unlock() const; - - /** - * Waits a maximum of the specified timeout in milliseconds for the condition - * to occur, or waits forever if timeout_ms == 0. - * - * Returns 0 if condition occurs, ETIMEDOUT on timeout, or an error code. - */ - int waitForTimeRelative(int64_t timeout_ms) const; - - /** - * Waits until the absolute time specified using struct timespec. - * Returns 0 if condition occurs, ETIMEDOUT on timeout, or an error code. - */ - int waitForTime(const timespec* abstime) const; - - /** - * Waits forever until the condition occurs. - * Returns 0 if condition occurs, or an error code otherwise. - */ - int waitForever() const; - - /** - * Exception-throwing version of waitForTimeRelative(), called simply - * wait(int64) for historical reasons. Timeout is in milliseconds. - * - * If the condition occurs, this function returns cleanly; on timeout or - * error an exception is thrown. - */ - void wait(int64_t timeout_ms = 0LL) const; - - - /** Wakes up one thread waiting on this monitor. */ - virtual void notify() const; - - /** Wakes up all waiting threads on this monitor. */ - virtual void notifyAll() const; - - private: - - class Impl; - - Impl* impl_; -}; - -class Synchronized { - public: - Synchronized(const Monitor* monitor) : g(monitor->mutex()) { } - Synchronized(const Monitor& monitor) : g(monitor.mutex()) { } - - private: - Guard g; -}; - - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_MONITOR_H_ diff --git a/thrift/lib/cpp/concurrency/Mutex.h b/thrift/lib/cpp/concurrency/Mutex.h deleted file mode 100644 index a0e5ca56ec..0000000000 --- a/thrift/lib/cpp/concurrency/Mutex.h +++ /dev/null @@ -1,276 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_CONCURRENCY_MUTEX_H_ -#define THRIFT_CONCURRENCY_MUTEX_H_ 1 - -#include -#include - -namespace apache { namespace thrift { namespace concurrency { - -#ifndef THRIFT_NO_CONTENTION_PROFILING - -/** - * Determines if the Thrift Mutex and ReadWriteMutex classes will attempt to - * profile their blocking acquire methods. If this value is set to non-zero, - * Thrift will attempt to invoke the callback once every profilingSampleRate - * times. However, as the sampling is not synchronized the rate is not - * guaranteed, and could be subject to big bursts and swings. Please ensure - * your sampling callback is as performant as your application requires. - * - * The callback will get called with the wait time taken to lock the mutex in - * usec and a (void*) that uniquely identifies the Mutex (or ReadWriteMutex) - * being locked. - * - * The enableMutexProfiling() function is unsynchronized; calling this function - * while profiling is already enabled may result in race conditions. On - * architectures where a pointer assignment is atomic, this is safe but there - * is no guarantee threads will agree on a single callback within any - * particular time period. - */ -typedef void (*MutexWaitCallback)(const void* id, int64_t waitTimeMicros); -void enableMutexProfiling(int32_t profilingSampleRate, - MutexWaitCallback callback); - -#endif - -/** - * A simple mutex class - * - * @version $Id:$ - */ -class Mutex { - public: - typedef void (*Initializer)(void*); - - // Specifying the type of the mutex with one of the static Initializer - // methods defined in this class. - explicit Mutex(Initializer init = DEFAULT_INITIALIZER); - - // Specifying the type of the mutex with an integer. The value has - // to be supported by the underlying implementation, currently - // pthread_mutex. So the possible values are PTHREAD_MUTEX_NORMAL, - // PTHREAD_MUTEX_ERRORCHECK, PTHREAD_MUTEX_RECURSIVE and - // PTHREAD_MUTEX_DEFAULT. - explicit Mutex(int type); - - virtual ~Mutex() {} - virtual void lock() const; - virtual bool trylock() const; - virtual bool timedlock(int64_t milliseconds) const; - virtual void unlock() const; - - /** - * Determine if the mutex is locked. - * - * This is intended to be used primarily as a debugging aid, and is not - * guaranteed to be a fast operation. For example, a common use case is to - * assert(mutex.isLocked()) in functions that may only be called with a - * particular mutex already locked. - * - * TODO: This method currently always returns false for recursive mutexes. - * Avoid calling this method on recursive mutexes. - */ - virtual bool isLocked() const; - - void* getUnderlyingImpl() const; - - static void DEFAULT_INITIALIZER(void*); - static void ADAPTIVE_INITIALIZER(void*); - static void RECURSIVE_INITIALIZER(void*); - - private: - - class impl; - boost::shared_ptr impl_; -}; - -class ReadWriteMutex { -public: - ReadWriteMutex(); - virtual ~ReadWriteMutex() {} - - // these get the lock and block until it is done successfully - virtual void acquireRead() const; - virtual void acquireWrite() const; - - // these get the lock and block until it is done successfully - // or run out of time - virtual bool timedRead(int64_t milliseconds) const; - virtual bool timedWrite(int64_t milliseconds) const; - - // these attempt to get the lock, returning false immediately if they fail - virtual bool attemptRead() const; - virtual bool attemptWrite() const; - - // this releases both read and write locks - virtual void release() const; - -private: - - class impl; - boost::shared_ptr impl_; -}; - -/** - * A ReadWriteMutex that guarantees writers will not be starved by readers: - * When a writer attempts to acquire the mutex, all new readers will be - * blocked from acquiring the mutex until the writer has acquired and - * released it. In some operating systems, this may already be guaranteed - * by a regular ReadWriteMutex. - */ -class NoStarveReadWriteMutex : public ReadWriteMutex { -public: - NoStarveReadWriteMutex(); - - virtual void acquireRead() const; - virtual void acquireWrite() const; - - // these get the lock and block until it is done successfully - // or run out of time - virtual bool timedRead(int64_t milliseconds) const; - virtual bool timedWrite(int64_t milliseconds) const; - -private: - Mutex mutex_; - mutable volatile bool writerWaiting_; -}; - -class Guard : boost::noncopyable { - public: - explicit Guard(const Mutex& value, int64_t timeout = 0) : mutex_(&value) { - if (timeout == 0) { - value.lock(); - } else if (timeout < 0) { - if (!value.trylock()) { - mutex_ = NULL; - } - } else { - if (!value.timedlock(timeout)) { - mutex_ = NULL; - } - } - } - ~Guard() { - if (mutex_) { - mutex_->unlock(); - } - } - - /* - * This is really operator bool. However, implementing it to return - * bool is actually harmful. See - * www.artima.com/cppsource/safebool.html for the details; in brief, - * converting to bool allows a lot of nonsensical operations in - * addition to simple testing. To avoid that, we return a pointer to - * member which can only be used for testing. - */ - typedef const Mutex*const Guard::*const pBoolMember; - inline operator pBoolMember() const { - return mutex_ != NULL ? &Guard::mutex_ : NULL; - } - - private: - const Mutex* mutex_; -}; - -// Can be used as second argument to RWGuard to make code more readable -// as to whether we're doing acquireRead() or acquireWrite(). -enum RWGuardType { - RW_READ = 0, - RW_WRITE = 1, -}; - - -class RWGuard : boost::noncopyable { - public: - explicit RWGuard(const ReadWriteMutex& value, bool write = false, - int64_t timeout=0) - : rw_mutex_(value), locked_(true) { - if (write) { - if (timeout) { - locked_ = rw_mutex_.timedWrite(timeout); - } else { - rw_mutex_.acquireWrite(); - } - } else { - if (timeout) { - locked_ = rw_mutex_.timedRead(timeout); - } else { - rw_mutex_.acquireRead(); - } - } - } - - RWGuard(const ReadWriteMutex& value, RWGuardType type, int64_t timeout = 0) - : rw_mutex_(value), locked_(true) { - if (type == RW_WRITE) { - if (timeout) { - locked_ = rw_mutex_.timedWrite(timeout); - } else { - rw_mutex_.acquireWrite(); - } - } else { - if (timeout) { - locked_ = rw_mutex_.timedRead(timeout); - } else { - rw_mutex_.acquireRead(); - } - } - } - ~RWGuard() { - if (locked_) { - rw_mutex_.release(); - } - } - - typedef const bool RWGuard::*const pBoolMember; - operator pBoolMember() const { - return locked_ ? &RWGuard::locked_ : NULL; - } - - bool operator!() const { - return !locked_; - } - - bool release() { - if (!locked_) return false; - rw_mutex_.release(); - locked_ = false; - return true; - } - - private: - const ReadWriteMutex& rw_mutex_; - mutable bool locked_; -}; - - -// A little hack to prevent someone from trying to do "Guard(m);" -// Such a use is invalid because the temporary Guard object is -// destroyed at the end of the line, releasing the lock. -// Sorry for polluting the global namespace, but I think it's worth it. -#define Guard(m) incorrect_use_of_Guard(m) -#define RWGuard(m) incorrect_use_of_RWGuard(m) - - -}}} // apache::thrift::concurrency - -#endif // #ifndef THRIFT_CONCURRENCY_MUTEX_H_ diff --git a/thrift/lib/cpp/concurrency/PosixThreadFactory.h b/thrift/lib/cpp/concurrency/PosixThreadFactory.h deleted file mode 100644 index 7d7de185e3..0000000000 --- a/thrift/lib/cpp/concurrency/PosixThreadFactory.h +++ /dev/null @@ -1,148 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - - */ -#ifndef THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_ -#define THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_ 1 - -#include - -#include "thrift/lib/cpp/concurrency/Thread.h" - -#include - -namespace apache { namespace thrift { namespace concurrency { - -void getLiveThreadIds(std::set* tids); - -/** - * A thread factory to create posix threads - * - * @version $Id:$ - */ -class PosixThreadFactory : public ThreadFactory { - - public: - - /** - * POSIX Thread scheduler policies - */ - enum POLICY { - OTHER, - FIFO, - ROUND_ROBIN - }; - - /** - * POSIX Thread scheduler relative priorities, - * - * Absolute priority is determined by scheduler policy and OS. This - * enumeration specifies relative priorities such that one can specify a - * priority within a giving scheduler policy without knowing the absolute - * value of the priority. - */ - enum PRIORITY { - LOWEST = 0, - LOWER = 1, - LOW = 2, - NORMAL = 3, - HIGH = 4, - HIGHER = 5, - HIGHEST = 6, - INCREMENT = 7, - DECREMENT = 8 - }; - - static const POLICY kDefaultPolicy = ROUND_ROBIN; - static const PRIORITY kDefaultPriority = NORMAL; - static const int kDefaultStackSizeMB = 1; - - /** - * Posix thread (pthread) factory. All threads created by a factory are - * reference-counted via boost::shared_ptr and boost::weak_ptr. The factory - * guarantees that threads and the Runnable tasks they host will be properly - * cleaned up once the last strong reference to both is given up. - * - * Threads are created with the specified policy, priority, stack-size and - * detachable-mode detached means the thread is free-running and will release - * all system resources the when it completes. A detachable thread is not - * joinable. The join method of a detachable thread will return immediately - * with no error. - * - * By default threads are not joinable. - */ - explicit PosixThreadFactory(POLICY policy=kDefaultPolicy, - PRIORITY priority=kDefaultPriority, - int stackSize=kDefaultStackSizeMB, - bool detached=true); - - explicit PosixThreadFactory(DetachState detached); - - // From ThreadFactory; - boost::shared_ptr newThread( - const boost::shared_ptr& runnable) const; - boost::shared_ptr newThread( - const boost::shared_ptr& runnable, - DetachState detachState) const; - - // From ThreadFactory; - Thread::id_t getCurrentThreadId() const; - - /** - * Gets stack size for created threads - * - * @return int size in megabytes - */ - virtual int getStackSize() const; - - /** - * Sets stack size for created threads - * - * @param value size in megabytes - */ - virtual void setStackSize(int value); - - /** - * Gets priority relative to current policy - */ - virtual PRIORITY getPriority() const; - - /** - * Sets priority relative to current policy - */ - virtual void setPriority(PRIORITY priority); - - /** - * Sets detached mode of threads - */ - virtual void setDetached(bool detached); - virtual void setDetached(DetachState detached); - - /** - * Gets current detached mode - */ - virtual bool isDetached() const; - - private: - class Impl; - boost::shared_ptr impl_; -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_POSIXTHREADFACTORY_H_ diff --git a/thrift/lib/cpp/concurrency/Thread.h b/thrift/lib/cpp/concurrency/Thread.h deleted file mode 100644 index 790d357b13..0000000000 --- a/thrift/lib/cpp/concurrency/Thread.h +++ /dev/null @@ -1,135 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_THREAD_H_ -#define _THRIFT_CONCURRENCY_THREAD_H_ 1 - -#include -#include -#include - -namespace apache { namespace thrift { namespace concurrency { - -class Thread; - -/** - * Minimal runnable class. More or less analogous to java.lang.Runnable. - * - * @version $Id:$ - */ -class Runnable { - - public: - virtual ~Runnable() {}; - virtual void run() = 0; - - /** - * Gets the thread object that is hosting this runnable object - can return - * an empty boost::shared pointer if no references remain on the thread object - */ - virtual boost::shared_ptr thread() { return thread_.lock(); } - - /** - * Sets the thread that is executing this object. This is only meant for - * use by concrete implementations of Thread. - */ - virtual void thread(boost::shared_ptr value) { thread_ = value; } - - private: - boost::weak_ptr thread_; -}; - -/** - * Minimal thread class. Returned by thread factory bound to a Runnable object - * and ready to start execution. More or less analogous to java.lang.Thread - * (minus all the thread group, priority, mode and other baggage, since that - * is difficult to abstract across platforms and is left for platform-specific - * ThreadFactory implementations to deal with - * - * @see apache::thrift::concurrency::ThreadFactory) - */ -class Thread { - - public: - - typedef uint64_t id_t; - - virtual ~Thread() {}; - - /** - * Starts the thread. Does platform specific thread creation and - * configuration then invokes the run method of the Runnable object bound - * to this thread. - */ - virtual void start() = 0; - - /** - * Join this thread. Current thread blocks until this target thread - * completes. - */ - virtual void join() = 0; - - /** - * Gets the thread's platform-specific ID - */ - virtual id_t getId() = 0; - - /** - * Gets the runnable object this thread is hosting - */ - virtual boost::shared_ptr runnable() const { return _runnable; } - - protected: - virtual void runnable(boost::shared_ptr value) { _runnable = value; } - - private: - boost::shared_ptr _runnable; - -}; - -/** - * Factory to create platform-specific thread object and bind them to Runnable - * object for execution - */ -class ThreadFactory { - - public: - enum DetachState { - ATTACHED, - DETACHED - }; - - virtual ~ThreadFactory() {} - virtual boost::shared_ptr newThread( - const boost::shared_ptr& runnable) const = 0; - - virtual boost::shared_ptr newThread( - const boost::shared_ptr& runnable, - DetachState detachState) const = 0; - - /** Gets the current thread id or unknown_thread_id if the current thread is not a thrift thread */ - - static const Thread::id_t unknown_thread_id; - - virtual Thread::id_t getCurrentThreadId() const = 0; -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_THREAD_H_ diff --git a/thrift/lib/cpp/concurrency/ThreadLocal.h b/thrift/lib/cpp/concurrency/ThreadLocal.h deleted file mode 100644 index 826f33c657..0000000000 --- a/thrift/lib/cpp/concurrency/ThreadLocal.h +++ /dev/null @@ -1,202 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_CONCURRENCY_THREADLOCAL_H_ -#define THRIFT_CONCURRENCY_THREADLOCAL_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include - -namespace apache { namespace thrift { namespace concurrency { - -template -class DefaultThreadLocalManager; - -/** - * ThreadLocal manages thread-local storage for a particular object type. - * - * Each ThreadLocal object contains a separate instance of an object for each - * thread that accesses the ThreadLocal object. - * - * Note that you should avoid creating too many ThreadLocal objects (e.g., such - * as keeping a ThreadLocal member variable in commonly allocated objects). - * The number of ThreadLocal objects cannot be larger than the value of - * PTHREAD_KEYS_MAX, which is 1024 on many systems. - * - * The ManagerT template parameter controls how object allocation and - * deallocation should be performed. When get() is called from a thread that - * does not already have an instance of the object, Manager::allocate() is - * called. When a thread exits, Manager::destroy() is called if the thread has - * an instance of this object. - */ -template > -class ThreadLocal { - public: - typedef T DataType; - typedef ManagerT Manager; - - /** - * Create a new ThreadLocal object. - */ - ThreadLocal() { - int ret = pthread_key_create(&key_, &ThreadLocal::onThreadExit); - if (ret != 0) { - throw TLibraryException("failed to allocate new thread-local key", ret); - } - } - - /** - * Access this thread's local instance of the object. - * - * If there is no instance of the object in this thread, Manager::allocate() - * will be called to allocate a new instance. (Though some Manager - * implementations may return NULL, if each thread's instance must be - * expilcitly initialized.) - */ - T *get() const { - T *obj = getNoAlloc(); - if (obj == NULL) { - Manager m; - obj = m.allocate(); - if (obj != NULL) { - setImpl(obj); - } - } - return obj; - } - - /** - * Access this thread's local instance of the object. - * - * If there is no instance of the object in this thread, NULL will be - * returned. Manager::allocate() will never be called. - */ - T *getNoAlloc() const { - return static_cast(pthread_getspecific(key_)); - } - - /** - * Operator overload to perform get() - */ - T *operator->() const { - return get(); - } - - /** - * Operator overload to perform get() - */ - T &operator*() const { - return *get(); - } - - /** - * Set the instance of the object to be used by this thread. - */ - void set(T* obj) { - T *old = getNoAlloc(); - Manager m; - m.replace(old, obj); - setImpl(obj); - } - - /** - * Clear the instance of the object used by this thread. - * - * If this thread had a non-NULL object, Manager::destroy() will be called. - */ - void clear() { - T *obj = getNoAlloc(); - if (obj != NULL) { - Manager m; - m.destroy(obj); - setImpl(NULL); - } - } - - private: - void setImpl(T* obj) const { - int ret = pthread_setspecific(key_, obj); - if (ret != 0) { - throw TLibraryException("failed to update thread-local key", ret); - } - } - - static void onThreadExit(void* arg) { - T *obj = static_cast(arg); - if (obj != NULL) { - Manager m; - m.destroy(obj); - } - } - - pthread_key_t key_; -}; - -template -class DefaultThreadLocalManager { - public: - T* allocate() { - return new T; - } - - void destroy(T* t) { - delete t; - } - - void replace(T* oldObj, T* newObj) { - if (oldObj != newObj) { - delete oldObj; - } - } -}; - -template -class DestroyOnlyThreadLocalManager { - public: - T* allocate() { - return NULL; - } - - void destroy(T* t) { - delete t; - } - - void replace(T* oldObj, T* newObj) { - if (oldObj != newObj) { - delete oldObj; - } - } -}; - -template -class NoopThreadLocalManager { - public: - T* allocate() { - return NULL; - } - - void destroy(T*) { - } - - void replace(T*, T*) { - } -}; - -}}} // apache::thrift::concurrency - -#endif // THRIFT_CONCURRENCY_THREADLOCAL_H_ diff --git a/thrift/lib/cpp/concurrency/ThreadManager.h b/thrift/lib/cpp/concurrency/ThreadManager.h deleted file mode 100644 index bc23f90d35..0000000000 --- a/thrift/lib/cpp/concurrency/ThreadManager.h +++ /dev/null @@ -1,216 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_THREADMANAGER_H_ -#define _THRIFT_CONCURRENCY_THREADMANAGER_H_ 1 - -#include -#include -#include - -namespace apache { namespace thrift { namespace concurrency { - -class Runnable; -class ThreadFactory; - -/** - * ThreadManager class - * - * This class manages a pool of threads. It uses a ThreadFactory to create - * threads. It never actually creates or destroys worker threads, rather - * It maintains statistics on number of idle threads, number of active threads, - * task backlog, and average wait and service times and informs the PoolPolicy - * object bound to instances of this manager of interesting transitions. It is - * then up the PoolPolicy object to decide if the thread pool size needs to be - * adjusted and call this object addWorker and removeWorker methods to make - * changes. - * - * This design allows different policy implementations to used this code to - * handle basic worker thread management and worker task execution and focus on - * policy issues. The simplest policy, StaticPolicy, does nothing other than - * create a fixed number of threads. - */ -class ThreadManager { - - protected: - ThreadManager() {} - - public: - class Task; - typedef std::tr1::function)> ExpireCallback; - typedef std::tr1::function InitCallback; - - virtual ~ThreadManager() {} - - /** - * Starts the thread manager. Verifies all attributes have been properly - * initialized, then allocates necessary resources to begin operation - */ - virtual void start() = 0; - - /** - * Stops the thread manager. Aborts all remaining unprocessed task, shuts - * down all created worker threads, and releases all allocated resources. - * This method blocks for all worker threads to complete, thus it can - * potentially block forever if a worker thread is running a task that - * won't terminate. - */ - virtual void stop() = 0; - - /** - * Joins the thread manager. This is the same as stop, except that it will - * wait until all the tasks have finished, rather than aborting the tasks. - */ - virtual void join() = 0; - - enum STATE { - UNINITIALIZED, - STARTING, - STARTED, - JOINING, - STOPPING, - STOPPED - }; - - virtual const STATE state() const = 0; - - virtual boost::shared_ptr threadFactory() const = 0; - - virtual void threadFactory(boost::shared_ptr value) = 0; - - virtual void addWorker(size_t value=1) = 0; - - virtual void removeWorker(size_t value=1) = 0; - - /** - * Gets the current number of idle worker threads - */ - virtual size_t idleWorkerCount() const = 0; - - /** - * Gets the current number of total worker threads - */ - virtual size_t workerCount() const = 0; - - /** - * Gets the current number of pending tasks - */ - virtual size_t pendingTaskCount() const = 0; - - /** - * Gets the current number of pending and executing tasks - */ - virtual size_t totalTaskCount() const = 0; - - /** - * Gets the maximum pending task count. 0 indicates no maximum - */ - virtual size_t pendingTaskCountMax() const = 0; - - /** - * Gets the number of tasks which have been expired without being run. - */ - virtual size_t expiredTaskCount() = 0; - - /** - * Adds a task to be executed at some time in the future by a worker thread. - * - * This method will block if pendingTaskCountMax() in not zero and - * pendingTaskCount() is greater than or equal to pendingTaskCountMax(). If - * this method is called in the context of a ThreadManager worker thread it - * will throw a TooManyPendingTasksException - * - * @param task The task to queue for execution - * - * @param timeout Time to wait in milliseconds to add a task when a - * pending-task-count is specified. Specific cases: - * timeout = 0 : Wait forever to queue task. - * timeout = -1 : Return immediately if pending task count exceeds specified - * max - * @param expiration when nonzero, the number of milliseconds the task is - * valid to be run; if exceeded, the task will be dropped off the queue and - * not run. - * - * @throws TooManyPendingTasksException Pending task count exceeds max - * pending task count - */ - virtual void add(boost::shared_ptrtask, - int64_t timeout=0LL, - int64_t expiration=0LL) = 0; - - /** - * Removes a pending task - */ - virtual void remove(boost::shared_ptr task) = 0; - - /** - * Remove the next pending task which would be run. - * - * @return the task removed. - */ - virtual boost::shared_ptr removeNextPending() = 0; - - /** - * Set a callback to be called when a task is expired and not run. - * - * @param expireCallback a function called with the shared_ptr for - * the expired task. - */ - virtual void setExpireCallback(ExpireCallback expireCallback) = 0; - - /** - * Set a callback to be called when a worker thread is created. - */ - virtual void setThreadInitCallback(InitCallback initCallback) = 0; - - static boost::shared_ptr newThreadManager(); - - /** - * Creates a simple thread manager the uses count number of worker threads - * and has a pendingTaskCountMax maximum pending tasks. The default, 0, - * specified no limit on pending tasks - */ - static boost::shared_ptr - newSimpleThreadManager(size_t count = 4, - size_t pendingTaskCountMax = 0, - bool enableTaskStats = false); - - /** - * Get an internal statistics. - * - * @param waitTimeUs - average time (us) task spent in a queue - * @param runTimeUs - average time (us) task spent running - * @param maxItems - max items collected for stats - */ - virtual void getStats(int64_t& waitTimeUs, int64_t& runTimeUs, - int64_t maxItems) { - waitTimeUs = 0; - runTimeUs = 0; - } - - class Task; - - class Worker; - - class Impl; -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_THREADMANAGER_H_ diff --git a/thrift/lib/cpp/concurrency/TimerManager.h b/thrift/lib/cpp/concurrency/TimerManager.h deleted file mode 100644 index b90a718722..0000000000 --- a/thrift/lib/cpp/concurrency/TimerManager.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_TIMERMANAGER_H_ -#define _THRIFT_CONCURRENCY_TIMERMANAGER_H_ 1 - -#include "thrift/lib/cpp/concurrency/Exception.h" -#include "thrift/lib/cpp/concurrency/Monitor.h" -#include "thrift/lib/cpp/concurrency/Thread.h" - -#include -#include -#include - -namespace apache { namespace thrift { namespace concurrency { - -/** - * Timer Manager - * - * This class dispatches timer tasks when they fall due. - * - * @version $Id:$ - */ -class TimerManager { - - public: - - TimerManager(); - - virtual ~TimerManager(); - - virtual boost::shared_ptr threadFactory() const; - - virtual void threadFactory(boost::shared_ptr value); - - /** - * Starts the timer manager service - * - * @throws IllegalArgumentException Missing thread factory attribute - */ - virtual void start(); - - /** - * Stops the timer manager service - */ - virtual void stop(); - - virtual size_t taskCount() const ; - - /** - * Adds a task to be executed at some time in the future by a worker thread. - * - * @param task The task to execute - * @param timeout Time in milliseconds to delay before executing task - */ - virtual void add(boost::shared_ptr task, int64_t timeout); - - /** - * Adds a task to be executed at some time in the future by a worker thread. - * - * @param task The task to execute - * @param timeout Absolute time in the future to execute task. - */ - virtual void add(boost::shared_ptr task, const struct timespec& timeout); - - /** - * Removes a pending task - * - * @throws NoSuchTaskException Specified task doesn't exist. It was either - * processed already or this call was made for a - * task that was never added to this timer - * - * @throws UncancellableTaskException Specified task is already being - * executed or has completed execution. - */ - virtual void remove(boost::shared_ptr task); - - enum STATE { - UNINITIALIZED, - STARTING, - STARTED, - STOPPING, - STOPPED - }; - - virtual const STATE state() const; - - private: - boost::shared_ptr threadFactory_; - class Task; - friend class Task; - std::multimap > taskMap_; - size_t taskCount_; - Monitor monitor_; - STATE state_; - class Dispatcher; - friend class Dispatcher; - boost::shared_ptr dispatcher_; - boost::shared_ptr dispatcherThread_; - typedef std::multimap >::iterator task_iterator; - typedef std::pair task_range; -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_TIMERMANAGER_H_ diff --git a/thrift/lib/cpp/concurrency/Util.h b/thrift/lib/cpp/concurrency/Util.h deleted file mode 100644 index 58fc9cd6b7..0000000000 --- a/thrift/lib/cpp/concurrency/Util.h +++ /dev/null @@ -1,167 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_CONCURRENCY_UTIL_H_ -#define _THRIFT_CONCURRENCY_UTIL_H_ 1 - -#include -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace concurrency { - -/** - * Utility methods - * - * This class contains basic utility methods for converting time formats, - * and other common platform-dependent concurrency operations. - * It should not be included in API headers for other concurrency library - * headers, since it will, by definition, pull in all sorts of horrid - * platform dependent crap. Rather it should be included directly in - * concurrency library implementation source. - * - * @version $Id:$ - */ -class Util { - public: - - static const int64_t NS_PER_S = 1000000000LL; - static const int64_t US_PER_S = 1000000LL; - static const int64_t MS_PER_S = 1000LL; - - static const int64_t NS_PER_MS = NS_PER_S / MS_PER_S; - static const int64_t NS_PER_US = NS_PER_S / US_PER_S; - static const int64_t US_PER_MS = US_PER_S / MS_PER_S; - - /** - * Converts millisecond timestamp into a timespec struct - * - * @param struct timespec& result - * @param time or duration in milliseconds - */ - static void toTimespec(struct timespec& result, int64_t value) { - result.tv_sec = value / MS_PER_S; // ms to s - result.tv_nsec = (value % MS_PER_S) * NS_PER_MS; // ms to ns - } - - static void toTimeval(struct timeval& result, int64_t value) { - result.tv_sec = value / MS_PER_S; // ms to s - result.tv_usec = (value % MS_PER_S) * US_PER_MS; // ms to us - } - - static const void toTicks(int64_t& result, int64_t secs, int64_t oldTicks, - int64_t oldTicksPerSec, int64_t newTicksPerSec) { - result = secs * newTicksPerSec; - result += oldTicks * newTicksPerSec / oldTicksPerSec; - - int64_t oldPerNew = oldTicksPerSec / newTicksPerSec; - if (oldPerNew && ((oldTicks % oldPerNew) >= (oldPerNew / 2))) { - ++result; - } - } - /** - * Converts struct timespec to arbitrary-sized ticks since epoch - */ - static const void toTicks(int64_t& result, - const struct timespec& value, - int64_t ticksPerSec) { - return toTicks(result, value.tv_sec, value.tv_nsec, NS_PER_S, ticksPerSec); - } - - /** - * Converts struct timeval to arbitrary-sized ticks since epoch - */ - static const void toTicks(int64_t& result, - const struct timeval& value, - int64_t ticksPerSec) { - return toTicks(result, value.tv_sec, value.tv_usec, US_PER_S, ticksPerSec); - } - - /** - * Converts struct timespec to milliseconds - */ - static const void toMilliseconds(int64_t& result, - const struct timespec& value) { - return toTicks(result, value, MS_PER_S); - } - - /** - * Converts struct timeval to milliseconds - */ - static const void toMilliseconds(int64_t& result, - const struct timeval& value) { - return toTicks(result, value, MS_PER_S); - } - - /** - * Converts struct timespec to microseconds - */ - static const void toUsec(int64_t& result, const struct timespec& value) { - return toTicks(result, value, US_PER_S); - } - - /** - * Converts struct timeval to microseconds - */ - static const void toUsec(int64_t& result, const struct timeval& value) { - return toTicks(result, value, US_PER_S); - } - - /** - * Get current time as a number of arbitrary-size ticks from epoch - */ - static const int64_t currentTimeTicks(int64_t ticksPerSec); - - /** - * Get current time as milliseconds from epoch - */ - static const int64_t currentTime() { return currentTimeTicks(MS_PER_S); } - - /** - * Get current time as micros from epoch - */ - static const int64_t currentTimeUsec() { return currentTimeTicks(US_PER_S); } - - /** - * Get monotonic time as a number of arbitrary-size ticks from some - * unspecified starting point. - * - * This may fall back to the current time (potentially non-monotonic) on - * systems that do not support monotonic time. - */ - static const int64_t monotonicTimeTicks(int64_t ticksPerSec); - - /** - * Get monotonic time as milliseconds. - */ - static const int64_t monotonicTime() { return monotonicTimeTicks(MS_PER_S); } - - /** - * Get current time as micros from epoch - */ - static const int64_t monotonicTimeUsec() { - return monotonicTimeTicks(US_PER_S); - } -}; - -}}} // apache::thrift::concurrency - -#endif // #ifndef _THRIFT_CONCURRENCY_UTIL_H_ diff --git a/thrift/lib/cpp/concurrency/test/ThreadFactoryTests.h b/thrift/lib/cpp/concurrency/test/ThreadFactoryTests.h deleted file mode 100644 index 9f6f75e872..0000000000 --- a/thrift/lib/cpp/concurrency/test/ThreadFactoryTests.h +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 "thrift/lib/cpp/config.h" -#include "thrift/lib/cpp/concurrency/Thread.h" -#include "thrift/lib/cpp/concurrency/PosixThreadFactory.h" -#include "thrift/lib/cpp/concurrency/Monitor.h" -#include "thrift/lib/cpp/concurrency/Util.h" - -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace concurrency { namespace test { - -using boost::shared_ptr; -using namespace apache::thrift::concurrency; - -/** - * ThreadManagerTests class - * - * @version $Id:$ - */ -class ThreadFactoryTests { - -public: - - static const double ERROR; - - class Task: public Runnable { - - public: - - Task() {} - - void run() { - std::cout << "\t\t\tHello World" << std::endl; - } - }; - - /** - * Hello world test - */ - bool helloWorldTest() { - - PosixThreadFactory threadFactory = PosixThreadFactory(); - - shared_ptr task = shared_ptr(new ThreadFactoryTests::Task()); - - shared_ptr thread = threadFactory.newThread(task); - - thread->start(); - - thread->join(); - - std::cout << "\t\t\tSuccess!" << std::endl; - - return true; - } - - /** - * Reap N threads - */ - class ReapNTask: public Runnable { - - public: - - ReapNTask(Monitor& monitor, int& activeCount) : - _monitor(monitor), - _count(activeCount) {} - - void run() { - Synchronized s(_monitor); - - _count--; - - //std::cout << "\t\t\tthread count: " << _count << std::endl; - - if (_count == 0) { - _monitor.notify(); - } - } - - Monitor& _monitor; - - int& _count; - }; - - bool reapNThreads(int loop=1, int count=10) { - - PosixThreadFactory threadFactory = PosixThreadFactory(); - - Monitor* monitor = new Monitor(); - - for(int lix = 0; lix < loop; lix++) { - - int* activeCount = new int(count); - - std::set > threads; - - int tix; - - for (tix = 0; tix < count; tix++) { - try { - threads.insert(threadFactory.newThread(shared_ptr(new ReapNTask(*monitor, *activeCount)))); - } catch(SystemResourceException& e) { - std::cout << "\t\t\tfailed to create " << lix * count + tix << " thread " << e.what() << std::endl; - throw e; - } - } - - tix = 0; - for (std::set >::const_iterator thread = threads.begin(); thread != threads.end(); tix++, ++thread) { - - try { - (*thread)->start(); - } catch(SystemResourceException& e) { - std::cout << "\t\t\tfailed to start " << lix * count + tix << " thread " << e.what() << std::endl; - throw e; - } - } - - { - Synchronized s(*monitor); - while (*activeCount > 0) { - monitor->wait(1000); - } - } - - std::cout << "\t\t\treaped " << lix * count << " threads" << std::endl; - } - - std::cout << "\t\t\tSuccess!" << std::endl; - - return true; - } - - class SynchStartTask: public Runnable { - - public: - - enum STATE { - UNINITIALIZED, - STARTING, - STARTED, - STOPPING, - STOPPED - }; - - SynchStartTask(Monitor& monitor, volatile STATE& state) : - _monitor(monitor), - _state(state) {} - - void run() { - { - Synchronized s(_monitor); - if (_state == SynchStartTask::STARTING) { - _state = SynchStartTask::STARTED; - _monitor.notify(); - } - } - - { - Synchronized s(_monitor); - while (_state == SynchStartTask::STARTED) { - _monitor.wait(); - } - - if (_state == SynchStartTask::STOPPING) { - _state = SynchStartTask::STOPPED; - _monitor.notifyAll(); - } - } - } - - private: - Monitor& _monitor; - volatile STATE& _state; - }; - - bool synchStartTest() { - - Monitor monitor; - - SynchStartTask::STATE state = SynchStartTask::UNINITIALIZED; - - shared_ptr task = shared_ptr(new SynchStartTask(monitor, state)); - - PosixThreadFactory threadFactory = PosixThreadFactory(); - - shared_ptr thread = threadFactory.newThread(task); - - if (state == SynchStartTask::UNINITIALIZED) { - - state = SynchStartTask::STARTING; - - thread->start(); - } - - { - Synchronized s(monitor); - while (state == SynchStartTask::STARTING) { - monitor.wait(); - } - } - - assert(state != SynchStartTask::STARTING); - - { - Synchronized s(monitor); - - try { - monitor.wait(100); - } catch(TimedOutException& e) { - } - - if (state == SynchStartTask::STARTED) { - - state = SynchStartTask::STOPPING; - - monitor.notify(); - } - - while (state == SynchStartTask::STOPPING) { - monitor.wait(); - } - } - - assert(state == SynchStartTask::STOPPED); - - bool success = true; - - std::cout << "\t\t\t" << (success ? "Success" : "Failure") << "!" << std::endl; - - return true; - } - - /** See how accurate monitor timeout is. */ - - bool monitorTimeoutTest(size_t count=1000, int64_t timeout=10) { - - Monitor monitor; - - int64_t startTime = Util::currentTime(); - - for (size_t ix = 0; ix < count; ix++) { - { - Synchronized s(monitor); - try { - monitor.wait(timeout); - } catch(TimedOutException& e) { - } - } - } - - int64_t endTime = Util::currentTime(); - - double error = ((endTime - startTime) - (count * timeout)) / (double)(count * timeout); - - if (error < 0.0) { - - error *= 1.0; - } - - bool success = error < ThreadFactoryTests::ERROR; - - std::cout << "\t\t\t" << (success ? "Success" : "Failure") << "! expected time: " << count * timeout << "ms elapsed time: "<< endTime - startTime << "ms error%: " << error * 100.0 << std::endl; - - return success; - } - - - class FloodTask : public Runnable { - public: - - FloodTask(const size_t id) :_id(id) {} - ~FloodTask(){ - if(_id % 1000 == 0) { - std::cout << "\t\tthread " << _id << " done" << std::endl; - } - } - - void run(){ - if(_id % 1000 == 0) { - std::cout << "\t\tthread " << _id << " started" << std::endl; - } - - usleep(1); - } - const size_t _id; - }; - - void foo(PosixThreadFactory *tf) { - } - - bool floodNTest(size_t loop=1, size_t count=100000) { - - bool success = false; - - for(size_t lix = 0; lix < loop; lix++) { - - PosixThreadFactory threadFactory = PosixThreadFactory(); - threadFactory.setDetached(true); - - for(size_t tix = 0; tix < count; tix++) { - - try { - - shared_ptr task(new FloodTask(lix * count + tix )); - - shared_ptr thread = threadFactory.newThread(task); - - thread->start(); - - usleep(1); - - } catch (TException& e) { - - std::cout << "\t\t\tfailed to start " << lix * count + tix << " thread " << e.what() << std::endl; - - return success; - } - } - - std::cout << "\t\t\tflooded " << (lix + 1) * count << " threads" << std::endl; - - success = true; - } - - return success; - } -}; - -const double ThreadFactoryTests::ERROR = .20; - -}}}} // apache::thrift::concurrency::test - diff --git a/thrift/lib/cpp/concurrency/test/TimerManagerTests.h b/thrift/lib/cpp/concurrency/test/TimerManagerTests.h deleted file mode 100644 index 964afbca52..0000000000 --- a/thrift/lib/cpp/concurrency/test/TimerManagerTests.h +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 "thrift/lib/cpp/concurrency/TimerManager.h" -#include "thrift/lib/cpp/concurrency/PosixThreadFactory.h" -#include "thrift/lib/cpp/concurrency/Monitor.h" -#include "thrift/lib/cpp/concurrency/Util.h" - -#include -#include - -namespace apache { namespace thrift { namespace concurrency { namespace test { - -using namespace apache::thrift::concurrency; - -/** - * ThreadManagerTests class - * - * @version $Id:$ - */ -class TimerManagerTests { - - public: - - static const double ERROR; - - class Task: public Runnable { - public: - - Task(Monitor& monitor, int64_t timeout) : - _timeout(timeout), - _startTime(Util::currentTime()), - _monitor(monitor), - _success(false), - _done(false) {} - - ~Task() { std::cerr << this << std::endl; } - - void run() { - - _endTime = Util::currentTime(); - - // Figure out error percentage - - int64_t delta = _endTime - _startTime; - - - delta = delta > _timeout ? delta - _timeout : _timeout - delta; - - float error = delta / _timeout; - - if(error < ERROR) { - _success = true; - } - - _done = true; - - std::cout << "\t\t\tTimerManagerTests::Task[" << this << "] done" << std::endl; //debug - - {Synchronized s(_monitor); - _monitor.notifyAll(); - } - } - - int64_t _timeout; - int64_t _startTime; - int64_t _endTime; - Monitor& _monitor; - bool _success; - bool _done; - }; - - /** - * This test creates two tasks and waits for the first to expire within 10% - * of the expected expiration time. It then verifies that the timer manager - * properly clean up itself and the remaining orphaned timeout task when the - * manager goes out of scope and its destructor is called. - */ - bool test00(int64_t timeout=1000LL) { - - shared_ptr orphanTask = shared_ptr(new TimerManagerTests::Task(_monitor, 10 * timeout)); - - { - - TimerManager timerManager; - - timerManager.threadFactory(shared_ptr(new PosixThreadFactory())); - - timerManager.start(); - - assert(timerManager.state() == TimerManager::STARTED); - - shared_ptr task = shared_ptr(new TimerManagerTests::Task(_monitor, timeout)); - - { - Synchronized s(_monitor); - - timerManager.add(orphanTask, 10 * timeout); - - timerManager.add(task, timeout); - - _monitor.wait(); - } - - assert(task->_done); - - - std::cout << "\t\t\t" << (task->_success ? "Success" : "Failure") << "!" << std::endl; - } - - // timerManager.stop(); This is where it happens via destructor - - assert(!orphanTask->_done); - - return true; - } - - friend class TestTask; - - Monitor _monitor; -}; - -const double TimerManagerTests::ERROR = .20; - -}}}} // apache::thrift::concurrency - diff --git a/thrift/lib/cpp/config.h b/thrift/lib/cpp/config.h deleted file mode 100644 index 786524271c..0000000000 --- a/thrift/lib/cpp/config.h +++ /dev/null @@ -1,316 +0,0 @@ -/* config.h. Generated by configure. */ -/* - * Generated by simpkins on 2009-11-18, - * on an x86_64 CentOS 5.2 system. - */ -/* config.hin. Generated from configure.ac by autoheader. */ - -/* Define if the AI_ADDRCONFIG symbol is unavailable */ -/* #undef AI_ADDRCONFIG */ - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define ARITHMETIC_RIGHT_SHIFT 1 - -/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP - systems. This function is required for `alloca.c' support on those systems. - */ -/* #undef CRAY_STACKSEG_END */ - -/* Define to 1 if using `alloca.c'. */ -/* #undef C_ALLOCA */ - -/* Define to 1 if you have `alloca', as a function or macro. */ -#define HAVE_ALLOCA 1 - -/* Define to 1 if you have and it should be used (not on Ultrix). - */ -#define HAVE_ALLOCA_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_ARPA_INET_H 1 - -/* define if the Boost library is available */ -#define HAVE_BOOST - -/* Define to 1 if you have the `bzero' function. */ -#define HAVE_BZERO 1 - -/* Define to 1 if you have the `clock_gettime' function. */ -#define HAVE_CLOCK_GETTIME 1 - -/* Define to 1 if you have the declaration of `strerror_r', and to 0 if you - don't. */ -#define HAVE_DECL_STRERROR_R 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_DLFCN_H 1 - -/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ -/* #undef HAVE_DOPRNT */ - -/* Define to 1 if you have the header file. */ -#define HAVE_ENDIAN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_FCNTL_H 1 - -/* Define to 1 if you have the `ftruncate' function. */ -#define HAVE_FTRUNCATE 1 - -/* Define to 1 if you have the `gethostbyname' function. */ -#define HAVE_GETHOSTBYNAME 1 - -/* Define to 1 if you have the `gettimeofday' function. */ -#define HAVE_GETTIMEOFDAY 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_INTTYPES_H 1 - -/* define if libevent is available */ -#define HAVE_LIBEVENT - -/* Define to 1 if you have the header file. */ -#define HAVE_LIBINTL_H 1 - -/* Define to 1 if you have the `pthread' library (-lpthread). */ -#define HAVE_LIBPTHREAD 1 - -/* Define to 1 if you have the `rt' library (-lrt). */ -#define HAVE_LIBRT 1 - -/* Define to 1 if you have the `socket' library (-lsocket). */ -/* #undef HAVE_LIBSOCKET */ - -/* Define to 1 if you have the header file. */ -#define HAVE_LIMITS_H 1 - -/* Define to 1 if your system has a GNU libc compatible `malloc' function, and - to 0 otherwise. */ -#define HAVE_MALLOC 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MALLOC_H 1 - -/* Define to 1 if you have the `memmove' function. */ -#define HAVE_MEMMOVE 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_MEMORY_H 1 - -/* Define to 1 if you have the `memset' function. */ -#define HAVE_MEMSET 1 - -/* Define to 1 if you have the `mkdir' function. */ -#define HAVE_MKDIR 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_NETDB_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_NETINET_IN_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_PTHREAD_H 1 - -/* Define to 1 if the system has the type `ptrdiff_t'. */ -#define HAVE_PTRDIFF_T 1 - -/* Define to 1 if your system has a GNU libc compatible `realloc' function, - and to 0 otherwise. */ -#define HAVE_REALLOC 1 - -/* Define to 1 if you have the `realpath' function. */ -#define HAVE_REALPATH 1 - -/* Define to 1 if you have the `sched_get_priority_max' function. */ -#define HAVE_SCHED_GET_PRIORITY_MAX 1 - -/* Define to 1 if you have the `sched_get_priority_min' function. */ -#define HAVE_SCHED_GET_PRIORITY_MIN 1 - -/* Define to 1 if you have the `select' function. */ -#define HAVE_SELECT 1 - -/* Define to 1 if you have the `socket' function. */ -#define HAVE_SOCKET 1 - -/* Define to 1 if you have the `sqrt' function. */ -#define HAVE_SQRT 1 - -/* Define to 1 if `stat' has the bug that it succeeds when given the - zero-length file name argument. */ -/* #undef HAVE_STAT_EMPTY_STRING_BUG */ - -/* Define to 1 if stdbool.h conforms to C99. */ -#define HAVE_STDBOOL_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDDEF_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDINT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STDLIB_H 1 - -/* Define to 1 if you have the `strchr' function. */ -#define HAVE_STRCHR 1 - -/* Define to 1 if you have the `strdup' function. */ -#define HAVE_STRDUP 1 - -/* Define to 1 if you have the `strerror' function. */ -#define HAVE_STRERROR 1 - -/* Define to 1 if you have the `strerror_r' function. */ -#define HAVE_STRERROR_R 1 - -/* Define to 1 if you have the `strftime' function. */ -#define HAVE_STRFTIME 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRINGS_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_STRING_H 1 - -/* Define to 1 if you have the `strstr' function. */ -#define HAVE_STRSTR 1 - -/* Define to 1 if you have the `strtol' function. */ -#define HAVE_STRTOL 1 - -/* Define to 1 if you have the `strtoul' function. */ -#define HAVE_STRTOUL 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SELECT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_SOCKET_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_STAT_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TIME_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_SYS_TYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define HAVE_UNISTD_H 1 - -/* Define to 1 if you have the `vprintf' function. */ -#define HAVE_VPRINTF 1 - -/* define if zlib is available */ -#define HAVE_ZLIB - -/* Define to 1 if the system has the type `_Bool'. */ -/* #undef HAVE__BOOL */ - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define LOGICAL_RIGHT_SHIFT 2 - -/* Define to 1 if `lstat' dereferences a symlink specified with a trailing - slash. */ -#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1 - -/* Name of package */ -#define PACKAGE "thrift" - -/* Define to the address where bug reports for this package should be sent. */ -#define PACKAGE_BUGREPORT "" - -/* Define to the full name of this package. */ -#define PACKAGE_NAME "thrift" - -/* Define to the full name and version of this package. */ -#define PACKAGE_STRING "thrift 20080411" - -/* Define to the one symbol short name of this package. */ -#define PACKAGE_TARNAME "thrift" - -/* Define to the version of this package. */ -#define PACKAGE_VERSION "20080411" - -/* Define to the type of arg 1 for `select'. */ -#define SELECT_TYPE_ARG1 int - -/* Define to the type of args 2, 3 and 4 for `select'. */ -#define SELECT_TYPE_ARG234 (fd_set *) - -/* Define to the type of arg 5 for `select'. */ -#define SELECT_TYPE_ARG5 (struct timeval *) - -/* Indicates the effect of the right shift operator on negative signed - integers */ -#define SIGNED_RIGHT_SHIFT_IS 1 - -/* If using the C implementation of alloca, define if you know the - direction of stack growth for your system; otherwise it will be - automatically deduced at run-time. - STACK_DIRECTION > 0 => grows toward higher addresses - STACK_DIRECTION < 0 => grows toward lower addresses - STACK_DIRECTION = 0 => direction of growth unknown */ -/* #undef STACK_DIRECTION */ - -/* Define to 1 if you have the ANSI C header files. */ -#define STDC_HEADERS 1 - -/* Define to 1 if strerror_r returns char *. */ -#define STRERROR_R_CHAR_P 1 - -/* Define to 1 if you can safely include both and . */ -#define TIME_WITH_SYS_TIME 1 - -/* Define to 1 if your declares `struct tm'. */ -/* #undef TM_IN_SYS_TIME */ - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define UNKNOWN_RIGHT_SHIFT 3 - -/* Version number of package */ -#define VERSION "20080411" - -/* Define to 1 if `lex' declares `yytext' as a `char *' by default, not a - `char[]'. */ -#define YYTEXT_POINTER 1 - -/* Calls Google Perftools ProfilerRegisterThread() on pthread creation - - Set define to 0. It is exposing a linux 6.12 posix bug when an - application receives a SIGKILL, which causes the machine to crash. - */ -#ifndef GOOGLE_PERFTOOLS_REGISTER_THREAD -# define GOOGLE_PERFTOOLS_REGISTER_THREAD 0 -#endif - -/* Define to empty if `const' does not conform to ANSI C. */ -/* #undef const */ - -/* Define to `__inline__' or `__inline' if that's what the C compiler - calls it, or to nothing if 'inline' is not supported under any name. */ -#ifndef __cplusplus -/* #undef inline */ -#endif - -/* Define to rpl_malloc if the replacement function should be used. */ -/* #undef malloc */ - -/* Define to `int' if does not define. */ -/* #undef mode_t */ - -/* Define to `long' if does not define. */ -/* #undef off_t */ - -/* Define to rpl_realloc if the replacement function should be used. */ -/* #undef realloc */ - -/* Define to `unsigned' if does not define. */ -/* #undef size_t */ - -/* Define to empty if the keyword `volatile' does not work. Warning: valid - code using `volatile' can become incorrect without. Disable with care. */ -/* #undef volatile */ diff --git a/thrift/lib/cpp/processor/PeekProcessor.h b/thrift/lib/cpp/processor/PeekProcessor.h deleted file mode 100644 index 9058252e47..0000000000 --- a/thrift/lib/cpp/processor/PeekProcessor.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef PEEKPROCESSOR_H -#define PEEKPROCESSOR_H - -#include -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/transport/TTransportUtils.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include - -namespace apache { namespace thrift { namespace processor { - -namespace server { -class TConnectionContext; -} - -/* - * Class for peeking at the raw data that is being processed by another processor - * and gives the derived class a chance to change behavior accordingly - * - */ -class PeekProcessor : public apache::thrift::TProcessor { - - public: - PeekProcessor(); - virtual ~PeekProcessor(); - - // Input here: actualProcessor - the underlying processor - // protocolFactory - the protocol factory used to wrap the memory buffer - // transportFactory - this TPipedTransportFactory is used to wrap the source transport - // via a call to getPipedTransport - void initialize(boost::shared_ptr actualProcessor, - boost::shared_ptr protocolFactory, - boost::shared_ptr transportFactory); - - boost::shared_ptr getPipedTransport(boost::shared_ptr in); - - void setTargetTransport(boost::shared_ptr targetTransport); - - virtual bool process(boost::shared_ptr in, - boost::shared_ptr out, - TConnectionContext* connectionContext); - - // The following three functions can be overloaded by child classes to - // achieve desired peeking behavior - virtual void peekName(const std::string& fname); - virtual void peekBuffer(uint8_t* buffer, uint32_t size); - virtual void peek(boost::shared_ptr in, - apache::thrift::protocol::TType ftype, - int16_t fid); - virtual void peekEnd(); - - private: - boost::shared_ptr actualProcessor_; - boost::shared_ptr pipedProtocol_; - boost::shared_ptr transportFactory_; - boost::shared_ptr memoryBuffer_; - boost::shared_ptr targetTransport_; -}; - -}}} // apache::thrift::processor - -#endif diff --git a/thrift/lib/cpp/processor/StatsProcessor.h b/thrift/lib/cpp/processor/StatsProcessor.h deleted file mode 100644 index 6197adf6ec..0000000000 --- a/thrift/lib/cpp/processor/StatsProcessor.h +++ /dev/null @@ -1,266 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef STATSPROCESSOR_H -#define STATSPROCESSOR_H - -#include -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/TProcessor.h" - -namespace apache { namespace thrift { namespace processor { - -/* - * Class for keeping track of function call statistics and printing them if desired - * - */ -class StatsProcessor : public apache::thrift::TProcessor { -public: - StatsProcessor(bool print, bool frequency) - : print_(print), - frequency_(frequency) - {} - virtual ~StatsProcessor() {}; - - virtual bool process(boost::shared_ptr piprot, - boost::shared_ptr poprot, - void* serverContext) { - - piprot_ = piprot; - - std::string fname; - apache::thrift::protocol::TMessageType mtype; - int32_t seqid; - - piprot_->readMessageBegin(fname, mtype, seqid); - if (mtype != apache::thrift::protocol::T_CALL) { - if (print_) { - printf("Unknown message type\n"); - } - throw apache::thrift::TLibraryException("Unexpected message type"); - } - if (print_) { - printf("%s (", fname.c_str()); - } - if (frequency_) { - if (frequency_map_.find(fname) != frequency_map_.end()) { - frequency_map_[fname]++; - } else { - frequency_map_[fname] = 1; - } - } - - apache::thrift::protocol::TType ftype; - int16_t fid; - - while (true) { - piprot_->readFieldBegin(fname, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - - printAndPassToBuffer(ftype); - if (print_) { - printf(", "); - } - } - - if (print_) { - printf("\b\b)\n"); - } - return true; - } - - const std::map& get_frequency_map() { - return frequency_map_; - } - -protected: - void printAndPassToBuffer(apache::thrift::protocol::TType ftype) { - switch (ftype) { - case apache::thrift::protocol::T_BOOL: - { - bool boolv; - piprot_->readBool(boolv); - if (print_) { - printf("%d", boolv); - } - } - break; - case apache::thrift::protocol::T_BYTE: - { - int8_t bytev; - piprot_->readByte(bytev); - if (print_) { - printf("%d", bytev); - } - } - break; - case apache::thrift::protocol::T_I16: - { - int16_t i16; - piprot_->readI16(i16); - if (print_) { - printf("%d", i16); - } - } - break; - case apache::thrift::protocol::T_I32: - { - int32_t i32; - piprot_->readI32(i32); - if (print_) { - printf("%d", i32); - } - } - break; - case apache::thrift::protocol::T_I64: - { - int64_t i64; - piprot_->readI64(i64); - if (print_) { - printf("%ld", i64); - } - } - break; - case apache::thrift::protocol::T_DOUBLE: - { - double dub; - piprot_->readDouble(dub); - if (print_) { - printf("%f", dub); - } - } - break; - case apache::thrift::protocol::T_STRING: - { - std::string str; - piprot_->readString(str); - if (print_) { - printf("%s", str.c_str()); - } - } - break; - case apache::thrift::protocol::T_STRUCT: - { - std::string name; - int16_t fid; - apache::thrift::protocol::TType ftype; - piprot_->readStructBegin(name); - if (print_) { - printf("<"); - } - while (true) { - piprot_->readFieldBegin(name, ftype, fid); - if (ftype == apache::thrift::protocol::T_STOP) { - break; - } - printAndPassToBuffer(ftype); - if (print_) { - printf(","); - } - piprot_->readFieldEnd(); - } - piprot_->readStructEnd(); - if (print_) { - printf("\b>"); - } - } - break; - case apache::thrift::protocol::T_MAP: - { - apache::thrift::protocol::TType keyType; - apache::thrift::protocol::TType valType; - uint32_t i, size; - piprot_->readMapBegin(keyType, valType, size); - if (print_) { - printf("{"); - } - for (i = 0; i < size; i++) { - printAndPassToBuffer(keyType); - if (print_) { - printf("=>"); - } - printAndPassToBuffer(valType); - if (print_) { - printf(","); - } - } - piprot_->readMapEnd(); - if (print_) { - printf("\b}"); - } - } - break; - case apache::thrift::protocol::T_SET: - { - apache::thrift::protocol::TType elemType; - uint32_t i, size; - piprot_->readSetBegin(elemType, size); - if (print_) { - printf("{"); - } - for (i = 0; i < size; i++) { - printAndPassToBuffer(elemType); - if (print_) { - printf(","); - } - } - piprot_->readSetEnd(); - if (print_) { - printf("\b}"); - } - } - break; - case apache::thrift::protocol::T_LIST: - { - apache::thrift::protocol::TType elemType; - uint32_t i, size; - piprot_->readListBegin(elemType, size); - if (print_) { - printf("["); - } - for (i = 0; i < size; i++) { - printAndPassToBuffer(elemType); - if (print_) { - printf(","); - } - } - piprot_->readListEnd(); - if (print_) { - printf("\b]"); - } - } - break; - default: - break; - } - } - - boost::shared_ptr piprot_; - std::map frequency_map_; - - bool print_; - bool frequency_; -}; - -}}} // apache::thrift::processor - -#endif diff --git a/thrift/lib/cpp/processor/test/EventLog.h b/thrift/lib/cpp/processor/test/EventLog.h deleted file mode 100644 index 50d0d87164..0000000000 --- a/thrift/lib/cpp/processor/test/EventLog.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef _THRIFT_TEST_EVENTLOG_H_ -#define _THRIFT_TEST_EVENTLOG_H_ 1 - -#include "thrift/lib/cpp/concurrency/Monitor.h" - -namespace apache { namespace thrift { namespace test { - -// Initially I made EventType an enum, but using char* results -// in much more readable error messages when there is a mismatch. -// It also lets users of EventLog easily define their own new types. -// Comparing the literal pointer values should be safe, barring any strange -// linking setup that results in duplicate symbols. -typedef const char* EventType; - -struct Event { - Event(EventType type, uint32_t connectionId, uint32_t callId, - const std::string& message) : - type(type), - connectionId(connectionId), - callId(callId), - message(message) {} - - EventType type; - uint32_t connectionId; - uint32_t callId; - std::string message; -}; - -class EventLog { - public: - static EventType ET_LOG_END; - static EventType ET_CONN_CREATED; - static EventType ET_CONN_DESTROYED; - static EventType ET_CALL_STARTED; - static EventType ET_CALL_FINISHED; - static EventType ET_PROCESS; - static EventType ET_PRE_READ; - static EventType ET_POST_READ; - static EventType ET_PRE_WRITE; - static EventType ET_POST_WRITE; - static EventType ET_ASYNC_COMPLETE; - static EventType ET_HANDLER_ERROR; - - static EventType ET_CALL_INCREMENT_GENERATION; - static EventType ET_CALL_GET_GENERATION; - static EventType ET_CALL_ADD_STRING; - static EventType ET_CALL_GET_STRINGS; - static EventType ET_CALL_GET_DATA_WAIT; - static EventType ET_CALL_ONEWAY_WAIT; - static EventType ET_CALL_UNEXPECTED_EXCEPTION_WAIT; - static EventType ET_CALL_EXCEPTION_WAIT; - static EventType ET_WAIT_RETURN; - static EventType ET_CALL_SET_VALUE; - static EventType ET_CALL_GET_VALUE; - - EventLog(); - - void append(EventType type, uint32_t connectionId, uint32_t callId, - const std::string& message = ""); - - Event waitForEvent(int64_t timeout = 500); - Event waitForConnEvent(uint32_t connId, int64_t timeout = 500); - - protected: - typedef std::list EventList; - - concurrency::Monitor monitor_; - EventList events_; - uint32_t id_; - - static uint32_t nextId_; -}; - -}}} // apache::thrift::test - -#endif // _THRIFT_TEST_EVENTLOG_H_ diff --git a/thrift/lib/cpp/processor/test/Handlers.h b/thrift/lib/cpp/processor/test/Handlers.h deleted file mode 100644 index 4dc0e68b2b..0000000000 --- a/thrift/lib/cpp/processor/test/Handlers.h +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef _THRIFT_PROCESSOR_TEST_HANDLERS_H_ -#define _THRIFT_PROCESSOR_TEST_HANDLERS_H_ 1 - -#include "thrift/lib/cpp/processor/test/EventLog.h" -#include "thrift/lib/cpp/processor/test/gen-cpp/ChildService.h" - -#include "thrift/lib/cpp/server/TConnectionContext.h" - -namespace apache { namespace thrift { namespace test { - -class ParentHandler : virtual public ParentServiceIf { - public: - ParentHandler(const boost::shared_ptr& log) : - triggerMonitor(&mutex_), - generation_(0), - wait_(false), - log_(log) { } - - int32_t incrementGeneration() { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_INCREMENT_GENERATION, 0, 0); - return ++generation_; - } - - int32_t getGeneration() { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_GET_GENERATION, 0, 0); - return generation_; - } - - void addString(const std::string& s) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_ADD_STRING, 0, 0); - strings_.push_back(s); - } - - void getStrings(std::vector& _return) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_GET_STRINGS, 0, 0); - _return = strings_; - } - - void getDataWait(std::string& _return, int32_t length) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_GET_DATA_WAIT, 0, 0); - - blockUntilTriggered(); - - _return.append(length, 'a'); - } - - void onewayWait() { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_ONEWAY_WAIT, 0, 0); - - blockUntilTriggered(); - } - - void exceptionWait(const std::string& message) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_EXCEPTION_WAIT, 0, 0); - - blockUntilTriggered(); - - MyError e; - e.message = message; - throw e; - } - - void unexpectedExceptionWait(const std::string& message) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_UNEXPECTED_EXCEPTION_WAIT, 0, 0); - - blockUntilTriggered(); - - MyError e; - e.message = message; - throw e; - } - - /** - * After prepareTriggeredCall() is invoked, calls to any of the *Wait() - * functions won't return until triggerPendingCalls() is invoked - * - * This has to be a separate function invoked by the main test thread - * in order to to avoid race conditions. - */ - void prepareTriggeredCall() { - concurrency::Guard g(mutex_); - wait_ = true; - } - - /** - * Wake up all calls waiting in blockUntilTriggered() - */ - void triggerPendingCalls() { - concurrency::Guard g(mutex_); - wait_ = false; - triggerMonitor.notifyAll(); - } - - protected: - /** - * blockUntilTriggered() won't return until triggerPendingCalls() is invoked - * in another thread. - * - * This should only be called when already holding mutex_. - */ - void blockUntilTriggered() { - while (wait_) { - triggerMonitor.waitForever(); - } - - // Log an event when we return - log_->append(EventLog::ET_WAIT_RETURN, 0, 0); - } - - concurrency::Mutex mutex_; - concurrency::Monitor triggerMonitor; - int32_t generation_; - bool wait_; - std::vector strings_; - boost::shared_ptr log_; -}; - -class ChildHandler : public ParentHandler, virtual public ChildServiceIf { - public: - ChildHandler(const boost::shared_ptr& log) : - ParentHandler(log), - value_(0) {} - - int32_t setValue(int32_t value) { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_SET_VALUE, 0, 0); - - int32_t oldValue = value_; - value_ = value; - return oldValue; - } - - int32_t getValue() { - concurrency::Guard g(mutex_); - log_->append(EventLog::ET_CALL_GET_VALUE, 0, 0); - - return value_; - } - - protected: - int32_t value_; -}; - -struct ConnContext { - public: - ConnContext(server::TConnectionContext* ctx, uint32_t id) : - ctx(ctx), - id(id) {} - - server::TConnectionContext* ctx; - uint32_t id; -}; - -struct CallContext { - public: - CallContext(ConnContext *context, uint32_t id, const std::string& name) : - connContext(context), - name(name), - id(id) {} - - ConnContext *connContext; - std::string name; - uint32_t id; -}; - -class ServerEventHandler : public server::TServerEventHandler { - public: - ServerEventHandler(const boost::shared_ptr& log) : - nextId_(1), - log_(log) {} - - virtual void preServe(const transport::TSocketAddress*) {} - - virtual void newConnection(server::TConnectionContext* ctx) { - ConnContext* context = new ConnContext(ctx, nextId_); - ++nextId_; - ctx->setUserData(context); - log_->append(EventLog::ET_CONN_CREATED, context->id, 0); - } - - virtual void connectionDestroyed(server::TConnectionContext* ctx) { - ConnContext* context = static_cast(ctx->getUserData()); - - if (ctx != context->ctx) { - abort(); - } - - log_->append(EventLog::ET_CONN_DESTROYED, context->id, 0); - - delete context; - } - - protected: - uint32_t nextId_; - boost::shared_ptr log_; -}; - -class ProcessorEventHandler : public TProcessorEventHandler { - public: - ProcessorEventHandler(const boost::shared_ptr& log) : - nextId_(1), - log_(log) {} - - void* getContext(const char* fnName, TConnectionContext* serverContext) { - ConnContext* connContext = - reinterpret_cast(serverContext->getUserData()); - - CallContext* context = new CallContext(connContext, nextId_, fnName); - ++nextId_; - - log_->append(EventLog::ET_CALL_STARTED, connContext->id, context->id, - fnName); - return context; - } - - void freeContext(void* ctx, const char* fnName) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_CALL_FINISHED, context->connContext->id, - context->id, fnName); - delete context; - } - - void preRead(void* ctx, const char* fnName) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_PRE_READ, context->connContext->id, context->id, - fnName); - } - - void postRead(void* ctx, const char* fnName, uint32_t bytes) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_POST_READ, context->connContext->id, context->id, - fnName); - } - - void preWrite(void* ctx, const char* fnName) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_PRE_WRITE, context->connContext->id, context->id, - fnName); - } - - void postWrite(void* ctx, const char* fnName, uint32_t bytes) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_POST_WRITE, context->connContext->id, - context->id, fnName); - } - - void asyncComplete(void* ctx, const char* fnName) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_ASYNC_COMPLETE, context->connContext->id, - context->id, fnName); - } - - void handlerError(void* ctx, const char* fnName) { - CallContext* context = reinterpret_cast(ctx); - checkName(context, fnName); - log_->append(EventLog::ET_HANDLER_ERROR, context->connContext->id, - context->id, fnName); - } - - protected: - void checkName(const CallContext* context, const char* fnName) { - // Note: we can't use BOOST_CHECK_EQUAL here, since the handler runs in a - // different thread from the test functions. Just abort if the names are - // different - if (context->name != fnName) { - fprintf(stderr, "call context name mismatch: \"%s\" != \"%s\"\n", - context->name.c_str(), fnName); - fflush(stderr); - abort(); - } - } - - uint32_t nextId_; - boost::shared_ptr log_; -}; - -}}} // apache::thrift::test - -#endif // _THRIFT_PROCESSOR_TEST_HANDLERS_H_ diff --git a/thrift/lib/cpp/processor/test/ServerThread.h b/thrift/lib/cpp/processor/test/ServerThread.h deleted file mode 100644 index c5fcb39c36..0000000000 --- a/thrift/lib/cpp/processor/test/ServerThread.h +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef _THRIFT_TEST_SERVERTHREAD_H_ -#define _THRIFT_TEST_SERVERTHREAD_H_ 1 - -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TTransport.h" - -#include "thrift/lib/cpp/processor/test/EventLog.h" - -namespace apache { namespace thrift { namespace test { - -/** - * A helper class to tell ServerThread how to create the server - */ -class ServerState { - public: - virtual ~ServerState() {} - - /** - * Create a server to listen on the specified port. - * - * If the server returned fails to bind to the specified port when serve() is - * called on it, createServer() may be called again on a different port. - */ - virtual boost::shared_ptr createServer(uint16_t port) = 0; - - /** - * Get the TServerEventHandler to set on the server. - * - * This is only called after the server successfully binds and is about to - * start serving traffic. It is invoked from the server thread, rather than - * the main thread. - */ - virtual boost::shared_ptr - getServerEventHandler() { - return boost::shared_ptr(); - } - - /** - * This method is called in the server thread after server binding succeeds. - * - * Subclasses may override this method if they wish to record the final - * port that was used for the server. - */ - virtual void bindSuccessful(uint16_t port) { - } -}; - -/** - * ServerThread starts a thrift server running in a separate thread. - */ -class ServerThread { - public: - ServerThread(const boost::shared_ptr& state, bool autoStart) : - helper_(new Helper(this)), - port_(0), - running_(false), - serving_(false), - error_(false), - serverState_(state) { - if (autoStart) { - start(); - } - } - - void start(); - void stop(); - - uint16_t getPort() const { - return port_; - } - - ~ServerThread() { - if (running_) { - try { - stop(); - } catch (...) { - GlobalOutput.printf("error shutting down server"); - } - } - } - - protected: - // Annoying. thrift forces us to use shared_ptr, so we have to use - // a helper class that we can allocate on the heap and give to thrift. - // It would be simpler if we could just make Runnable and TServerEventHandler - // private base classes of ServerThread. - class Helper : public concurrency::Runnable, - public server::TServerEventHandler { - public: - Helper(ServerThread* serverThread) - : serverThread_(serverThread) {} - - void run() { - serverThread_->run(); - } - - void preServe(const transport::TSocketAddress* address) { - serverThread_->preServe(address); - } - - private: - ServerThread* serverThread_; - }; - - void run(); - void preServe(const transport::TSocketAddress* address); - - boost::shared_ptr helper_; - - uint16_t port_; - bool running_; - bool serving_; - bool error_; - concurrency::Monitor serverMonitor_; - - boost::shared_ptr serverState_; - boost::shared_ptr server_; - boost::shared_ptr thread_; -}; - -}}} // apache::thrift::test - -#endif // _THRIFT_TEST_SERVERTHREAD_H_ diff --git a/thrift/lib/cpp/processor/test/proc.thrift b/thrift/lib/cpp/processor/test/proc.thrift deleted file mode 100644 index ac3c5f9536..0000000000 --- a/thrift/lib/cpp/processor/test/proc.thrift +++ /dev/null @@ -1,22 +0,0 @@ -namespace cpp apache.thrift.test - -exception MyError { - 1: string message -} - -service ParentService { - i32 incrementGeneration() - i32 getGeneration() - void addString(1: string s) - list getStrings() - - binary getDataWait(1: i32 length) - oneway void onewayWait() - void exceptionWait(1: string message) throws (2: MyError error) - void unexpectedExceptionWait(1: string message) -} - -service ChildService extends ParentService { - i32 setValue(1: i32 value) - i32 getValue() -} diff --git a/thrift/lib/cpp/protocol/TBase64Utils.h b/thrift/lib/cpp/protocol/TBase64Utils.h deleted file mode 100644 index 3def733501..0000000000 --- a/thrift/lib/cpp/protocol/TBase64Utils.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_PROTOCOL_TBASE64UTILS_H_ -#define _THRIFT_PROTOCOL_TBASE64UTILS_H_ - -#include -#include - -namespace apache { namespace thrift { namespace protocol { - -// in must be at least len bytes -// len must be 1, 2, or 3 -// buf must be a buffer of at least 4 bytes and may not overlap in -// the data is not padded with '='; the caller can do this if desired -void base64_encode(const uint8_t *in, uint32_t len, uint8_t *buf); - -// buf must be a buffer of at least 4 bytes and contain base64 encoded values -// buf will be changed to contain output bytes -// len is number of bytes to consume from input (must be 2, 3, or 4) -// no '=' padding should be included in the input -void base64_decode(uint8_t *buf, uint32_t len); - -}}} // apache::thrift::protocol - -#endif // #define _THRIFT_PROTOCOL_TBASE64UTILS_H_ diff --git a/thrift/lib/cpp/protocol/TBinaryProtocol.h b/thrift/lib/cpp/protocol/TBinaryProtocol.h deleted file mode 100644 index 9a98d26c17..0000000000 --- a/thrift/lib/cpp/protocol/TBinaryProtocol.h +++ /dev/null @@ -1,302 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ -#define THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" - -#include - -namespace apache { namespace thrift { namespace protocol { - -/** - * The default binary protocol for thrift. Writes all data in a very basic - * binary format, essentially just spitting out the raw bytes. - * - */ -template -class TBinaryProtocolT - : public TVirtualProtocol< TBinaryProtocolT > { - - public: - static const int32_t VERSION_MASK = 0xffff0000; - static const int32_t VERSION_1 = 0x80010000; - // VERSION_2 (0x80020000) is taken by TDenseProtocol. - - TBinaryProtocolT(const boost::shared_ptr& trans) : - TVirtualProtocol< TBinaryProtocolT >(trans), - trans_(trans.get()), - string_limit_(0), - container_limit_(0), - strict_read_(false), - strict_write_(true), - string_buf_(NULL), - string_buf_size_(0) {} - - TBinaryProtocolT(const boost::shared_ptr& trans, - int32_t string_limit, - int32_t container_limit, - bool strict_read, - bool strict_write) : - TVirtualProtocol< TBinaryProtocolT >(trans), - trans_(trans.get()), - string_limit_(string_limit), - container_limit_(container_limit), - strict_read_(strict_read), - strict_write_(strict_write), - string_buf_(NULL), - string_buf_size_(0) {} - - /** - * Construct a TBinaryProtocolT using a raw pointer to the transport. - * - * The caller is responsible for ensuring that the transport remains valid - * for the lifetime of the protocol. - */ - TBinaryProtocolT(Transport_* trans) : - TVirtualProtocol< TBinaryProtocolT >(trans), - trans_(trans), - string_limit_(0), - container_limit_(0), - strict_read_(false), - strict_write_(true), - string_buf_(NULL), - string_buf_size_(0) {} - - ~TBinaryProtocolT() { - if (string_buf_ != NULL) { - std::free(string_buf_); - string_buf_size_ = 0; - } - } - - void setStringSizeLimit(int32_t string_limit) { - string_limit_ = string_limit; - } - - void setContainerSizeLimit(int32_t container_limit) { - container_limit_ = container_limit; - } - - void setStrict(bool strict_read, bool strict_write) { - strict_read_ = strict_read; - strict_write_ = strict_write; - } - - /** - * Writing functions. - */ - - /*ol*/ uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid); - - /*ol*/ uint32_t writeMessageEnd(); - - - inline uint32_t writeStructBegin(const char* name); - - inline uint32_t writeStructEnd(); - - inline uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - inline uint32_t writeFieldEnd(); - - inline uint32_t writeFieldStop(); - - inline uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - inline uint32_t writeMapEnd(); - - inline uint32_t writeListBegin(const TType elemType, const uint32_t size); - - inline uint32_t writeListEnd(); - - inline uint32_t writeSetBegin(const TType elemType, const uint32_t size); - - inline uint32_t writeSetEnd(); - - inline uint32_t writeBool(const bool value); - - inline uint32_t writeByte(const int8_t byte); - - inline uint32_t writeI16(const int16_t i16); - - inline uint32_t writeI32(const int32_t i32); - - inline uint32_t writeI64(const int64_t i64); - - inline uint32_t writeDouble(const double dub); - - template - inline uint32_t writeString(const StrType& str); - - inline uint32_t writeBinary(const std::string& str); - - /** - * Reading functions - */ - - - /*ol*/ uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid); - - /*ol*/ uint32_t readMessageEnd(); - - inline uint32_t readStructBegin(std::string& name); - - inline uint32_t readStructEnd(); - - inline uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId); - - inline uint32_t readFieldEnd(); - - inline uint32_t readMapBegin(TType& keyType, - TType& valType, - uint32_t& size); - - inline uint32_t readMapEnd(); - - inline uint32_t readListBegin(TType& elemType, uint32_t& size); - - inline uint32_t readListEnd(); - - inline uint32_t readSetBegin(TType& elemType, uint32_t& size); - - inline uint32_t readSetEnd(); - - inline uint32_t readBool(bool& value); - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol< TBinaryProtocolT >::readBool; - - inline uint32_t readByte(int8_t& byte); - - inline uint32_t readI16(int16_t& i16); - - inline uint32_t readI32(int32_t& i32); - - inline uint32_t readI64(int64_t& i64); - - inline uint32_t readDouble(double& dub); - - template - inline uint32_t readString(StrType& str); - - inline uint32_t readBinary(std::string& str); - - protected: - template - uint32_t readStringBody(StrType& str, int32_t sz); - - Transport_* trans_; - - int32_t string_limit_; - int32_t container_limit_; - - // Enforce presence of version identifier - bool strict_read_; - bool strict_write_; - - // Buffer for reading strings, save for the lifetime of the protocol to - // avoid memory churn allocating memory on every string read - uint8_t* string_buf_; - int32_t string_buf_size_; - -}; - -typedef TBinaryProtocolT TBinaryProtocol; - - -class TBinaryProtocolFactoryBase : public TProtocolFactory {}; - -/** - * Constructs binary protocol handlers - */ -template -class TBinaryProtocolFactoryT : public TBinaryProtocolFactoryBase { - public: - TBinaryProtocolFactoryT() : - string_limit_(0), - container_limit_(0), - strict_read_(false), - strict_write_(true) {} - - TBinaryProtocolFactoryT(int32_t string_limit, int32_t container_limit, - bool strict_read, bool strict_write) : - string_limit_(string_limit), - container_limit_(container_limit), - strict_read_(strict_read), - strict_write_(strict_write) {} - - virtual ~TBinaryProtocolFactoryT() {} - - void setStringSizeLimit(int32_t string_limit) { - string_limit_ = string_limit; - } - - void setContainerSizeLimit(int32_t container_limit) { - container_limit_ = container_limit; - } - - void setStrict(bool strict_read, bool strict_write) { - strict_read_ = strict_read; - strict_write_ = strict_write; - } - - boost::shared_ptr getProtocol( - boost::shared_ptr trans) { - boost::shared_ptr specific_trans = - boost::dynamic_pointer_cast(trans); - TProtocol* prot; - if (specific_trans) { - prot = new TBinaryProtocolT(specific_trans, string_limit_, - container_limit_, strict_read_, - strict_write_); - } else { - prot = new TBinaryProtocol(trans, string_limit_, container_limit_, - strict_read_, strict_write_); - } - - return boost::shared_ptr(prot); - } - - private: - int32_t string_limit_; - int32_t container_limit_; - bool strict_read_; - bool strict_write_; - -}; - -typedef TBinaryProtocolFactoryT TBinaryProtocolFactory; - -}}} // apache::thrift::protocol - -#include "TBinaryProtocol.tcc" - -#endif // #ifndef THRIFT_PROTOCOL_TBINARYPROTOCOL_H_ diff --git a/thrift/lib/cpp/protocol/TBinaryProtocol.tcc b/thrift/lib/cpp/protocol/TBinaryProtocol.tcc deleted file mode 100644 index 9d14361c07..0000000000 --- a/thrift/lib/cpp/protocol/TBinaryProtocol.tcc +++ /dev/null @@ -1,441 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_PROTOCOL_TBINARYPROTOCOL_TCC_ -#define _THRIFT_PROTOCOL_TBINARYPROTOCOL_TCC_ 1 - -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" - -#include -#include - - -namespace apache { namespace thrift { namespace protocol { - -template -uint32_t TBinaryProtocolT::writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - if (this->strict_write_) { - int32_t version = (VERSION_1) | ((int32_t)messageType); - uint32_t wsize = 0; - wsize += writeI32(version); - wsize += writeString(name); - wsize += writeI32(seqid); - return wsize; - } else { - uint32_t wsize = 0; - wsize += writeString(name); - wsize += writeByte((int8_t)messageType); - wsize += writeI32(seqid); - return wsize; - } -} - -template -uint32_t TBinaryProtocolT::writeMessageEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeStructBegin(const char* name) { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeStructEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId) { - uint32_t wsize = 0; - wsize += writeByte((int8_t)fieldType); - wsize += writeI16(fieldId); - return wsize; -} - -template -uint32_t TBinaryProtocolT::writeFieldEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeFieldStop() { - return - writeByte((int8_t)T_STOP); -} - -template -uint32_t TBinaryProtocolT::writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size) { - uint32_t wsize = 0; - wsize += writeByte((int8_t)keyType); - wsize += writeByte((int8_t)valType); - wsize += writeI32((int32_t)size); - return wsize; -} - -template -uint32_t TBinaryProtocolT::writeMapEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeListBegin(const TType elemType, - const uint32_t size) { - uint32_t wsize = 0; - wsize += writeByte((int8_t) elemType); - wsize += writeI32((int32_t)size); - return wsize; -} - -template -uint32_t TBinaryProtocolT::writeListEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeSetBegin(const TType elemType, - const uint32_t size) { - uint32_t wsize = 0; - wsize += writeByte((int8_t)elemType); - wsize += writeI32((int32_t)size); - return wsize; -} - -template -uint32_t TBinaryProtocolT::writeSetEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::writeBool(const bool value) { - uint8_t tmp = value ? 1 : 0; - this->trans_->write(&tmp, 1); - return 1; -} - -template -uint32_t TBinaryProtocolT::writeByte(const int8_t byte) { - this->trans_->write((uint8_t*)&byte, 1); - return 1; -} - -template -uint32_t TBinaryProtocolT::writeI16(const int16_t i16) { - int16_t net = (int16_t)htons(i16); - this->trans_->write((uint8_t*)&net, 2); - return 2; -} - -template -uint32_t TBinaryProtocolT::writeI32(const int32_t i32) { - int32_t net = (int32_t)htonl(i32); - this->trans_->write((uint8_t*)&net, 4); - return 4; -} - -template -uint32_t TBinaryProtocolT::writeI64(const int64_t i64) { - int64_t net = (int64_t)htonll(i64); - this->trans_->write((uint8_t*)&net, 8); - return 8; -} - -template -uint32_t TBinaryProtocolT::writeDouble(const double dub) { - BOOST_STATIC_ASSERT(sizeof(double) == sizeof(uint64_t)); - BOOST_STATIC_ASSERT(std::numeric_limits::is_iec559); - - uint64_t bits = bitwise_cast(dub); - bits = htonll(bits); - this->trans_->write((uint8_t*)&bits, 8); - return 8; -} - - -template -template -uint32_t TBinaryProtocolT::writeString(const StrType& str) { - uint32_t size = str.size(); - uint32_t result = writeI32((int32_t)size); - if (size > 0) { - this->trans_->write((uint8_t*)str.data(), size); - } - return result + size; -} - -template -uint32_t TBinaryProtocolT::writeBinary(const std::string& str) { - return TBinaryProtocolT::writeString(str); -} - -/** - * Reading functions - */ - -template -uint32_t TBinaryProtocolT::readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - uint32_t result = 0; - int32_t sz; - result += readI32(sz); - - if (sz < 0) { - // Check for correct version number - int32_t version = sz & VERSION_MASK; - if (version != VERSION_1) { - throw TProtocolException(TProtocolException::BAD_VERSION, "Bad version identifier"); - } - messageType = (TMessageType)(sz & 0x000000ff); - result += readString(name); - result += readI32(seqid); - } else { - if (this->strict_read_) { - throw TProtocolException(TProtocolException::BAD_VERSION, "No version identifier... old protocol client in strict mode?"); - } else { - // Handle pre-versioned input - int8_t type; - result += readStringBody(name, sz); - result += readByte(type); - messageType = (TMessageType)type; - result += readI32(seqid); - } - } - return result; -} - -template -uint32_t TBinaryProtocolT::readMessageEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readStructBegin(std::string& name) { - name = ""; - return 0; -} - -template -uint32_t TBinaryProtocolT::readStructEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - uint32_t result = 0; - int8_t type; - result += readByte(type); - fieldType = (TType)type; - if (fieldType == T_STOP) { - fieldId = 0; - return result; - } - result += readI16(fieldId); - return result; -} - -template -uint32_t TBinaryProtocolT::readFieldEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readMapBegin(TType& keyType, - TType& valType, - uint32_t& size) { - int8_t k, v; - uint32_t result = 0; - int32_t sizei; - result += readByte(k); - keyType = (TType)k; - result += readByte(v); - valType = (TType)v; - result += readI32(sizei); - if (sizei < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } else if (this->container_limit_ && sizei > this->container_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - size = (uint32_t)sizei; - return result; -} - -template -uint32_t TBinaryProtocolT::readMapEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readListBegin(TType& elemType, - uint32_t& size) { - int8_t e; - uint32_t result = 0; - int32_t sizei; - result += readByte(e); - elemType = (TType)e; - result += readI32(sizei); - if (sizei < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } else if (this->container_limit_ && sizei > this->container_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - size = (uint32_t)sizei; - return result; -} - -template -uint32_t TBinaryProtocolT::readListEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readSetBegin(TType& elemType, - uint32_t& size) { - int8_t e; - uint32_t result = 0; - int32_t sizei; - result += readByte(e); - elemType = (TType)e; - result += readI32(sizei); - if (sizei < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } else if (this->container_limit_ && sizei > this->container_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - size = (uint32_t)sizei; - return result; -} - -template -uint32_t TBinaryProtocolT::readSetEnd() { - return 0; -} - -template -uint32_t TBinaryProtocolT::readBool(bool& value) { - uint8_t b[1]; - this->trans_->readAll(b, 1); - value = *(int8_t*)b != 0; - return 1; -} - -template -uint32_t TBinaryProtocolT::readByte(int8_t& byte) { - uint8_t b[1]; - this->trans_->readAll(b, 1); - byte = *(int8_t*)b; - return 1; -} - -template -uint32_t TBinaryProtocolT::readI16(int16_t& i16) { - uint8_t b[2]; - this->trans_->readAll(b, 2); - i16 = *bitwise_cast(&b); - i16 = (int16_t)ntohs(i16); - return 2; -} - -template -uint32_t TBinaryProtocolT::readI32(int32_t& i32) { - uint8_t b[4]; - this->trans_->readAll(b, 4); - i32 = *bitwise_cast(&b); - i32 = (int32_t)ntohl(i32); - return 4; -} - -template -uint32_t TBinaryProtocolT::readI64(int64_t& i64) { - uint8_t b[8]; - this->trans_->readAll(b, 8); - i64 = *bitwise_cast(&b); - i64 = (int64_t)ntohll(i64); - return 8; -} - -template -uint32_t TBinaryProtocolT::readDouble(double& dub) { - BOOST_STATIC_ASSERT(sizeof(double) == sizeof(uint64_t)); - BOOST_STATIC_ASSERT(std::numeric_limits::is_iec559); - - uint64_t bits; - uint8_t b[8]; - this->trans_->readAll(b, 8); - bits = *bitwise_cast(&b); - bits = ntohll(bits); - dub = bitwise_cast(bits); - return 8; -} - -template -template -uint32_t TBinaryProtocolT::readString(StrType& str) { - uint32_t result; - int32_t size; - result = readI32(size); - return result + readStringBody(str, size); -} - -template -uint32_t TBinaryProtocolT::readBinary(std::string& str) { - return TBinaryProtocolT::readString(str); -} - -template -template -uint32_t TBinaryProtocolT::readStringBody(StrType& str, - int32_t size) { - uint32_t result = 0; - - // Catch error cases - if (size < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } - if (this->string_limit_ > 0 && size > this->string_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - - // Catch empty string case - if (size == 0) { - str.clear(); - return result; - } - - // Try to borrow first - const uint8_t* borrow_buf; - uint32_t got = size; - if ((borrow_buf = this->trans_->borrow(NULL, &got))) { - str.assign((const char*)borrow_buf, size); - this->trans_->consume(size); - return size; - } - - // Use the heap here to prevent stack overflow for v. large strings - if (size > this->string_buf_size_ || this->string_buf_ == NULL) { - void* new_string_buf = std::realloc(this->string_buf_, (uint32_t)size); - if (new_string_buf == NULL) { - throw std::bad_alloc(); - } - this->string_buf_ = (uint8_t*)new_string_buf; - this->string_buf_size_ = size; - } - this->trans_->readAll(this->string_buf_, size); - str.assign((char*)this->string_buf_, size); - return (uint32_t)size; -} - -}}} // apache::thrift::protocol - -#endif // #ifndef _THRIFT_PROTOCOL_TBINARYPROTOCOL_TCC_ diff --git a/thrift/lib/cpp/protocol/TCompactProtocol.h b/thrift/lib/cpp/protocol/TCompactProtocol.h deleted file mode 100644 index ebef272723..0000000000 --- a/thrift/lib/cpp/protocol/TCompactProtocol.h +++ /dev/null @@ -1,313 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TCOMPACTPROTOCOL_H_ -#define THRIFT_PROTOCOL_TCOMPACTPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" - -#include -#include - -namespace apache { namespace thrift { namespace protocol { - -/** - * C++ Implementation of the Compact Protocol as described in THRIFT-110 - */ -template -class TCompactProtocolT - : public TVirtualProtocol< TCompactProtocolT > { - public: - static const int8_t VERSION_N = 2; - static const int8_t VERSION_LOW = 1; - static const int8_t VERSION_DOUBLE_BE = 2; - static const int8_t PROTOCOL_ID = static_cast(0x82); - static const int8_t VERSION_MASK = 0x1f; // 0001 1111 - - protected: - // Normally we can define static const data members of integral - // type here. However there appears to be a gcc issue when the - // high bit is set (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49896) - // unless we cast to a value that fits in an int8_t (0x82 and 0xE0 are - // uint8_t) - - static const int8_t TYPE_MASK = static_cast(0xE0); - static const int32_t TYPE_SHIFT_AMOUNT = 5; - - Transport_* trans_; - - /** - * (Writing) If we encounter a boolean field begin, save the TField here - * so it can have the value incorporated. - */ - struct { - const char* name; - TType fieldType; - int16_t fieldId; - } booleanField_; - - /** - * (Reading) If we read a field header, and it's a boolean field, save - * the boolean value here so that readBool can use it. - */ - struct { - bool hasBoolValue; - bool boolValue; - } boolValue_; - - /** - * Used to keep track of the last field for the current and previous structs, - * so we can do the delta stuff. - */ - - std::stack lastField_; - int16_t lastFieldId_; - int8_t version_; - - public: - explicit TCompactProtocolT(boost::shared_ptr trans) : - TVirtualProtocol< TCompactProtocolT >(trans), - trans_(trans.get()), - lastFieldId_(0), - version_(VERSION_N), - string_limit_(0), - string_buf_(NULL), - string_buf_size_(0), - container_limit_(0) { - booleanField_.name = NULL; - boolValue_.hasBoolValue = false; - } - - TCompactProtocolT(boost::shared_ptr trans, - int32_t string_limit, - int32_t container_limit) : - TVirtualProtocol< TCompactProtocolT >(trans), - trans_(trans.get()), - lastFieldId_(0), - version_(VERSION_N), - string_limit_(string_limit), - string_buf_(NULL), - string_buf_size_(0), - container_limit_(container_limit) { - booleanField_.name = NULL; - boolValue_.hasBoolValue = false; - } - - virtual ~TCompactProtocolT() { - if (string_buf_) { - free(string_buf_); - } - } - - /** Set this if you need backwards compatibility with an old version */ - void setVersion(const int8_t version) { - version_ = version; - } - - /** - * Writing functions - */ - - virtual uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid); - - uint32_t writeStructBegin(const char* name); - - uint32_t writeStructEnd(); - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - uint32_t writeFieldStop(); - - uint32_t writeListBegin(const TType elemType, - const uint32_t size); - - uint32_t writeSetBegin(const TType elemType, - const uint32_t size); - - virtual uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - uint32_t writeBool(const bool value); - - uint32_t writeByte(const int8_t byte); - - uint32_t writeI16(const int16_t i16); - - uint32_t writeI32(const int32_t i32); - - uint32_t writeI64(const int64_t i64); - - uint32_t writeDouble(const double dub); - - uint32_t writeString(const char* str); - - template - uint32_t writeString(const String_& str); - - template - uint32_t writeBinary(const String_& str); - - /** - * These methods are called by structs, but don't actually have any wired - * output or purpose - */ - virtual uint32_t writeMessageEnd() { return 0; } - uint32_t writeMapEnd() { return 0; } - uint32_t writeListEnd() { return 0; } - uint32_t writeSetEnd() { return 0; } - uint32_t writeFieldEnd() { return 0; } - - protected: - int32_t writeFieldBeginInternal(const char* name, - const TType fieldType, - const int16_t fieldId, - int8_t typeOverride); - uint32_t writeCollectionBegin(int8_t elemType, int32_t size); - uint32_t writeVarint32(uint32_t n); - uint32_t writeVarint64(uint64_t n); - uint64_t i64ToZigzag(const int64_t l); - uint32_t i32ToZigzag(const int32_t n); - inline int8_t getCompactType(int8_t ttype); - - public: - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid); - - uint32_t readStructBegin(std::string& name); - - uint32_t readStructEnd(); - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId); - - uint32_t readMapBegin(TType& keyType, - TType& valType, - uint32_t& size); - - uint32_t readListBegin(TType& elemType, - uint32_t& size); - - uint32_t readSetBegin(TType& elemType, - uint32_t& size); - - uint32_t readBool(bool& value); - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol< TCompactProtocolT >::readBool; - - uint32_t readByte(int8_t& byte); - - uint32_t readI16(int16_t& i16); - - uint32_t readI32(int32_t& i32); - - uint32_t readI64(int64_t& i64); - - uint32_t readDouble(double& dub); - - template - uint32_t readString(String_& str); - - template - uint32_t readBinary(String_& str); - - /* - *These methods are here for the struct to call, but don't have any wire - * encoding. - */ - uint32_t readMessageEnd() { return 0; } - uint32_t readFieldEnd() { return 0; } - uint32_t readMapEnd() { return 0; } - uint32_t readListEnd() { return 0; } - uint32_t readSetEnd() { return 0; } - - protected: - uint32_t readVarint32(int32_t& i32); - uint32_t readVarint64(int64_t& i64); - int32_t zigzagToI32(uint32_t n); - int64_t zigzagToI64(uint64_t n); - TType getTType(int8_t type); - - // Buffer for reading strings, save for the lifetime of the protocol to - // avoid memory churn allocating memory on every string read - int32_t string_limit_; - uint8_t* string_buf_; - int32_t string_buf_size_; - int32_t container_limit_; -}; - -typedef TCompactProtocolT TCompactProtocol; - -/** - * Constructs compact protocol handlers - */ -template -class TCompactProtocolFactoryT : public TProtocolFactory { - public: - TCompactProtocolFactoryT() : - string_limit_(0), - container_limit_(0) {} - - TCompactProtocolFactoryT(int32_t string_limit, int32_t container_limit) : - string_limit_(string_limit), - container_limit_(container_limit) {} - - virtual ~TCompactProtocolFactoryT() {} - - void setStringSizeLimit(int32_t string_limit) { - string_limit_ = string_limit; - } - - void setContainerSizeLimit(int32_t container_limit) { - container_limit_ = container_limit; - } - - boost::shared_ptr getProtocol(boost::shared_ptr trans) { - boost::shared_ptr specific_trans = - boost::dynamic_pointer_cast(trans); - TProtocol* prot; - if (specific_trans) { - prot = new TCompactProtocolT(specific_trans, string_limit_, - container_limit_); - } else { - prot = new TCompactProtocol(trans, string_limit_, container_limit_); - } - - return boost::shared_ptr(prot); - } - - private: - int32_t string_limit_; - int32_t container_limit_; - -}; - -typedef TCompactProtocolFactoryT TCompactProtocolFactory; - -}}} // apache::thrift::protocol - -#include "TCompactProtocol.tcc" - -#endif diff --git a/thrift/lib/cpp/protocol/TCompactProtocol.tcc b/thrift/lib/cpp/protocol/TCompactProtocol.tcc deleted file mode 100644 index 3551d69eab..0000000000 --- a/thrift/lib/cpp/protocol/TCompactProtocol.tcc +++ /dev/null @@ -1,820 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_PROTOCOL_TCOMPACTPROTOCOL_TCC_ -#define THRIFT_PROTOCOL_TCOMPACTPROTOCOL_TCC_ 1 - -#include "thrift/lib/cpp/thrift_config.h" -#include "folly/Likely.h" -#include - -/* - * TCompactProtocol::i*ToZigzag depend on the fact that the right shift - * operator on a signed integer is an arithmetic (sign-extending) shift. - * If this is not the case, the current implementation will not work. - * If anyone encounters this error, we can try to figure out the best - * way to implement an arithmetic right shift on their platform. - */ -#if !defined(SIGNED_RIGHT_SHIFT_IS) || !defined(ARITHMETIC_RIGHT_SHIFT) -# error "Unable to determine the behavior of a signed right shift" -#endif -#if SIGNED_RIGHT_SHIFT_IS != ARITHMETIC_RIGHT_SHIFT -# error "TCompactProtocol currently only works if a signed right shift is arithmetic" -#endif - -namespace apache { namespace thrift { namespace protocol { - -namespace detail { namespace compact { - -enum Types { - CT_STOP = 0x00, - CT_BOOLEAN_TRUE = 0x01, - CT_BOOLEAN_FALSE = 0x02, - CT_BYTE = 0x03, - CT_I16 = 0x04, - CT_I32 = 0x05, - CT_I64 = 0x06, - CT_DOUBLE = 0x07, - CT_BINARY = 0x08, - CT_LIST = 0x09, - CT_SET = 0x0A, - CT_MAP = 0x0B, - CT_STRUCT = 0x0C, -}; - -const int8_t TTypeToCType[16] = { - CT_STOP, // T_STOP - 0, // unused - CT_BOOLEAN_TRUE, // T_BOOL - CT_BYTE, // T_BYTE - CT_DOUBLE, // T_DOUBLE - 0, // unused - CT_I16, // T_I16 - 0, // unused - CT_I32, // T_I32 - 0, // unused - CT_I64, // T_I64 - CT_BINARY, // T_STRING - CT_STRUCT, // T_STRUCT - CT_MAP, // T_MAP - CT_SET, // T_SET - CT_LIST, // T_LIST -}; - -}} // end detail::compact namespace - -template -uint32_t TCompactProtocolT::writeMessageBegin( - const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - uint32_t wsize = 0; - wsize += writeByte(PROTOCOL_ID); - wsize += writeByte((version_ & VERSION_MASK) | (((int32_t)messageType << TYPE_SHIFT_AMOUNT) & TYPE_MASK)); - wsize += writeVarint32(seqid); - wsize += writeString(name); - return wsize; -} - -/** - * Write a field header containing the field id and field type. If the - * difference between the current field id and the last one is small (< 15), - * then the field id will be encoded in the 4 MSB as a delta. Otherwise, the - * field id will follow the type header as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId) { - if (fieldType == T_BOOL) { - booleanField_.name = name; - booleanField_.fieldType = fieldType; - booleanField_.fieldId = fieldId; - } else { - return writeFieldBeginInternal(name, fieldType, fieldId, -1); - } - return 0; -} - -/** - * Write the STOP symbol so we know there are no more fields in this struct. - */ -template -uint32_t TCompactProtocolT::writeFieldStop() { - return writeByte(T_STOP); -} - -/** - * Write a struct begin. This doesn't actually put anything on the wire. We - * use it as an opportunity to put special placeholder markers on the field - * stack so we can get the field id deltas correct. - */ -template -uint32_t TCompactProtocolT::writeStructBegin(const char* name) { - lastField_.push(lastFieldId_); - lastFieldId_ = 0; - return 0; -} - -/** - * Write a struct end. This doesn't actually put anything on the wire. We use - * this as an opportunity to pop the last field from the current struct off - * of the field stack. - */ -template -uint32_t TCompactProtocolT::writeStructEnd() { - lastFieldId_ = lastField_.top(); - lastField_.pop(); - return 0; -} - -/** - * Write a List header. - */ -template -uint32_t TCompactProtocolT::writeListBegin(const TType elemType, - const uint32_t size) { - return writeCollectionBegin(elemType, size); -} - -/** - * Write a set header. - */ -template -uint32_t TCompactProtocolT::writeSetBegin(const TType elemType, - const uint32_t size) { - return writeCollectionBegin(elemType, size); -} - -/** - * Write a map header. If the map is empty, omit the key and value type - * headers, as we don't need any additional information to skip it. - */ -template -uint32_t TCompactProtocolT::writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size) { - uint32_t wsize = 0; - - if (size == 0) { - wsize += writeByte(0); - } else { - wsize += writeVarint32(size); - wsize += writeByte(getCompactType(keyType) << 4 | getCompactType(valType)); - } - return wsize; -} - -/** - * Write a boolean value. Potentially, this could be a boolean field, in - * which case the field header info isn't written yet. If so, decide what the - * right type header is for the value and then write the field header. - * Otherwise, write a single byte. - */ -template -uint32_t TCompactProtocolT::writeBool(const bool value) { - uint32_t wsize = 0; - - if (booleanField_.name != NULL) { - // we haven't written the field header yet - wsize += writeFieldBeginInternal(booleanField_.name, - booleanField_.fieldType, - booleanField_.fieldId, - value ? detail::compact::CT_BOOLEAN_TRUE : - detail::compact::CT_BOOLEAN_FALSE); - booleanField_.name = NULL; - } else { - // we're not part of a field, so just write the value - wsize += writeByte(value ? detail::compact::CT_BOOLEAN_TRUE : - detail::compact::CT_BOOLEAN_FALSE); - } - return wsize; -} - -template -uint32_t TCompactProtocolT::writeByte(const int8_t byte) { - trans_->write((uint8_t*)&byte, 1); - return 1; -} - -/** - * Write an i16 as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::writeI16(const int16_t i16) { - return writeVarint32(i32ToZigzag(i16)); -} - -/** - * Write an i32 as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::writeI32(const int32_t i32) { - return writeVarint32(i32ToZigzag(i32)); -} - -/** - * Write an i64 as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::writeI64(const int64_t i64) { - return writeVarint64(i64ToZigzag(i64)); -} - -/** - * Write a double to the wire as 8 bytes. - */ -template -uint32_t TCompactProtocolT::writeDouble(const double dub) { - BOOST_STATIC_ASSERT(sizeof(double) == sizeof(uint64_t)); - BOOST_STATIC_ASSERT(std::numeric_limits::is_iec559); - - uint64_t bits = bitwise_cast(dub); - if (version_ >= VERSION_DOUBLE_BE) { - bits = htonll(bits); - } else { - bits = htolell(bits); - } - trans_->write((uint8_t*)&bits, 8); - return 8; -} - -/** - * Write a string to the wire with a varint size preceding. - */ -template -uint32_t TCompactProtocolT::writeString(const char* str) { - return writeString(std::string(str)); -} - -template -template -uint32_t TCompactProtocolT::writeString(const String_& str) { - return writeBinary(str); -} - -template -template -uint32_t TCompactProtocolT::writeBinary(const String_& str) { - uint32_t ssize = str.size(); - uint32_t wsize = writeVarint32(ssize) + ssize; - trans_->write((uint8_t*)str.data(), ssize); - return wsize; -} - -// -// Internal Writing methods -// - -/** - * The workhorse of writeFieldBegin. It has the option of doing a - * 'type override' of the type header. This is used specifically in the - * boolean field case. - */ -template -int32_t TCompactProtocolT::writeFieldBeginInternal( - const char* name, - const TType fieldType, - const int16_t fieldId, - int8_t typeOverride) { - uint32_t wsize = 0; - - // if there's a type override, use that. - int8_t typeToWrite = (typeOverride == -1 ? getCompactType(fieldType) : typeOverride); - - // check if we can use delta encoding for the field id - if (fieldId > lastFieldId_ && fieldId - lastFieldId_ <= 15) { - // write them together - wsize += writeByte((fieldId - lastFieldId_) << 4 | typeToWrite); - } else { - // write them separate - wsize += writeByte(typeToWrite); - wsize += writeI16(fieldId); - } - - lastFieldId_ = fieldId; - return wsize; -} - -/** - * Abstract method for writing the start of lists and sets. List and sets on - * the wire differ only by the type indicator. - */ -template -uint32_t TCompactProtocolT::writeCollectionBegin(int8_t elemType, - int32_t size) { - uint32_t wsize = 0; - if (size <= 14) { - wsize += writeByte(size << 4 | getCompactType(elemType)); - } else { - wsize += writeByte(0xf0 | getCompactType(elemType)); - wsize += writeVarint32(size); - } - return wsize; -} - -/** - * Write an i32 as a varint. Results in 1-5 bytes on the wire. - */ -template -uint32_t TCompactProtocolT::writeVarint32(uint32_t n) { - uint8_t buf[5]; - uint32_t wsize = 0; - - while (true) { - if ((n & ~0x7F) == 0) { - buf[wsize++] = (int8_t)n; - break; - } else { - buf[wsize++] = (int8_t)((n & 0x7F) | 0x80); - n >>= 7; - } - } - trans_->write(buf, wsize); - return wsize; -} - -/** - * Write an i64 as a varint. Results in 1-10 bytes on the wire. - */ -template -uint32_t TCompactProtocolT::writeVarint64(uint64_t n) { - uint8_t buf[10]; - uint32_t wsize = 0; - - while (true) { - if ((n & ~0x7FL) == 0) { - buf[wsize++] = (int8_t)n; - break; - } else { - buf[wsize++] = (int8_t)((n & 0x7F) | 0x80); - n >>= 7; - } - } - trans_->write(buf, wsize); - return wsize; -} - -/** - * Convert l into a zigzag long. This allows negative numbers to be - * represented compactly as a varint. - */ -template -uint64_t TCompactProtocolT::i64ToZigzag(const int64_t l) { - return (l << 1) ^ (l >> 63); -} - -/** - * Convert n into a zigzag int. This allows negative numbers to be - * represented compactly as a varint. - */ -template -uint32_t TCompactProtocolT::i32ToZigzag(const int32_t n) { - return (n << 1) ^ (n >> 31); -} - -/** - * Given a TType value, find the appropriate detail::compact::Types value - */ -template -int8_t TCompactProtocolT::getCompactType(int8_t ttype) { - return detail::compact::TTypeToCType[ttype]; -} - -// -// Reading Methods -// - -/** - * Read a message header. - */ -template -uint32_t TCompactProtocolT::readMessageBegin( - std::string& name, - TMessageType& messageType, - int32_t& seqid) { - uint32_t rsize = 0; - int8_t protocolId; - int8_t versionAndType; - - rsize += readByte(protocolId); - if (protocolId != PROTOCOL_ID) { - throw TProtocolException(TProtocolException::BAD_VERSION, "Bad protocol identifier"); - } - - rsize += readByte(versionAndType); - version_ = (int8_t)(versionAndType & VERSION_MASK); - if (!(version_ <= VERSION_N && version_ >= VERSION_LOW)) { - throw TProtocolException(TProtocolException::BAD_VERSION, "Bad protocol version"); - } - - messageType = (TMessageType)((versionAndType >> TYPE_SHIFT_AMOUNT) & 0x03); - rsize += readVarint32(seqid); - rsize += readString(name); - - return rsize; -} - -/** - * Read a struct begin. There's nothing on the wire for this, but it is our - * opportunity to push a new struct begin marker on the field stack. - */ -template -uint32_t TCompactProtocolT::readStructBegin(std::string& name) { - name = ""; - lastField_.push(lastFieldId_); - lastFieldId_ = 0; - return 0; -} - -/** - * Doesn't actually consume any wire data, just removes the last field for - * this struct from the field stack. - */ -template -uint32_t TCompactProtocolT::readStructEnd() { - lastFieldId_ = lastField_.top(); - lastField_.pop(); - return 0; -} - -/** - * Read a field header off the wire. - */ -template -uint32_t TCompactProtocolT::readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - uint32_t rsize = 0; - int8_t byte; - int8_t type; - - rsize += readByte(byte); - type = (byte & 0x0f); - - // if it's a stop, then we can return immediately, as the struct is over. - if (type == T_STOP) { - fieldType = T_STOP; - fieldId = 0; - return rsize; - } - - // mask off the 4 MSB of the type header. it could contain a field id delta. - int16_t modifier = (int16_t)(((uint8_t)byte & 0xf0) >> 4); - if (modifier == 0) { - // not a delta, look ahead for the zigzag varint field id. - rsize += readI16(fieldId); - } else { - fieldId = (int16_t)(lastFieldId_ + modifier); - } - fieldType = getTType(type); - - // if this happens to be a boolean field, the value is encoded in the type - if (type == detail::compact::CT_BOOLEAN_TRUE || - type == detail::compact::CT_BOOLEAN_FALSE) { - // save the boolean value in a special instance variable. - boolValue_.hasBoolValue = true; - boolValue_.boolValue = - (type == detail::compact::CT_BOOLEAN_TRUE ? true : false); - } - - // push the new field onto the field stack so we can keep the deltas going. - lastFieldId_ = fieldId; - return rsize; -} - -/** - * Read a map header off the wire. If the size is zero, skip reading the key - * and value type. This means that 0-length maps will yield TMaps without the - * "correct" types. - */ -template -uint32_t TCompactProtocolT::readMapBegin(TType& keyType, - TType& valType, - uint32_t& size) { - uint32_t rsize = 0; - int8_t kvType = 0; - int32_t msize = 0; - - rsize += readVarint32(msize); - if (msize != 0) - rsize += readByte(kvType); - - if (msize < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } else if (container_limit_ && msize > container_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - - keyType = getTType((int8_t)((uint8_t)kvType >> 4)); - valType = getTType((int8_t)((uint8_t)kvType & 0xf)); - size = (uint32_t)msize; - - return rsize; -} - -/** - * Read a list header off the wire. If the list size is 0-14, the size will - * be packed into the element type header. If it's a longer list, the 4 MSB - * of the element type header will be 0xF, and a varint will follow with the - * true size. - */ -template -uint32_t TCompactProtocolT::readListBegin(TType& elemType, - uint32_t& size) { - int8_t size_and_type; - uint32_t rsize = 0; - int32_t lsize; - - rsize += readByte(size_and_type); - - lsize = ((uint8_t)size_and_type >> 4) & 0x0f; - if (lsize == 15) { - rsize += readVarint32(lsize); - } - - if (lsize < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } else if (container_limit_ && lsize > container_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - - elemType = getTType((int8_t)(size_and_type & 0x0f)); - size = (uint32_t)lsize; - - return rsize; -} - -/** - * Read a set header off the wire. If the set size is 0-14, the size will - * be packed into the element type header. If it's a longer set, the 4 MSB - * of the element type header will be 0xF, and a varint will follow with the - * true size. - */ -template -uint32_t TCompactProtocolT::readSetBegin(TType& elemType, - uint32_t& size) { - return readListBegin(elemType, size); -} - -/** - * Read a boolean off the wire. If this is a boolean field, the value should - * already have been read during readFieldBegin, so we'll just consume the - * pre-stored value. Otherwise, read a byte. - */ -template -uint32_t TCompactProtocolT::readBool(bool& value) { - if (boolValue_.hasBoolValue == true) { - value = boolValue_.boolValue; - boolValue_.hasBoolValue = false; - return 0; - } else { - int8_t val; - readByte(val); - value = (val == detail::compact::CT_BOOLEAN_TRUE); - return 1; - } -} - -/** - * Read a single byte off the wire. Nothing interesting here. - */ -template -uint32_t TCompactProtocolT::readByte(int8_t& byte) { - uint8_t b[1]; - trans_->readAll(b, 1); - byte = *(int8_t*)b; - return 1; -} - -/** - * Read an i16 from the wire as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::readI16(int16_t& i16) { - int32_t value; - uint32_t rsize = readVarint32(value); - i16 = (int16_t)zigzagToI32(value); - return rsize; -} - -/** - * Read an i32 from the wire as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::readI32(int32_t& i32) { - int32_t value; - uint32_t rsize = readVarint32(value); - i32 = zigzagToI32(value); - return rsize; -} - -/** - * Read an i64 from the wire as a zigzag varint. - */ -template -uint32_t TCompactProtocolT::readI64(int64_t& i64) { - int64_t value; - uint32_t rsize = readVarint64(value); - i64 = zigzagToI64(value); - return rsize; -} - -/** - * No magic here - just read a double off the wire. - */ -template -uint32_t TCompactProtocolT::readDouble(double& dub) { - BOOST_STATIC_ASSERT(sizeof(double) == sizeof(uint64_t)); - BOOST_STATIC_ASSERT(std::numeric_limits::is_iec559); - - union { - uint64_t bits; - uint8_t b[8]; - } u; - trans_->readAll(u.b, 8); - if (version_ >= VERSION_DOUBLE_BE) { - u.bits = ntohll(u.bits); - } else { - u.bits = letohll(u.bits); - } - dub = bitwise_cast(u.bits); - return 8; -} - -template -template -uint32_t TCompactProtocolT::readString(String_& str) { - return readBinary(str); -} - -/** - * Read a byte[] from the wire. - */ -template -template -uint32_t TCompactProtocolT::readBinary(String_& str) { - int32_t rsize = 0; - int32_t size; - - rsize += readVarint32(size); - // Catch empty string case - if (size == 0) { - str = ""; - return rsize; - } - - // Catch error cases - if (size < 0) { - throw TProtocolException(TProtocolException::NEGATIVE_SIZE); - } - if (string_limit_ > 0 && size > string_limit_) { - throw TProtocolException(TProtocolException::SIZE_LIMIT); - } - - // Use the heap here to prevent stack overflow for v. large strings - if (size > string_buf_size_ || string_buf_ == NULL) { - void* new_string_buf = std::realloc(string_buf_, (uint32_t)size); - if (new_string_buf == NULL) { - throw std::bad_alloc(); - } - string_buf_ = (uint8_t*)new_string_buf; - string_buf_size_ = size; - } - trans_->readAll(string_buf_, size); - str.assign((char*)string_buf_, size); - - return rsize + (uint32_t)size; -} - -/** - * Read an i32 from the wire as a varint. The MSB of each byte is set - * if there is another byte to follow. This can read up to 5 bytes. - */ -template -uint32_t TCompactProtocolT::readVarint32(int32_t& i32) { - int64_t val; - uint32_t rsize = readVarint64(val); - i32 = (int32_t)val; - return rsize; -} - -/** - * Read an i64 from the wire as a proper varint. The MSB of each byte is set - * if there is another byte to follow. This can read up to 10 bytes. - */ -template -uint32_t TCompactProtocolT::readVarint64(int64_t& i64) { - uint32_t rsize = 0; - uint64_t val = 0; - int shift = 0; - uint8_t buf[10]; // 64 bits / (7 bits/byte) = 10 bytes. - uint32_t buf_size = sizeof(buf); - const uint8_t* borrowed = trans_->borrow(buf, &buf_size); - - // Fast path. - if (borrowed != NULL) { - while (true) { - uint8_t byte = borrowed[rsize]; - rsize++; - val |= (uint64_t)(byte & 0x7f) << shift; - shift += 7; - if (!(byte & 0x80)) { - i64 = val; - trans_->consume(rsize); - return rsize; - } - // Have to check for invalid data so we don't crash. - if (UNLIKELY(rsize == sizeof(buf))) { - throw TProtocolException(TProtocolException::INVALID_DATA, "Variable-length int over 10 bytes."); - } - } - } - - // Slow path. - else { - while (true) { - uint8_t byte; - rsize += trans_->readAll(&byte, 1); - val |= (uint64_t)(byte & 0x7f) << shift; - shift += 7; - if (!(byte & 0x80)) { - i64 = val; - return rsize; - } - // Might as well check for invalid data on the slow path too. - if (UNLIKELY(rsize >= sizeof(buf))) { - throw TProtocolException(TProtocolException::INVALID_DATA, "Variable-length int over 10 bytes."); - } - } - } -} - -/** - * Convert from zigzag int to int. - */ -template -int32_t TCompactProtocolT::zigzagToI32(uint32_t n) { - return (n >> 1) ^ -(n & 1); -} - -/** - * Convert from zigzag long to long. - */ -template -int64_t TCompactProtocolT::zigzagToI64(uint64_t n) { - return (n >> 1) ^ -(n & 1); -} - -template -TType TCompactProtocolT::getTType(int8_t type) { - switch (type) { - case T_STOP: - return T_STOP; - case detail::compact::CT_BOOLEAN_FALSE: - case detail::compact::CT_BOOLEAN_TRUE: - return T_BOOL; - case detail::compact::CT_BYTE: - return T_BYTE; - case detail::compact::CT_I16: - return T_I16; - case detail::compact::CT_I32: - return T_I32; - case detail::compact::CT_I64: - return T_I64; - case detail::compact::CT_DOUBLE: - return T_DOUBLE; - case detail::compact::CT_BINARY: - return T_STRING; - case detail::compact::CT_LIST: - return T_LIST; - case detail::compact::CT_SET: - return T_SET; - case detail::compact::CT_MAP: - return T_MAP; - case detail::compact::CT_STRUCT: - return T_STRUCT; - default: - throw TLibraryException("don't know what type: " + type); - } - return T_STOP; -} - -}}} // apache::thrift::protocol - -#endif // THRIFT_PROTOCOL_TCOMPACTPROTOCOL_TCC_ diff --git a/thrift/lib/cpp/protocol/TDebugProtocol.h b/thrift/lib/cpp/protocol/TDebugProtocol.h deleted file mode 100644 index 236f9b86e1..0000000000 --- a/thrift/lib/cpp/protocol/TDebugProtocol.h +++ /dev/null @@ -1,360 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TDEBUGPROTOCOL_H -#define THRIFT_PROTOCOL_TDEBUGPROTOCOL_H - -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" - -#include - -namespace apache { namespace thrift { namespace protocol { - -/* - -!!! EXPERIMENTAL CODE !!! - -This protocol is very much a work in progress. -It doesn't handle many cases properly. -It throws exceptions in many cases. -It probably segfaults in many cases. -Bug reports and feature requests are welcome. -Complaints are not. :R - -*/ - - -/** - * Protocol that prints the payload in a nice human-readable format. - * Reading from this protocol is not supported. - * - */ -class TDebugProtocol : public TVirtualProtocol { - private: - enum write_state_t - { UNINIT - , STRUCT - , LIST - , SET - , MAP_KEY - , MAP_VALUE - }; - - public: - TDebugProtocol(boost::shared_ptr trans) - : TVirtualProtocol(trans) - , trans_(trans.get()) - , string_limit_(DEFAULT_STRING_LIMIT) - , string_prefix_size_(DEFAULT_STRING_PREFIX_SIZE) - { - write_state_.push_back(UNINIT); - } - - static const int32_t DEFAULT_STRING_LIMIT = 256; - static const int32_t DEFAULT_STRING_PREFIX_SIZE = 16; - - void setStringSizeLimit(int32_t string_limit) { - string_limit_ = string_limit; - } - - void setStringPrefixSize(int32_t string_prefix_size) { - string_prefix_size_ = string_prefix_size; - } - - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid); - - uint32_t writeMessageEnd(); - - - uint32_t writeStructBegin(const char* name); - - uint32_t writeStructEnd(); - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - uint32_t writeFieldEnd(); - - uint32_t writeFieldStop(); - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - uint32_t writeMapEnd(); - - uint32_t writeListBegin(const TType elemType, - const uint32_t size); - - uint32_t writeListEnd(); - - uint32_t writeSetBegin(const TType elemType, - const uint32_t size); - - uint32_t writeSetEnd(); - - uint32_t writeBool(const bool value); - - uint32_t writeByte(const int8_t byte); - - uint32_t writeI16(const int16_t i16); - - uint32_t writeI32(const int32_t i32); - - uint32_t writeI64(const int64_t i64); - - uint32_t writeDouble(const double dub); - - uint32_t writeString(const std::string& str); - - template - uint32_t writeString(const StrType& str) { - return writeString(std::string(str.data(), str.size())); - } - - uint32_t writeBinary(const std::string& str); - - - private: - void indentUp(); - void indentDown(); - uint32_t writePlain(const std::string& str); - uint32_t writeIndented(const std::string& str); - uint32_t startItem(); - uint32_t endItem(); - uint32_t writeItem(const std::string& str); - - static std::string fieldTypeName(TType type); - - TTransport* trans_; - - int32_t string_limit_; - int32_t string_prefix_size_; - - std::string indent_str_; - static const int indent_inc = 2; - - std::vector write_state_; - std::vector list_idx_; -}; - -/** - * Constructs debug protocol handlers - */ -class TDebugProtocolFactory : public TProtocolFactory { - public: - TDebugProtocolFactory() {} - virtual ~TDebugProtocolFactory() {} - - boost::shared_ptr getProtocol(boost::shared_ptr trans) { - return boost::shared_ptr(new TDebugProtocol(trans)); - } - -}; - -}}} // apache::thrift::protocol - - -// TODO(dreiss): Move (part of) ThriftDebugString into a .cpp file and remove this. -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -namespace apache { namespace thrift { - -template -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::TType(99); -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_BOOL; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_I08; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_I16; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_I32; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_I64; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_DOUBLE; -}; - -template<> -struct ThriftTypeTraits { - static const apache::thrift::protocol::TType fieldType_ = - apache::thrift::protocol::T_STRING; -}; - -class TDebugProtocolEx : public apache::thrift::protocol::TDebugProtocol { -public: - TDebugProtocolEx( - boost::shared_ptr trans - ) - : TDebugProtocol(trans) { - } - - template - void write(const T& t) { - t.write(this); - } - - template - void write(const std::vector& c) { - writeListBegin(ThriftTypeTraits::fieldType_, c.size()); - typeof(c.begin()) it = c.begin(); - for (; it != c.end(); it++) { - write(*it); - } - writeListEnd(); - } - - template - void write(const std::map& c) { - writeMapBegin( - ThriftTypeTraits::fieldType_, - ThriftTypeTraits::fieldType_, - c.size() - ); - typeof(c.begin()) it = c.begin(); - for (; it != c.end(); it++) { - write(it->first); - write(it->second); - } - writeMapEnd(); - } - - template - void write(const std::multimap& c) { - writeMapBegin( - ThriftTypeTraits::fieldType_, - ThriftTypeTraits::fieldType_, - c.size() - ); - typeof(c.begin()) it = c.begin(); - for (; it != c.end(); it++) { - write(it->first); - write(it->second); - } - writeMapEnd(); - } - - - template - void write(const std::set& c) { - writeSetBegin( - ThriftTypeTraits::fieldType_, - c.size() - ); - typeof(c.begin()) it = c.begin(); - for (; it != c.end(); it++) { - write(*it); - } - writeSetEnd(); - } - - void write(const bool value) { - writeBool(value); - } - - void write(const int8_t byte) { - writeByte(byte); - } - - void write(const int16_t i16) { - writeI16(i16); - } - - void write(const int32_t i32) { - writeI32(i32); - } - - void write(const int64_t i64) { - writeI64(i64); - } - - void write(const double dub) { - writeDouble(dub); - } - - void write(const std::string& str) { - writeString(str); - } - - template - void write(const std::pair& p) { - writeStructBegin("pair"); - writeFieldBegin("first", ThriftTypeTraits::fieldType_, 1); - write(p.first); - writeFieldEnd(); - writeFieldBegin("second", ThriftTypeTraits::fieldType_, 2); - write(p.second); - writeFieldEnd(); - writeStructEnd(); - } -}; - -template -std::string ThriftDebugString(const T& ts) { - using namespace apache::thrift::transport; - using namespace apache::thrift::protocol; - TMemoryBuffer* buffer = new TMemoryBuffer; - boost::shared_ptr trans(buffer); - TDebugProtocolEx protocol(trans); - - protocol.write(ts); - - uint8_t* buf; - uint32_t size; - buffer->getBuffer(&buf, &size); - return std::string((char*)buf, (unsigned int)size); -} - -}} // apache::thrift - - -#endif // #ifndef _THRIFT_PROTOCOL_TDEBUGPROTOCOL_H_ - - diff --git a/thrift/lib/cpp/protocol/THeaderProtocol.h b/thrift/lib/cpp/protocol/THeaderProtocol.h deleted file mode 100644 index 1ab4656ef1..0000000000 --- a/thrift/lib/cpp/protocol/THeaderProtocol.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_THEADERPROTOCOL_H_ -#define THRIFT_PROTOCOL_THEADERPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/protocol/TProtocolTypes.h" -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" -#include "thrift/lib/cpp/transport/THeaderTransport.h" -#include "thrift/lib/cpp/util/shared_ptr_util.h" - -#include - -#include - -using apache::thrift::transport::THeaderTransport; -using apache::thrift::transport::TTransportPair; - -namespace apache { namespace thrift { namespace protocol { - -/** - * The header protocol for thrift. Reads unframed, framed, header format, - * and http - * - */ -class THeaderProtocol - : public TVirtualProtocol { - public: - explicit THeaderProtocol(const boost::shared_ptr& trans, - std::bitset* clientTypes = NULL, - uint16_t protoId = T_COMPACT_PROTOCOL) : - TVirtualProtocol(getTransportWrapper(trans, - clientTypes)) - , trans_(boost::dynamic_pointer_cast( - this->getTransport())) - , protoId_(protoId) - { - trans_->setProtocolId(protoId); - resetProtocol(); - } - - THeaderProtocol(const boost::shared_ptr& inTrans, - const boost::shared_ptr& outTrans, - std::bitset* clientTypes = NULL, - uint16_t protoId = T_COMPACT_PROTOCOL) : - TVirtualProtocol(getInOutTransportWrapper(inTrans, - outTrans, - clientTypes)) - , trans_(boost::dynamic_pointer_cast( - this->getTransport())) - , protoId_(protoId) - { - trans_->setProtocolId(protoId); - resetProtocol(); - } - - /** - * Construct a THeaderProtocol using a raw pointer to the transport. - * - * The caller is responsible for ensuring that the transport remains valid - * for the lifetime of the protocol. - */ - THeaderProtocol(TTransport* trans, - std::bitset* clientTypes, - uint16_t protoId = T_COMPACT_PROTOCOL) : - TVirtualProtocol( - getTransportWrapper( - boost::shared_ptr(trans, - NoopPtrDestructor()), - clientTypes)) - , trans_(boost::dynamic_pointer_cast( - this->getTransport())) - , protoId_(protoId) - { - trans_->setProtocolId(protoId); - resetProtocol(); - } - - ~THeaderProtocol() {} - - /** - * Functions to work with headers by calling into THeaderTransport - */ - void setProtocolId(uint16_t protoId) { - trans_->setProtocolId(protoId); - resetProtocol(); - } - - void resetProtocol(); - - typedef THeaderTransport::StringToStringMap StringToStringMap; - - // these work with write headers - void setHeader(const std::string& key, const std::string& value) { - trans_->setHeader(key, value); - } - - void setPersistentHeader(const std::string& key, const std::string& value) { - trans_->setPersistentHeader(key, value); - } - - void clearHeaders() { - trans_->clearHeaders(); - } - - void clearPersistentHeaders() { - trans_->clearPersistentHeaders(); - } - - StringToStringMap& getWriteHeaders() { - return trans_->getWriteHeaders(); - } - - StringToStringMap& getPersistentWriteHeaders() { - return trans_->getPersistentWriteHeaders(); - } - - // these work with read headers - const StringToStringMap& getHeaders() const { - return trans_->getHeaders(); - } - - void setTransform(uint16_t trans) { - trans_->setTransform(trans); - } - - std::string getPeerIdentity() const { - return trans_->getPeerIdentity(); - } - void setIdentity(const std::string& identity) { - trans_->setIdentity(identity); - } - - void setHmac(THeaderTransport::MacCallback macCb, - THeaderTransport::VerifyMacCallback verifyCb) { - trans_->setHmac(macCb, verifyCb); - } - - /** - * Writing functions. - */ - - /*ol*/ uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqId); - - /*ol*/ uint32_t writeMessageEnd(); - - - uint32_t writeStructBegin(const char* name); - - uint32_t writeStructEnd(); - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - uint32_t writeFieldEnd(); - - uint32_t writeFieldStop(); - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - uint32_t writeMapEnd(); - - uint32_t writeListBegin(const TType elemType, const uint32_t size); - - uint32_t writeListEnd(); - - uint32_t writeSetBegin(const TType elemType, const uint32_t size); - - uint32_t writeSetEnd(); - - uint32_t writeBool(const bool value); - - uint32_t writeByte(const int8_t byte); - - uint32_t writeI16(const int16_t i16); - - uint32_t writeI32(const int32_t i32); - - uint32_t writeI64(const int64_t i64); - - uint32_t writeDouble(const double dub); - - template - uint32_t writeString(const StrType& str) { - return proto_->writeString(str); - } - - uint32_t writeBinary(const std::string& str); - - /** - * Reading functions - */ - - - /*ol*/ uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqId); - - /*ol*/ uint32_t readMessageEnd(); - - uint32_t readStructBegin(std::string& name); - - uint32_t readStructEnd(); - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId); - - uint32_t readFieldEnd(); - - uint32_t readMapBegin(TType& keyType, - TType& valType, - uint32_t& size); - - uint32_t readMapEnd(); - - uint32_t readListBegin(TType& elemType, uint32_t& size); - - uint32_t readListEnd(); - - uint32_t readSetBegin(TType& elemType, uint32_t& size); - - uint32_t readSetEnd(); - - uint32_t readBool(bool& value); - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol< THeaderProtocol >::readBool; - - uint32_t readByte(int8_t& byte); - - uint32_t readI16(int16_t& i16); - - uint32_t readI32(int32_t& i32); - - uint32_t readI64(int64_t& i64); - - uint32_t readDouble(double& dub); - - template - uint32_t readString(StrType& str) { - return proto_->readString(str); - } - - uint32_t readBinary(std::string& binary); - - protected: - template - uint32_t readStringBody(StrType& str, int32_t sz); - - boost::shared_ptr getTransportWrapper( - const boost::shared_ptr& trans, - std::bitset* clientTypes) { - if (dynamic_cast(trans.get()) != NULL) { - return trans; - } else { - return boost::shared_ptr( - new THeaderTransport(trans, clientTypes)); - } - } - - boost::shared_ptr getInOutTransportWrapper( - const boost::shared_ptr& inTrans, - const boost::shared_ptr& outTrans, - std::bitset* clientTypes) { - assert(dynamic_cast(inTrans.get()) == NULL - && dynamic_cast(outTrans.get()) == NULL); - - return boost::shared_ptr( - new THeaderTransport(inTrans, outTrans, clientTypes) - ); - } - - boost::shared_ptr trans_; - - boost::shared_ptr proto_; - uint32_t protoId_; -}; - -/** - * Constructs header protocol handlers - */ -class THeaderProtocolFactory : public TDuplexProtocolFactory { - public: - explicit THeaderProtocolFactory(uint16_t protoId = T_COMPACT_PROTOCOL, - bool disableIdentity = false) { - protoId_ = protoId; - setIdentity_ = disableIdentity; - } - - virtual ~THeaderProtocolFactory() {} - - void setClientTypes(std::bitset& clientTypes) { - for (int i = 0; i < CLIENT_TYPES_LEN; i++) { - this->clientTypes[i] = clientTypes[i]; - } - } - - void setIdentity(const std::string& identity) { - identity_ = identity; - setIdentity_ = true; - } - - void setTransform(uint16_t trans) { - trans_.push_back(trans); - } - - virtual TProtocolPair getProtocol( - boost::shared_ptr trans) { - THeaderProtocol* prot = new THeaderProtocol(trans, &clientTypes, protoId_); - - if(setIdentity_) { - prot->setIdentity(identity_); - } - - for (auto& t : trans_) { - prot->setTransform(t); - } - - boost::shared_ptr pprot(prot); - return TProtocolPair(pprot, pprot); - } - - virtual TProtocolPair getProtocol(TTransportPair transports) { - THeaderProtocol* prot = new THeaderProtocol(transports.first, - transports.second, - &clientTypes, - protoId_); - - if(setIdentity_) { - prot->setIdentity(identity_); - } - - for (auto& t : trans_) { - prot->setTransform(t); - } - - boost::shared_ptr pprot(prot); - return TProtocolPair(pprot, pprot); - } - - // No implementation of getInputProtocolFactory/getOutputProtocolFactory - // Using base class implementation which return NULL. - - private: - std::bitset clientTypes; - uint16_t protoId_; - bool setIdentity_; - std::vector trans_; - std::string identity_; -}; - -}}} // apache::thrift::protocol - -#endif // #ifndef THRIFT_PROTOCOL_THEADERPROTOCOL_H_ diff --git a/thrift/lib/cpp/protocol/TJSONProtocol.h b/thrift/lib/cpp/protocol/TJSONProtocol.h deleted file mode 100644 index 71ca8e8771..0000000000 --- a/thrift/lib/cpp/protocol/TJSONProtocol.h +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TJSONPROTOCOL_H_ -#define THRIFT_PROTOCOL_TJSONPROTOCOL_H_ 1 - -#include "TVirtualProtocol.h" - -#include - -namespace apache { namespace thrift { namespace protocol { - -// Forward declaration -class TJSONContext; - -/** - * JSON protocol for Thrift. - * - * Implements a protocol which uses JSON as the wire-format. - * - * Thrift types are represented as described below: - * - * 1. Every Thrift integer type is represented as a JSON number. - * - * 2. Thrift doubles are represented as JSON numbers. Some special values are - * represented as strings: - * a. "NaN" for not-a-number values - * b. "Infinity" for positive infinity - * c. "-Infinity" for negative infinity - * - * 3. Thrift string values are emitted as JSON strings, with appropriate - * escaping. - * - * 4. Thrift binary values are encoded into Base64 and emitted as JSON strings. - * The readBinary() method is written such that it will properly skip if - * called on a Thrift string (although it will decode garbage data). - * - * 5. Thrift structs are represented as JSON objects, with the field ID as the - * key, and the field value represented as a JSON object with a single - * key-value pair. The key is a short string identifier for that type, - * followed by the value. The valid type identifiers are: "tf" for bool, - * "i8" for byte, "i16" for 16-bit integer, "i32" for 32-bit integer, "i64" - * for 64-bit integer, "dbl" for double-precision floating point, "str" for - * string (including binary), "rec" for struct ("records"), "map" for map, - * "lst" for list, "set" for set. - * - * 6. Thrift lists and sets are represented as JSON arrays, with the first - * element of the JSON array being the string identifier for the Thrift - * element type and the second element of the JSON array being the count of - * the Thrift elements. The Thrift elements then follow. - * - * 7. Thrift maps are represented as JSON arrays, with the first two elements - * of the JSON array being the string identifiers for the Thrift key type - * and value type, followed by the count of the Thrift pairs, followed by a - * JSON object containing the key-value pairs. Note that JSON keys can only - * be strings, which means that the key type of the Thrift map should be - * restricted to numeric or string types -- in the case of numerics, they - * are serialized as strings. - * - * 8. Thrift messages are represented as JSON arrays, with the protocol - * version #, the message name, the message type, and the sequence ID as - * the first 4 elements. - * - * More discussion of the double handling is probably warranted. The aim of - * the current implementation is to match as closely as possible the behavior - * of Java's Double.toString(), which has no precision loss. Implementors in - * other languages should strive to achieve that where possible. I have not - * yet verified whether boost:lexical_cast, which is doing that work for me in - * C++, loses any precision, but I am leaving this as a future improvement. I - * may try to provide a C component for this, so that other languages could - * bind to the same underlying implementation for maximum consistency. - * - * Note further that JavaScript itself is not capable of representing - * floating point infinities -- presumably when we have a JavaScript Thrift - * client, this would mean that infinities get converted to not-a-number in - * transmission. I don't know of any work-around for this issue. - * - */ -class TJSONProtocol : public TVirtualProtocol { - public: - - TJSONProtocol(boost::shared_ptr ptrans); - - ~TJSONProtocol(); - - private: - - void pushContext(boost::shared_ptr c); - - void popContext(); - - protected: - - uint32_t writeJSONEscapeChar(uint8_t ch); - - uint32_t writeJSONChar(uint8_t ch); - - uint32_t writeJSONString(const std::string &str); - - uint32_t writeJSONBase64(const std::string &str); - - template - uint32_t writeJSONInteger(NumberType num); - - uint32_t writeJSONBool(bool value); - - uint32_t writeJSONDouble(double num); - - uint32_t writeJSONObjectStart() ; - - uint32_t writeJSONObjectEnd(); - - uint32_t writeJSONArrayStart(); - - uint32_t writeJSONArrayEnd(); - - uint32_t readJSONSyntaxChar(uint8_t ch); - - uint32_t readJSONEscapeChar(uint8_t *out); - - uint32_t readJSONString(std::string &str, bool skipContext = false); - - uint32_t readJSONBase64(std::string &str); - - uint32_t readJSONNumericChars(std::string &str); - - template - uint32_t readJSONInteger(NumberType &num); - - uint32_t readJSONDouble(double &num); - - uint32_t readJSONObjectStart(); - - uint32_t readJSONObjectEnd(); - - uint32_t readJSONArrayStart(); - - uint32_t readJSONArrayEnd(); - - public: - - /** - * Writing functions. - */ - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid); - - uint32_t writeMessageEnd(); - - uint32_t writeStructBegin(const char* name); - - uint32_t writeStructEnd(); - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - uint32_t writeFieldEnd(); - - uint32_t writeFieldStop(); - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - uint32_t writeMapEnd(); - - uint32_t writeListBegin(const TType elemType, - const uint32_t size); - - uint32_t writeListEnd(); - - uint32_t writeSetBegin(const TType elemType, - const uint32_t size); - - uint32_t writeSetEnd(); - - uint32_t writeBool(const bool value); - - uint32_t writeByte(const int8_t byte); - - uint32_t writeI16(const int16_t i16); - - uint32_t writeI32(const int32_t i32); - - uint32_t writeI64(const int64_t i64); - - uint32_t writeDouble(const double dub); - - uint32_t writeString(const std::string& str); - - uint32_t writeBinary(const std::string& str); - - /** - * Reading functions - */ - - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid); - - uint32_t readMessageEnd(); - - uint32_t readStructBegin(std::string& name); - - uint32_t readStructEnd(); - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId); - - uint32_t readFieldEnd(); - - uint32_t readMapBegin(TType& keyType, - TType& valType, - uint32_t& size); - - uint32_t readMapEnd(); - - uint32_t readListBegin(TType& elemType, - uint32_t& size); - - uint32_t readListEnd(); - - uint32_t readSetBegin(TType& elemType, - uint32_t& size); - - uint32_t readSetEnd(); - - uint32_t readBool(bool& value); - - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol::readBool; - - uint32_t readByte(int8_t& byte); - - uint32_t readI16(int16_t& i16); - - uint32_t readI32(int32_t& i32); - - uint32_t readI64(int64_t& i64); - - uint32_t readDouble(double& dub); - - uint32_t readString(std::string& str); - - uint32_t readBinary(std::string& str); - - class LookaheadReader { - - public: - - LookaheadReader(TTransport &trans) : - trans_(&trans), - hasData_(false) { - } - - uint8_t read() { - if (hasData_) { - hasData_ = false; - } - else { - trans_->readAll(&data_, 1); - } - return data_; - } - - uint8_t peek() { - if (!hasData_) { - trans_->readAll(&data_, 1); - } - hasData_ = true; - return data_; - } - - private: - TTransport *trans_; - bool hasData_; - uint8_t data_; - }; - - private: - TTransport* trans_; - - std::stack > contexts_; - boost::shared_ptr context_; - LookaheadReader reader_; -}; - -/** - * Constructs input and output protocol objects given transports. - */ -class TJSONProtocolFactory : public TProtocolFactory { - public: - TJSONProtocolFactory() {} - - virtual ~TJSONProtocolFactory() {} - - boost::shared_ptr getProtocol(boost::shared_ptr trans) { - return boost::shared_ptr(new TJSONProtocol(trans)); - } -}; - -}}} // apache::thrift::protocol - - -// TODO(dreiss): Move part of ThriftJSONString into a .cpp file and remove this. -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -/*namespace apache { namespace thrift { - -template - std::string ThriftJSONString(const ThriftStruct& ts) { - using namespace apache::thrift::transport; - using namespace apache::thrift::protocol; - TMemoryBuffer* buffer = new TMemoryBuffer; - boost::shared_ptr trans(buffer); - TJSONProtocol protocol(trans); - - ts.write(&protocol); - - uint8_t* buf; - uint32_t size; - buffer->getBuffer(&buf, &size); - return std::string((char*)buf, (unsigned int)size); -} - -}} // apache::thrift -*/ -#endif // #define THRIFT_PROTOCOL_TJSONPROTOCOL_H_ 1 diff --git a/thrift/lib/cpp/protocol/TNeutroniumProtocol.h b/thrift/lib/cpp/protocol/TNeutroniumProtocol.h deleted file mode 100644 index dfeae1e4a1..0000000000 --- a/thrift/lib/cpp/protocol/TNeutroniumProtocol.h +++ /dev/null @@ -1,287 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_TNEUTRONIUMPROTOCOL_H_ -#define THRIFT_LIB_CPP_PROTOCOL_TNEUTRONIUMPROTOCOL_H_ - -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" -#include "thrift/lib/cpp/protocol/neutronium/Encoder.h" -#include "thrift/lib/cpp/protocol/neutronium/Decoder.h" - -namespace apache { namespace thrift { namespace protocol { - -class TNeutroniumProtocol - : public TVirtualProtocol { - - public: - TNeutroniumProtocol(const neutronium::Schema* schema, - neutronium::InternTable* internTable, - folly::IOBuf* buf) - : TVirtualProtocol(nullptr), - enc_(schema, internTable, buf), - dec_(schema, internTable, buf) { - } - - void setRootType(int64_t rootType) { - enc_.setRootType(rootType); - dec_.setRootType(rootType); - } - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - LOG(FATAL) << "Message encoding / decoding not implemented"; - } - - uint32_t writeMessageEnd() { - LOG(FATAL) << "Message encoding / decoding not implemented"; - } - - uint32_t writeStructBegin(const char* name) { - enc_.writeStructBegin(name); - return 0; - } - - uint32_t writeStructEnd() { - enc_.writeStructEnd(); - return enc_.bytesWritten(); - } - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId) { - enc_.writeFieldBegin(name, fieldType, fieldId); - return 0; - } - - uint32_t writeFieldEnd() { - enc_.writeFieldEnd(); - return 0; - } - - uint32_t writeFieldStop() { - enc_.writeFieldStop(); - return 0; - } - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size) { - enc_.writeMapBegin(keyType, valType, size); - return 0; - } - - uint32_t writeMapEnd() { - enc_.writeMapEnd(); - return 0; - } - - uint32_t writeListBegin(const TType elemType, const uint32_t size) { - enc_.writeListBegin(elemType, size); - return 0; - } - - uint32_t writeListEnd() { - enc_.writeListEnd(); - return 0; - } - - uint32_t writeSetBegin(const TType elemType, const uint32_t size) { - enc_.writeSetBegin(elemType, size); - return 0; - } - - uint32_t writeSetEnd() { - enc_.writeSetEnd(); - return 0; - } - - uint32_t writeBool(const bool value) { - enc_.writeBool(value); - return 0; - } - - uint32_t writeByte(const int8_t byte) { - enc_.writeByte(byte); - return 0; - } - - uint32_t writeI16(const int16_t i16) { - enc_.writeI16(i16); - return 0; - } - - uint32_t writeI32(const int32_t i32) { - enc_.writeI32(i32); - return 0; - } - - uint32_t writeI64(const int64_t i64) { - enc_.writeI64(i64); - return 0; - } - - uint32_t writeDouble(const double dub) { - enc_.writeDouble(dub); - return 0; - } - - template - uint32_t writeString(const StrType& str) { - enc_.writeString(str); - return 0; - } - - uint32_t writeBinary(const std::string& str) { - enc_.writeBinary(str); - return 0; - } - - - /** - * Reading functions - */ - - - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - LOG(FATAL) << "Message encoding / decoding not implemented"; - } - - uint32_t readMessageEnd() { - LOG(FATAL) << "Message encoding / decoding not implemented"; - } - - uint32_t readStructBegin(std::string& name) { - dec_.readStructBegin(); - return 0; - } - - uint32_t readStructEnd() { - dec_.readStructEnd(); - return dec_.bytesRead(); - } - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - dec_.readFieldBegin(fieldType, fieldId); - return 0; - } - - uint32_t readFieldEnd() { - dec_.readFieldEnd(); - return 0; - } - - uint32_t readMapBegin(TType& keyType, TType& valType, uint32_t& size) { - dec_.readMapBegin(keyType, valType, size); - return 0; - } - - uint32_t readMapEnd() { - dec_.readMapEnd(); - return 0; - } - - uint32_t readListBegin(TType& elemType, uint32_t& size) { - dec_.readListBegin(elemType, size); - return 0; - } - - uint32_t readListEnd() { - dec_.readListEnd(); - return 0; - } - - uint32_t readSetBegin(TType& elemType, uint32_t& size) { - dec_.readSetBegin(elemType, size); - return 0; - } - - uint32_t readSetEnd() { - dec_.readSetEnd(); - return 0; - } - - uint32_t readBool(bool& value) { - dec_.readBool(value); - return 0; - } - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol::readBool; - - uint32_t readByte(int8_t& byte) { - dec_.readByte(byte); - return 0; - } - - uint32_t readI16(int16_t& i16) { - dec_.readI16(i16); - return 0; - } - - uint32_t readI32(int32_t& i32) { - dec_.readI32(i32); - return 0; - } - - uint32_t readI64(int64_t& i64) { - dec_.readI64(i64); - return 0; - } - - uint32_t readDouble(double& dub) { - dec_.readDouble(dub); - return 0; - } - - template - uint32_t readString(StrType& str) { - dec_.readString(str); - return 0; - } - - uint32_t readBinary(std::string& str) { - dec_.readBinary(str); - return 0; - } - - private: - neutronium::Encoder enc_; - neutronium::Decoder dec_; -}; - -class Neutronium { - public: - explicit Neutronium(const neutronium::Schema* schema, - neutronium::InternTable* internTable, - folly::IOBuf* buf) - : proto_(schema, internTable, buf) { - } - - template - uint32_t serialize(const T& obj) { - proto_.setRootType(T::_reflection_id); - return obj.write(&proto_); - } - - template - uint32_t deserialize(T& obj) { - proto_.setRootType(T::_reflection_id); - return obj.read(&proto_); - } - - private: - TNeutroniumProtocol proto_; -}; - - -}}} // apache::thrift::protocol - -#endif /* THRIFT_LIB_CPP_PROTOCOL_TNEUTRONIUMPROTOCOL_H_ */ - diff --git a/thrift/lib/cpp/protocol/TPhpSerializeProtocol.h b/thrift/lib/cpp/protocol/TPhpSerializeProtocol.h deleted file mode 100644 index d193d423fe..0000000000 --- a/thrift/lib/cpp/protocol/TPhpSerializeProtocol.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_PROTOCOL_TPHPSERIALIZEPROTOCOL_H_ -#define _THRIFT_PROTOCOL_TPHPSERIALIZEPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/protocol/TVirtualProtocol.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -#include -#include - -namespace apache { namespace thrift { namespace protocol { - - -/** - * A Thrift protocol for serializing Thrift objects into PHP's - * "serialize" format. Should work properly for objects that - * PHP can properly express. Currently, it can silently corrupt - * data that PHP cannot properly express (lists or bools as map keys, - * very large integers on 32-bit systems, and possibly others). - */ - -class TPhpSerializeProtocol : public TVirtualProtocol { - public: - TPhpSerializeProtocol(boost::shared_ptr trans) - : TVirtualProtocol(trans) - , trans_(trans.get()) - {} - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid); - - uint32_t writeMessageEnd(); - - uint32_t writeStructBegin(const char* name); - - uint32_t writeStructEnd(); - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - uint32_t writeFieldEnd(); - - uint32_t writeFieldStop(); - - uint32_t writeListBegin(const TType elemType, - const uint32_t size); - - uint32_t writeListEnd(); - - uint32_t writeSetBegin(const TType elemType, - const uint32_t size); - - uint32_t writeSetEnd(); - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size); - - uint32_t writeMapEnd(); - - uint32_t writeBool(const bool value); - - uint32_t writeByte(const int8_t byte); - - uint32_t writeI16(const int16_t i16); - - uint32_t writeI32(const int32_t i32); - - uint32_t writeI64(const int64_t i64); - - uint32_t writeDouble(const double dub); - - uint32_t writeString(const std::string& str); - - uint32_t writeBinary(const std::string& str); - - protected: - uint32_t doWriteInt(const int64_t i64); - uint32_t doWriteInt(const std::string& val); - uint32_t doWriteString(const std::string& str, bool is_class); - uint32_t doWriteListBegin(uint32_t size, bool is_map); - uint32_t listKey(); - uint32_t write3(const char* v1, const char* v2, const char* v3); - uint32_t write(const char* buf, uint32_t len); - - std::stack listPosStack_; - std::stack structSizeStack_; - std::stack< boost::shared_ptr > structBufferStack_; - - TTransport* trans_; -}; - -}}} // apache::thrift::protocol - -#endif diff --git a/thrift/lib/cpp/protocol/TProtocol.h b/thrift/lib/cpp/protocol/TProtocol.h deleted file mode 100644 index f35fa09a0a..0000000000 --- a/thrift/lib/cpp/protocol/TProtocol.h +++ /dev/null @@ -1,753 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TPROTOCOL_H_ -#define THRIFT_PROTOCOL_TPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/protocol/TProtocolException.h" -#include "thrift/lib/cpp/util/BitwiseCast.h" -#include "thrift/lib/cpp/util/shared_ptr_util.h" - -#include - -#include -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace protocol { - -using apache::thrift::transport::TTransport; - -#ifdef THRIFT_HAVE_ENDIAN_H -#include -#endif - -#ifndef __BYTE_ORDER -# if defined(BYTE_ORDER) && defined(LITTLE_ENDIAN) && defined(BIG_ENDIAN) -# define __BYTE_ORDER BYTE_ORDER -# define __LITTLE_ENDIAN LITTLE_ENDIAN -# define __BIG_ENDIAN BIG_ENDIAN -# else -# error "Cannot determine endianness" -# endif -#endif - -#if __BYTE_ORDER == __BIG_ENDIAN -# if !defined(htonll) && !defined(ntohll) -# define ntohll(n) (n) -# define htonll(n) (n) -# endif /* !defined(htonll) && !defined(ntohll) */ -# if defined(__GNUC__) && defined(__GLIBC__) -# include -# define htolell(n) bswap_64(n) -# define letohll(n) bswap_64(n) -# else /* GNUC & GLIBC */ -# define bswap_64(n) \ - ( (((n) & 0xff00000000000000ull) >> 56) \ - | (((n) & 0x00ff000000000000ull) >> 40) \ - | (((n) & 0x0000ff0000000000ull) >> 24) \ - | (((n) & 0x000000ff00000000ull) >> 8) \ - | (((n) & 0x00000000ff000000ull) << 8) \ - | (((n) & 0x0000000000ff0000ull) << 24) \ - | (((n) & 0x000000000000ff00ull) << 40) \ - | (((n) & 0x00000000000000ffull) << 56) ) -# define htolell(n) bswap_64(n) -# define letohll(n) bswap_64(n) -# endif /* GNUC & GLIBC */ -#elif __BYTE_ORDER == __LITTLE_ENDIAN -# define htolell(n) (n) -# define letohll(n) (n) -# if !defined(htonll) && !defined(ntohll) -# if defined(__GNUC__) && defined(__GLIBC__) -# include -# define ntohll(n) bswap_64(n) -# define htonll(n) bswap_64(n) -# else /* GNUC & GLIBC */ -# define ntohll(n) ( (((unsigned long long)ntohl(n)) << 32) + ntohl(n >> 32) ) -# define htonll(n) ( (((unsigned long long)htonl(n)) << 32) + htonl(n >> 32) ) -# endif /* GNUC & GLIBC */ -# endif /* !defined(htonll) && !defined(ntohll) */ -#else /* __BYTE_ORDER */ -# error "Can't define htonll or ntohll!" -#endif - -/** - * Enumerated definition of the types that the Thrift protocol supports. - * Take special note of the T_END type which is used specifically to mark - * the end of a sequence of fields. - */ -enum TType { - T_STOP = 0, - T_VOID = 1, - T_BOOL = 2, - T_BYTE = 3, - T_I08 = 3, - T_I16 = 6, - T_I32 = 8, - T_U64 = 9, - T_I64 = 10, - T_DOUBLE = 4, - T_STRING = 11, - T_UTF7 = 11, - T_STRUCT = 12, - T_MAP = 13, - T_SET = 14, - T_LIST = 15, - T_UTF8 = 16, - T_UTF16 = 17 -}; - -/** - * Enumerated definition of the message types that the Thrift protocol - * supports. - */ -enum TMessageType { - T_CALL = 1, - T_REPLY = 2, - T_EXCEPTION = 3, - T_ONEWAY = 4 -}; - - -/** - * Helper template for implementing TProtocol::skip(). - * - * Templatized to avoid having to make virtual function calls. - */ -template -uint32_t skip(Protocol_& prot, TType type) { - switch (type) { - case T_BOOL: - { - bool boolv; - return prot.readBool(boolv); - } - case T_BYTE: - { - int8_t bytev = 0; - return prot.readByte(bytev); - } - case T_I16: - { - int16_t i16; - return prot.readI16(i16); - } - case T_I32: - { - int32_t i32; - return prot.readI32(i32); - } - case T_I64: - { - int64_t i64; - return prot.readI64(i64); - } - case T_DOUBLE: - { - double dub; - return prot.readDouble(dub); - } - case T_STRING: - { - std::string str; - return prot.readBinary(str); - } - case T_STRUCT: - { - uint32_t result = 0; - std::string name; - int16_t fid; - TType ftype; - result += prot.readStructBegin(name); - while (true) { - result += prot.readFieldBegin(name, ftype, fid); - if (ftype == T_STOP) { - break; - } - result += skip(prot, ftype); - result += prot.readFieldEnd(); - } - result += prot.readStructEnd(); - return result; - } - case T_MAP: - { - uint32_t result = 0; - TType keyType; - TType valType; - uint32_t i, size; - result += prot.readMapBegin(keyType, valType, size); - for (i = 0; i < size; i++) { - result += skip(prot, keyType); - result += skip(prot, valType); - } - result += prot.readMapEnd(); - return result; - } - case T_SET: - { - uint32_t result = 0; - TType elemType; - uint32_t i, size; - result += prot.readSetBegin(elemType, size); - for (i = 0; i < size; i++) { - result += skip(prot, elemType); - } - result += prot.readSetEnd(); - return result; - } - case T_LIST: - { - uint32_t result = 0; - TType elemType; - uint32_t i, size; - result += prot.readListBegin(elemType, size); - for (i = 0; i < size; i++) { - result += skip(prot, elemType); - } - result += prot.readListEnd(); - return result; - } - default: - return 0; - } -} - -/** - * Abstract class for a thrift protocol driver. These are all the methods that - * a protocol must implement. Essentially, there must be some way of reading - * and writing all the base types, plus a mechanism for writing out structs - * with indexed fields. - * - * TProtocol objects should not be shared across multiple encoding contexts, - * as they may need to maintain internal state in some protocols (i.e. XML). - * Note that is is acceptable for the TProtocol module to do its own internal - * buffered reads/writes to the underlying TTransport where appropriate (i.e. - * when parsing an input XML stream, reading should be batched rather than - * looking ahead character by character for a close tag). - * - */ -class TProtocol { - public: - virtual ~TProtocol() {} - - virtual void setVersion_virt(const int8_t version) = 0; - - void setVersion(const int8_t version) { - T_VIRTUAL_CALL(); - return setVersion_virt(version); - } - - /** - * Writing functions. - */ - - virtual uint32_t writeMessageBegin_virt(const std::string& name, - const TMessageType messageType, - const int32_t seqid) = 0; - - virtual uint32_t writeMessageEnd_virt() = 0; - - - virtual uint32_t writeStructBegin_virt(const char* name) = 0; - - virtual uint32_t writeStructEnd_virt() = 0; - - virtual uint32_t writeFieldBegin_virt(const char* name, - const TType fieldType, - const int16_t fieldId) = 0; - - virtual uint32_t writeFieldEnd_virt() = 0; - - virtual uint32_t writeFieldStop_virt() = 0; - - virtual uint32_t writeMapBegin_virt(const TType keyType, - const TType valType, - const uint32_t size) = 0; - - virtual uint32_t writeMapEnd_virt() = 0; - - virtual uint32_t writeListBegin_virt(const TType elemType, - const uint32_t size) = 0; - - virtual uint32_t writeListEnd_virt() = 0; - - virtual uint32_t writeSetBegin_virt(const TType elemType, - const uint32_t size) = 0; - - virtual uint32_t writeSetEnd_virt() = 0; - - virtual uint32_t writeBool_virt(const bool value) = 0; - - virtual uint32_t writeByte_virt(const int8_t byte) = 0; - - virtual uint32_t writeI16_virt(const int16_t i16) = 0; - - virtual uint32_t writeI32_virt(const int32_t i32) = 0; - - virtual uint32_t writeI64_virt(const int64_t i64) = 0; - - virtual uint32_t writeDouble_virt(const double dub) = 0; - - virtual uint32_t writeString_virt(const std::string& str) = 0; - - virtual uint32_t writeBinary_virt(const std::string& str) = 0; - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - T_VIRTUAL_CALL(); - return writeMessageBegin_virt(name, messageType, seqid); - } - - uint32_t writeMessageEnd() { - T_VIRTUAL_CALL(); - return writeMessageEnd_virt(); - } - - - uint32_t writeStructBegin(const char* name) { - T_VIRTUAL_CALL(); - return writeStructBegin_virt(name); - } - - uint32_t writeStructEnd() { - T_VIRTUAL_CALL(); - return writeStructEnd_virt(); - } - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId) { - T_VIRTUAL_CALL(); - return writeFieldBegin_virt(name, fieldType, fieldId); - } - - uint32_t writeFieldEnd() { - T_VIRTUAL_CALL(); - return writeFieldEnd_virt(); - } - - uint32_t writeFieldStop() { - T_VIRTUAL_CALL(); - return writeFieldStop_virt(); - } - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size) { - T_VIRTUAL_CALL(); - return writeMapBegin_virt(keyType, valType, size); - } - - uint32_t writeMapEnd() { - T_VIRTUAL_CALL(); - return writeMapEnd_virt(); - } - - uint32_t writeListBegin(const TType elemType, const uint32_t size) { - T_VIRTUAL_CALL(); - return writeListBegin_virt(elemType, size); - } - - uint32_t writeListEnd() { - T_VIRTUAL_CALL(); - return writeListEnd_virt(); - } - - uint32_t writeSetBegin(const TType elemType, const uint32_t size) { - T_VIRTUAL_CALL(); - return writeSetBegin_virt(elemType, size); - } - - uint32_t writeSetEnd() { - T_VIRTUAL_CALL(); - return writeSetEnd_virt(); - } - - uint32_t writeBool(const bool value) { - T_VIRTUAL_CALL(); - return writeBool_virt(value); - } - - uint32_t writeByte(const int8_t byte) { - T_VIRTUAL_CALL(); - return writeByte_virt(byte); - } - - uint32_t writeI16(const int16_t i16) { - T_VIRTUAL_CALL(); - return writeI16_virt(i16); - } - - uint32_t writeI32(const int32_t i32) { - T_VIRTUAL_CALL(); - return writeI32_virt(i32); - } - - uint32_t writeI64(const int64_t i64) { - T_VIRTUAL_CALL(); - return writeI64_virt(i64); - } - - uint32_t writeDouble(const double dub) { - T_VIRTUAL_CALL(); - return writeDouble_virt(dub); - } - - uint32_t writeString(const std::string& str) { - T_VIRTUAL_CALL(); - return writeString_virt(str); - } - - uint32_t writeBinary(const std::string& str) { - T_VIRTUAL_CALL(); - return writeBinary_virt(str); - } - - /** - * Reading functions - */ - - virtual uint32_t readMessageBegin_virt(std::string& name, - TMessageType& messageType, - int32_t& seqid) = 0; - - virtual uint32_t readMessageEnd_virt() = 0; - - virtual uint32_t readStructBegin_virt(std::string& name) = 0; - - virtual uint32_t readStructEnd_virt() = 0; - - virtual uint32_t readFieldBegin_virt(std::string& name, - TType& fieldType, - int16_t& fieldId) = 0; - - virtual uint32_t readFieldEnd_virt() = 0; - - virtual uint32_t readMapBegin_virt(TType& keyType, - TType& valType, - uint32_t& size) = 0; - - virtual uint32_t readMapEnd_virt() = 0; - - virtual uint32_t readListBegin_virt(TType& elemType, - uint32_t& size) = 0; - - virtual uint32_t readListEnd_virt() = 0; - - virtual uint32_t readSetBegin_virt(TType& elemType, - uint32_t& size) = 0; - - virtual uint32_t readSetEnd_virt() = 0; - - virtual uint32_t readBool_virt(bool& value) = 0; - - virtual uint32_t readBool_virt(std::vector::reference value) = 0; - - virtual uint32_t readByte_virt(int8_t& byte) = 0; - - virtual uint32_t readI16_virt(int16_t& i16) = 0; - - virtual uint32_t readI32_virt(int32_t& i32) = 0; - - virtual uint32_t readI64_virt(int64_t& i64) = 0; - - virtual uint32_t readDouble_virt(double& dub) = 0; - - virtual uint32_t readString_virt(std::string& str) = 0; - - virtual uint32_t readBinary_virt(std::string& str) = 0; - - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - T_VIRTUAL_CALL(); - return readMessageBegin_virt(name, messageType, seqid); - } - - uint32_t readMessageEnd() { - T_VIRTUAL_CALL(); - return readMessageEnd_virt(); - } - - uint32_t readStructBegin(std::string& name) { - T_VIRTUAL_CALL(); - return readStructBegin_virt(name); - } - - uint32_t readStructEnd() { - T_VIRTUAL_CALL(); - return readStructEnd_virt(); - } - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - T_VIRTUAL_CALL(); - return readFieldBegin_virt(name, fieldType, fieldId); - } - - uint32_t readFieldEnd() { - T_VIRTUAL_CALL(); - return readFieldEnd_virt(); - } - - uint32_t readMapBegin(TType& keyType, TType& valType, uint32_t& size) { - T_VIRTUAL_CALL(); - return readMapBegin_virt(keyType, valType, size); - } - - uint32_t readMapEnd() { - T_VIRTUAL_CALL(); - return readMapEnd_virt(); - } - - uint32_t readListBegin(TType& elemType, uint32_t& size) { - T_VIRTUAL_CALL(); - return readListBegin_virt(elemType, size); - } - - uint32_t readListEnd() { - T_VIRTUAL_CALL(); - return readListEnd_virt(); - } - - uint32_t readSetBegin(TType& elemType, uint32_t& size) { - T_VIRTUAL_CALL(); - return readSetBegin_virt(elemType, size); - } - - uint32_t readSetEnd() { - T_VIRTUAL_CALL(); - return readSetEnd_virt(); - } - - uint32_t readBool(bool& value) { - T_VIRTUAL_CALL(); - return readBool_virt(value); - } - - uint32_t readByte(int8_t& byte) { - T_VIRTUAL_CALL(); - return readByte_virt(byte); - } - - uint32_t readI16(int16_t& i16) { - T_VIRTUAL_CALL(); - return readI16_virt(i16); - } - - uint32_t readI32(int32_t& i32) { - T_VIRTUAL_CALL(); - return readI32_virt(i32); - } - - uint32_t readI64(int64_t& i64) { - T_VIRTUAL_CALL(); - return readI64_virt(i64); - } - - uint32_t readDouble(double& dub) { - T_VIRTUAL_CALL(); - return readDouble_virt(dub); - } - - uint32_t readString(std::string& str) { - T_VIRTUAL_CALL(); - return readString_virt(str); - } - - uint32_t readBinary(std::string& str) { - T_VIRTUAL_CALL(); - return readBinary_virt(str); - } - - /* - * std::vector is specialized for bool, and its elements are individual bits - * rather than bools. We need to define a different version of readBool() - * to work with std::vector. - */ - uint32_t readBool(std::vector::reference value) { - T_VIRTUAL_CALL(); - return readBool_virt(value); - } - - /** - * Method to arbitrarily skip over data. - */ - uint32_t skip(TType type) { - T_VIRTUAL_CALL(); - return skip_virt(type); - } - virtual uint32_t skip_virt(TType type) { - return ::apache::thrift::protocol::skip(*this, type); - } - - inline boost::shared_ptr getTransport() { - return ptrans_; - } - - // TODO: remove these two calls, they are for backwards - // compatibility - inline boost::shared_ptr getInputTransport() { - return ptrans_; - } - inline boost::shared_ptr getOutputTransport() { - return ptrans_; - } - - protected: - explicit TProtocol(boost::shared_ptr ptrans): - ptrans_(ptrans) { - } - - /** - * Construct a TProtocol using a raw TTransport pointer. - * - * It is the callers responsibility to ensure that the TTransport remains - * valid for the lifetime of the TProtocol object. - */ - explicit TProtocol(TTransport* ptrans): - ptrans_(ptrans, NoopPtrDestructor()) { - } - - boost::shared_ptr ptrans_; - - private: - TProtocol() {} -}; - -/** - * Constructs protocol objects given transports. - */ -class TProtocolFactory { - public: - TProtocolFactory() {} - - virtual ~TProtocolFactory() {} - - virtual boost::shared_ptr getProtocol(boost::shared_ptr trans) = 0; -}; - -/** - * Constructs both input and output protocol objects with a given pair of - * input and output transports. - * - * TProtocolPair.first = Input Protocol - * TProtocolPair.second = Output Protocol - */ -typedef std::pair, - boost::shared_ptr > TProtocolPair; - -class TDuplexProtocolFactory { - public: - TDuplexProtocolFactory() {} - - virtual ~TDuplexProtocolFactory() {} - - virtual TProtocolPair getProtocol(transport::TTransportPair transports) = 0; - - virtual boost::shared_ptr getInputProtocolFactory() { - return boost::shared_ptr(); - } - - virtual boost::shared_ptr getOutputProtocolFactory() { - return boost::shared_ptr(); - } -}; - -/** - * Adapts a TProtocolFactory to a TDuplexProtocolFactory that returns - * a new protocol object for both input and output - */ -template -class TSingleProtocolFactory : public TDuplexProtocolFactory { - public: - TSingleProtocolFactory() { - factory_.reset(new Factory_()); - } - - explicit TSingleProtocolFactory(boost::shared_ptr factory) : - factory_(factory) {} - - virtual TProtocolPair getProtocol(transport::TTransportPair transports) { - return std::make_pair(factory_->getProtocol(transports.first), - factory_->getProtocol(transports.second)); - } - - virtual boost::shared_ptr getInputProtocolFactory() { - return factory_; - } - - virtual boost::shared_ptr getOutputProtocolFactory() { - return factory_; - } - - private: - - boost::shared_ptr factory_; -}; - -/** - * Use TDualProtocolFactory to construct input and output protocols from - * different factories. - */ -class TDualProtocolFactory : public TDuplexProtocolFactory { - public: - TDualProtocolFactory( - boost::shared_ptr inputFactory, - boost::shared_ptr outputFactory) : - inputFactory_(inputFactory), - outputFactory_(outputFactory) {} - - virtual TProtocolPair getProtocol(transport::TTransportPair transports) { - return std::make_pair(inputFactory_->getProtocol(transports.first), - outputFactory_->getProtocol(transports.second)); - } - - virtual boost::shared_ptr getInputProtocolFactory() { - return inputFactory_; - } - - virtual boost::shared_ptr getOutputProtocolFactory() { - return outputFactory_; - } - - private: - - boost::shared_ptr inputFactory_; - boost::shared_ptr outputFactory_; -}; - -/** - * Dummy protocol class. - * - * This class does nothing, and should never be instantiated. - * It is used only by the generator code. - */ -class TDummyProtocol : public TProtocol { -}; - -}}} // apache::thrift::protocol - -#endif // #define _THRIFT_PROTOCOL_TPROTOCOL_H_ 1 diff --git a/thrift/lib/cpp/protocol/TProtocolException.h b/thrift/lib/cpp/protocol/TProtocolException.h deleted file mode 100644 index e9f3856a44..0000000000 --- a/thrift/lib/cpp/protocol/TProtocolException.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_PROTOCOL_TPROTOCOLEXCEPTION_H_ -#define _THRIFT_PROTOCOL_TPROTOCOLEXCEPTION_H_ 1 - -#include - -namespace apache { namespace thrift { namespace protocol { - -/** - * Class to encapsulate all the possible types of protocol errors that may - * occur in various protocol systems. This provides a sort of generic - * wrapper around the shitty UNIX E_ error codes that lets a common code - * base of error handling to be used for various types of protocols, i.e. - * pipes etc. - * - */ -class TProtocolException : public apache::thrift::TLibraryException { - public: - - /** - * Error codes for the various types of exceptions. - */ - enum TProtocolExceptionType - { UNKNOWN = 0 - , INVALID_DATA = 1 - , NEGATIVE_SIZE = 2 - , SIZE_LIMIT = 3 - , BAD_VERSION = 4 - , NOT_IMPLEMENTED = 5 - }; - - TProtocolException() : - apache::thrift::TLibraryException(), - type_(UNKNOWN) {} - - TProtocolException(TProtocolExceptionType type) : - apache::thrift::TLibraryException(), - type_(type) {} - - TProtocolException(const std::string& message) : - apache::thrift::TLibraryException(message), - type_(UNKNOWN) {} - - TProtocolException(TProtocolExceptionType type, const std::string& message) : - apache::thrift::TLibraryException(message), - type_(type) {} - - virtual ~TProtocolException() throw() {} - - /** - * Returns an error code that provides information about the type of error - * that has occurred. - * - * @return Error code - */ - TProtocolExceptionType getType() { - return type_; - } - - virtual const char* what() const throw() { - if (message_.empty()) { - switch (type_) { - case UNKNOWN : return "TProtocolException: Unknown protocol exception"; - case INVALID_DATA : return "TProtocolException: Invalid data"; - case NEGATIVE_SIZE : return "TProtocolException: Negative size"; - case SIZE_LIMIT : return "TProtocolException: Exceeded size limit"; - case BAD_VERSION : return "TProtocolException: Invalid version"; - case NOT_IMPLEMENTED : return "TProtocolException: Not implemented"; - default : return "TProtocolException: (Invalid exception type)"; - } - } else { - return message_.c_str(); - } - } - - protected: - /** - * Error code - */ - TProtocolExceptionType type_; - -}; - -}}} // apache::thrift::protocol - -#endif // #ifndef _THRIFT_PROTOCOL_TPROTOCOLEXCEPTION_H_ diff --git a/thrift/lib/cpp/protocol/TProtocolTap.h b/thrift/lib/cpp/protocol/TProtocolTap.h deleted file mode 100644 index 3772bff58c..0000000000 --- a/thrift/lib/cpp/protocol/TProtocolTap.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_PROTOCOL_TPROTOCOLTAP_H_ -#define _THRIFT_PROTOCOL_TPROTOCOLTAP_H_ 1 - -#include - -namespace apache { namespace thrift { namespace protocol { - -using apache::thrift::transport::TTransport; - -/** - * Puts a wiretap on a protocol object. Any reads to this class are passed - * through to an enclosed protocol object, but also mirrored as write to a - * second protocol object. - * - */ -class TProtocolTap : public TVirtualProtocol { - public: - TProtocolTap(boost::shared_ptr source, - boost::shared_ptr sink) - : TVirtualProtocol(source->getTransport()) - , source_(source) - , sink_(sink) - {} - - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - uint32_t rv = source_->readMessageBegin(name, messageType, seqid); - sink_->writeMessageBegin(name, messageType, seqid); - return rv; - } - - uint32_t readMessageEnd() { - uint32_t rv = source_->readMessageEnd(); - sink_->writeMessageEnd(); - return rv; - } - - uint32_t readStructBegin(std::string& name) { - uint32_t rv = source_->readStructBegin(name); - sink_->writeStructBegin(name.c_str()); - return rv; - } - - uint32_t readStructEnd() { - uint32_t rv = source_->readStructEnd(); - sink_->writeStructEnd(); - return rv; - } - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - uint32_t rv = source_->readFieldBegin(name, fieldType, fieldId); - if (fieldType == T_STOP) { - sink_->writeFieldStop(); - } else { - sink_->writeFieldBegin(name.c_str(), fieldType, fieldId); - } - return rv; - } - - - uint32_t readFieldEnd() { - uint32_t rv = source_->readFieldEnd(); - sink_->writeFieldEnd(); - return rv; - } - - uint32_t readMapBegin(TType& keyType, - TType& valType, - uint32_t& size) { - uint32_t rv = source_->readMapBegin(keyType, valType, size); - sink_->writeMapBegin(keyType, valType, size); - return rv; - } - - - uint32_t readMapEnd() { - uint32_t rv = source_->readMapEnd(); - sink_->writeMapEnd(); - return rv; - } - - uint32_t readListBegin(TType& elemType, uint32_t& size) { - uint32_t rv = source_->readListBegin(elemType, size); - sink_->writeListBegin(elemType, size); - return rv; - } - - - uint32_t readListEnd() { - uint32_t rv = source_->readListEnd(); - sink_->writeListEnd(); - return rv; - } - - uint32_t readSetBegin(TType& elemType, uint32_t& size) { - uint32_t rv = source_->readSetBegin(elemType, size); - sink_->writeSetBegin(elemType, size); - return rv; - } - - - uint32_t readSetEnd() { - uint32_t rv = source_->readSetEnd(); - sink_->writeSetEnd(); - return rv; - } - - uint32_t readBool(bool& value) { - uint32_t rv = source_->readBool(value); - sink_->writeBool(value); - return rv; - } - - // Provide the default readBool() implementation for std::vector - using TVirtualProtocol::readBool; - - uint32_t readByte(int8_t& byte) { - uint32_t rv = source_->readByte(byte); - sink_->writeByte(byte); - return rv; - } - - uint32_t readI16(int16_t& i16) { - uint32_t rv = source_->readI16(i16); - sink_->writeI16(i16); - return rv; - } - - uint32_t readI32(int32_t& i32) { - uint32_t rv = source_->readI32(i32); - sink_->writeI32(i32); - return rv; - } - - uint32_t readI64(int64_t& i64) { - uint32_t rv = source_->readI64(i64); - sink_->writeI64(i64); - return rv; - } - - uint32_t readDouble(double& dub) { - uint32_t rv = source_->readDouble(dub); - sink_->writeDouble(dub); - return rv; - } - - uint32_t readString(std::string& str) { - uint32_t rv = source_->readString(str); - sink_->writeString(str); - return rv; - } - - uint32_t readBinary(std::string& str) { - uint32_t rv = source_->readBinary(str); - sink_->writeBinary(str); - return rv; - } - - private: - boost::shared_ptr source_; - boost::shared_ptr sink_; -}; - -}}} // apache::thrift::protocol - -#endif // #define _THRIFT_PROTOCOL_TPROTOCOLTAP_H_ 1 diff --git a/thrift/lib/cpp/protocol/TProtocolTypes.h b/thrift/lib/cpp/protocol/TProtocolTypes.h deleted file mode 100644 index ca22b545f0..0000000000 --- a/thrift/lib/cpp/protocol/TProtocolTypes.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TPROTOCOLTYPES_H_ -#define THRIFT_PROTOCOL_TPROTOCOLTYPES_H_ 1 - -namespace apache { namespace thrift { namespace protocol { - -enum PROTOCOL_TYPES { - T_BINARY_PROTOCOL = 0, - T_JSON_PROTOCOL = 1, - T_COMPACT_PROTOCOL = 2, -}; - -}}} // apache::thrift::protocol - -#endif // #define _THRIFT_PROTOCOL_TPROTOCOLTYPES_H_ 1 - diff --git a/thrift/lib/cpp/protocol/TSimpleJSONProtocol.h b/thrift/lib/cpp/protocol/TSimpleJSONProtocol.h deleted file mode 100644 index 4183d3af59..0000000000 --- a/thrift/lib/cpp/protocol/TSimpleJSONProtocol.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_PROTOCOL_TSIMPLEJSONPROTOCOL_H_ -#define THRIFT_PROTOCOL_TSIMPLEJSONPROTOCOL_H_ 1 - -#include "TJSONProtocol.h" - -namespace apache { namespace thrift { namespace protocol { - - -/* - * TsimpleJSONProtocol overrides parts of the regular JSON serialization to - * comply with the Simple JSON format. - * Namely, spitting only field names without verbose field type output - */ - -class TSimpleJSONProtocol : public TVirtualProtocol{ - - public: - - TSimpleJSONProtocol(boost::shared_ptr ptrans); - - ~TSimpleJSONProtocol(); - - - public: - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId); - - - uint32_t writeFieldEnd(); - - uint32_t writeMapBegin(const TType keyType, const TType valType, - const uint32_t size); - - uint32_t writeMapEnd(); - - uint32_t writeListBegin(const TType elemType, const uint32_t size); - - uint32_t writeSetBegin(const TType elemType, const uint32_t size); - - uint32_t writeBool(const bool value); -}; - -/** - * Constructs input and output protocol objects given transports. - */ -class TSimpleJSONProtocolFactory : public TProtocolFactory { - public: - TSimpleJSONProtocolFactory() {} - - virtual ~TSimpleJSONProtocolFactory() {} - - boost::shared_ptr getProtocol( - boost::shared_ptr trans) { - return boost::shared_ptr(new TSimpleJSONProtocol(trans)); - } -}; - -}}} // apache::thrift::protocol - -#endif // #define THRIFT_PROTOCOL_TJSONPROTOCOL_H_ 1 diff --git a/thrift/lib/cpp/protocol/TVirtualProtocol.h b/thrift/lib/cpp/protocol/TVirtualProtocol.h deleted file mode 100644 index 97298f0043..0000000000 --- a/thrift/lib/cpp/protocol/TVirtualProtocol.h +++ /dev/null @@ -1,523 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_PROTOCOL_TVIRTUALPROTOCOL_H_ -#define _THRIFT_PROTOCOL_TVIRTUALPROTOCOL_H_ 1 - -#include "thrift/lib/cpp/protocol/TProtocol.h" - -namespace apache { namespace thrift { namespace protocol { - -/** - * Helper class that provides default implementations of TProtocol methods. - * - * This class provides default implementations of the non-virtual TProtocol - * methods. It exists primarily so TVirtualProtocol can derive from it. It - * prevents TVirtualProtocol methods from causing infinite recursion if the - * non-virtual methods are not overridden by the TVirtualProtocol subclass. - * - * You probably don't want to use this class directly. Use TVirtualProtocol - * instead. - */ -class TProtocolDefaults : public TProtocol { - public: - void setVersion(const int8_t version) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support setVersion (yet)"); - } - - uint32_t readMessageBegin(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readMessageEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readStructBegin(std::string& name) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readStructEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readFieldBegin(std::string& name, - TType& fieldType, - int16_t& fieldId) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readFieldEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readMapBegin(TType& keyType, TType& valType, uint32_t& size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readMapEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readListBegin(TType& elemType, uint32_t& size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readListEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readSetBegin(TType& elemType, uint32_t& size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readSetEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readBool(bool& value) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readBool(std::vector::reference value) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readByte(int8_t& byte) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readI16(int16_t& i16) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readI32(int32_t& i32) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readI64(int64_t& i64) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readDouble(double& dub) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readString(std::string& str) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t readBinary(std::string& str) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support reading (yet)."); - } - - uint32_t writeMessageBegin(const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeMessageEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - - uint32_t writeStructBegin(const char* name) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeStructEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeFieldBegin(const char* name, - const TType fieldType, - const int16_t fieldId) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeFieldEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeFieldStop() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeMapBegin(const TType keyType, - const TType valType, - const uint32_t size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeMapEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeListBegin(const TType elemType, const uint32_t size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeListEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeSetBegin(const TType elemType, const uint32_t size) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeSetEnd() { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeBool(const bool value) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeByte(const int8_t byte) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeI16(const int16_t i16) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeI32(const int32_t i32) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeI64(const int64_t i64) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeDouble(const double dub) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeString(const std::string& str) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t writeBinary(const std::string& str) { - throw TProtocolException(TProtocolException::NOT_IMPLEMENTED, - "this protocol does not support writing (yet)."); - } - - uint32_t skip(TType type) { - return ::apache::thrift::protocol::skip(*this, type); - } - - protected: - TProtocolDefaults(const boost::shared_ptr& ptrans) - : TProtocol(ptrans) - {} - - TProtocolDefaults(transport::TTransport* ptrans) - : TProtocol(ptrans) - {} -}; - -/** - * Concrete TProtocol classes should inherit from TVirtualProtocol - * so they don't have to manually override virtual methods. - * - * @author David Reiss - */ -template -class TVirtualProtocol : public Super_ { - public: - - virtual void setVersion_virt(const int8_t version) { - return static_cast(this)->setVersion(version); - } - /** - * Writing functions. - */ - - virtual uint32_t writeMessageBegin_virt(const std::string& name, - const TMessageType messageType, - const int32_t seqid) { - return static_cast(this)->writeMessageBegin(name, messageType, - seqid); - } - - virtual uint32_t writeMessageEnd_virt() { - return static_cast(this)->writeMessageEnd(); - } - - - virtual uint32_t writeStructBegin_virt(const char* name) { - return static_cast(this)->writeStructBegin(name); - } - - virtual uint32_t writeStructEnd_virt() { - return static_cast(this)->writeStructEnd(); - } - - virtual uint32_t writeFieldBegin_virt(const char* name, - const TType fieldType, - const int16_t fieldId) { - return static_cast(this)->writeFieldBegin(name, fieldType, - fieldId); - } - - virtual uint32_t writeFieldEnd_virt() { - return static_cast(this)->writeFieldEnd(); - } - - virtual uint32_t writeFieldStop_virt() { - return static_cast(this)->writeFieldStop(); - } - - virtual uint32_t writeMapBegin_virt(const TType keyType, - const TType valType, - const uint32_t size) { - return static_cast(this)->writeMapBegin(keyType, valType, size); - } - - virtual uint32_t writeMapEnd_virt() { - return static_cast(this)->writeMapEnd(); - } - - virtual uint32_t writeListBegin_virt(const TType elemType, - const uint32_t size) { - return static_cast(this)->writeListBegin(elemType, size); - } - - virtual uint32_t writeListEnd_virt() { - return static_cast(this)->writeListEnd(); - } - - virtual uint32_t writeSetBegin_virt(const TType elemType, - const uint32_t size) { - return static_cast(this)->writeSetBegin(elemType, size); - } - - virtual uint32_t writeSetEnd_virt() { - return static_cast(this)->writeSetEnd(); - } - - virtual uint32_t writeBool_virt(const bool value) { - return static_cast(this)->writeBool(value); - } - - virtual uint32_t writeByte_virt(const int8_t byte) { - return static_cast(this)->writeByte(byte); - } - - virtual uint32_t writeI16_virt(const int16_t i16) { - return static_cast(this)->writeI16(i16); - } - - virtual uint32_t writeI32_virt(const int32_t i32) { - return static_cast(this)->writeI32(i32); - } - - virtual uint32_t writeI64_virt(const int64_t i64) { - return static_cast(this)->writeI64(i64); - } - - virtual uint32_t writeDouble_virt(const double dub) { - return static_cast(this)->writeDouble(dub); - } - - virtual uint32_t writeString_virt(const std::string& str) { - return static_cast(this)->writeString(str); - } - - virtual uint32_t writeBinary_virt(const std::string& str) { - return static_cast(this)->writeBinary(str); - } - - /** - * Reading functions - */ - - virtual uint32_t readMessageBegin_virt(std::string& name, - TMessageType& messageType, - int32_t& seqid) { - return static_cast(this)->readMessageBegin(name, messageType, - seqid); - } - - virtual uint32_t readMessageEnd_virt() { - return static_cast(this)->readMessageEnd(); - } - - virtual uint32_t readStructBegin_virt(std::string& name) { - return static_cast(this)->readStructBegin(name); - } - - virtual uint32_t readStructEnd_virt() { - return static_cast(this)->readStructEnd(); - } - - virtual uint32_t readFieldBegin_virt(std::string& name, - TType& fieldType, - int16_t& fieldId) { - return static_cast(this)->readFieldBegin(name, fieldType, - fieldId); - } - - virtual uint32_t readFieldEnd_virt() { - return static_cast(this)->readFieldEnd(); - } - - virtual uint32_t readMapBegin_virt(TType& keyType, - TType& valType, - uint32_t& size) { - return static_cast(this)->readMapBegin(keyType, valType, size); - } - - virtual uint32_t readMapEnd_virt() { - return static_cast(this)->readMapEnd(); - } - - virtual uint32_t readListBegin_virt(TType& elemType, - uint32_t& size) { - return static_cast(this)->readListBegin(elemType, size); - } - - virtual uint32_t readListEnd_virt() { - return static_cast(this)->readListEnd(); - } - - virtual uint32_t readSetBegin_virt(TType& elemType, - uint32_t& size) { - return static_cast(this)->readSetBegin(elemType, size); - } - - virtual uint32_t readSetEnd_virt() { - return static_cast(this)->readSetEnd(); - } - - virtual uint32_t readBool_virt(bool& value) { - return static_cast(this)->readBool(value); - } - - virtual uint32_t readBool_virt(std::vector::reference value) { - return static_cast(this)->readBool(value); - } - - virtual uint32_t readByte_virt(int8_t& byte) { - return static_cast(this)->readByte(byte); - } - - virtual uint32_t readI16_virt(int16_t& i16) { - return static_cast(this)->readI16(i16); - } - - virtual uint32_t readI32_virt(int32_t& i32) { - return static_cast(this)->readI32(i32); - } - - virtual uint32_t readI64_virt(int64_t& i64) { - return static_cast(this)->readI64(i64); - } - - virtual uint32_t readDouble_virt(double& dub) { - return static_cast(this)->readDouble(dub); - } - - virtual uint32_t readString_virt(std::string& str) { - return static_cast(this)->readString(str); - } - - virtual uint32_t readBinary_virt(std::string& str) { - return static_cast(this)->readBinary(str); - } - - virtual uint32_t skip_virt(TType type) { - return static_cast(this)->skip(type); - } - - /* - * Provide a default skip() implementation that uses non-virtual read - * methods. - * - * Note: subclasses that use TVirtualProtocol to derive from another protocol - * implementation (i.e., not TProtocolDefaults) should beware that this may - * override any non-default skip() implementation provided by the parent - * transport class. They may need to explicitly redefine skip() to call the - * correct parent implementation, if desired. - */ - uint32_t skip(TType type) { - Protocol_* const prot = static_cast(this); - return ::apache::thrift::protocol::skip(*prot, type); - } - - /* - * Provide a default readBool() implementation for use with - * std::vector, that behaves the same as reading into a normal bool. - * - * Subclasses can override this if desired, but there normally shouldn't - * be a need to. - */ - uint32_t readBool(std::vector::reference value) { - bool b = false; - uint32_t ret = static_cast(this)->readBool(b); - value = b; - return ret; - } - using Super_::readBool; // so we don't hide readBool(bool&) - - protected: - TVirtualProtocol(const boost::shared_ptr& ptrans) - : Super_(ptrans) - {} - - TVirtualProtocol(transport::TTransport* ptrans) - : Super_(ptrans) - {} -}; - -}}} // apache::thrift::protocol - -#endif // #define _THRIFT_PROTOCOL_TVIRTUALPROTOCOL_H_ 1 diff --git a/thrift/lib/cpp/protocol/neutronium/Decoder-inl.h b/thrift/lib/cpp/protocol/neutronium/Decoder-inl.h deleted file mode 100644 index e38451c637..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Decoder-inl.h +++ /dev/null @@ -1,438 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_INL_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_INL_H_ - -#ifndef THRIFT_INCLUDE_DECODER_INL -#error This file may only be included from Decoder.h -#endif - -#include "folly/GroupVarint.h" -#include "folly/Conv.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -inline const char* CH(const uint8_t* p) { - return reinterpret_cast(p); -} -inline char* CH(uint8_t* p) { - return reinterpret_cast(p); -} - -template -inline auto CH(P p) -> std::pair { - return std::make_pair(CH(p.first), p.second); -} - -inline folly::StringPiece SP(std::pair p) { - return folly::StringPiece(CH(p.first), p.second); -} - -inline void Decoder::setRootType(int64_t rootType) { - CHECK(stack_.empty()); - rootType_ = rootType; -} - -inline void Decoder::readStructBegin() { - push(reflection::TYPE_STRUCT, nextType(), 0); -} - -inline void Decoder::readStructEnd() { - DCHECK_EQ(top().state, IN_STRUCT); - // The last readFieldBegin returned T_STOP and so didn't change the state - // to IN_FIELD - pop(); -} - -inline int64_t Decoder::nextType() { - int64_t type; - if (!stack_.empty()) { - auto& s = top(); - s.nextValue(); - type = s.type.typeVal; - } else { - type = rootType_; - } - return type; -} - -inline void Decoder::readMapBegin(TType& keyType, TType& valType, - uint32_t& size) { - size = peekElementCount(); - push(reflection::TYPE_MAP, nextType(), size); - keyType = top().list.mapKeyType.ttype(); - valType = top().list.valueType.ttype(); - size = top().list.remaining; -} - -inline void Decoder::readMapEnd() { - DCHECK_EQ(top().state, IN_MAP_VALUE); - DCHECK_EQ(top().list.remaining, 0); - pop(); -} - -inline void Decoder::readListBegin(TType& elemType, uint32_t& size) { - size = peekElementCount(); - push(reflection::TYPE_LIST, nextType(), size); - elemType = top().list.valueType.ttype(); - size = top().list.remaining; -} - -inline void Decoder::readListEnd() { - DCHECK_EQ(top().state, IN_LIST_VALUE); - DCHECK_EQ(top().list.remaining, 0); - pop(); -} - -inline void Decoder::readSetBegin(TType& elemType, uint32_t& size) { - size = peekElementCount(); - push(reflection::TYPE_SET, nextType(), size); - elemType = top().list.valueType.ttype(); - size = top().list.remaining; -} - -inline void Decoder::readSetEnd() { - DCHECK_EQ(top().state, IN_SET_VALUE); - DCHECK_EQ(top().list.remaining, 0); - pop(); -} - -inline void Decoder::push(reflection::Type rtype, int64_t type, uint32_t size) { - if (rtype != reflection::getType(type)) { - throw TProtocolException(folly::to( - "Invalid type ", reflection::getType(type), " expected ", rtype)); - } - const DataType* dt = &(schema_->map().at(type)); - stack_.emplace_back(schema_, type, dt, size); - read(); -} - -inline Decoder::TypeInfo::TypeInfo(const Schema* schema, int64_t t) - : typeVal(t), - length(kVariableLength), - dataType(nullptr), - terminator('\0') { - if (!reflection::isBaseType(type())) { - dataType = &(schema->map().at(t)); - length = dataType->fixedSize; - } -} - -inline Decoder::TypeInfo::TypeInfo(int64_t t) - : typeVal(t), - length(kVariableLength), - dataType(nullptr), - terminator('\0') { - DCHECK(reflection::isBaseType(type())); -} - -template -inline void Decoder::DecoderState::setStateList(T& ts) { - if (UNLIKELY(++ts.index == ts.count)) { - throw TProtocolException("type mismatch"); - } -} - -inline void Decoder::DecoderState::nextList() { - switch (state) { - case IN_MAP_KEY: - state = IN_MAP_VALUE; - type = list.valueType; - break; // don't advance to next - case IN_MAP_VALUE: - state = IN_MAP_KEY; - type = list.mapKeyType; - DCHECK_NE(list.remaining, 0); - --list.remaining; - break; - case IN_LIST_VALUE: - case IN_SET_VALUE: - type = list.valueType; - DCHECK_NE(list.remaining, 0); - --list.remaining; - break; - default: - LOG(FATAL) << "Invalid state " << state; - } - // Advance to next element - - switch (type.typeVal) { - case reflection::TYPE_BOOL: - setStateList(bools); - break; - case reflection::TYPE_BYTE: - setStateList(bytes); - break; - case reflection::TYPE_I16: // fallthrough - case reflection::TYPE_I32: - setStateList(ints); - break; - case reflection::TYPE_I64: // fallthrough - case reflection::TYPE_DOUBLE: - setStateList(int64s); - break; - case reflection::TYPE_STRING: // fallthrough - default: - setStateList(strings); - } -} - -template -bool Decoder::DecoderState::setStateStruct( - TS& ts, - const TV& tv, - FieldState nextState) { - if (++ts.index == ts.count) { - str.fieldState = nextState; - return false; - } else { - auto& p = tv[ts.index]; - str.tag = p.first; - type = p.second; - return true; - } -} - -inline bool Decoder::DecoderState::nextStruct() { - switch (str.fieldState) { - case FS_START: - str.fieldState = FS_INT; - ints.index = -1; - // fallthrough - case FS_INT: - if (setStateStruct(ints, str.intTags, FS_INT64)) { - break; - } - // fallthrough - case FS_INT64: - if (setStateStruct(int64s, str.int64Tags, FS_BOOL)) { - break; - } - // fallthrough - case FS_BOOL: - if (setStateStruct(bools, str.boolTags, FS_STRICT_ENUM)) { - break; - } - case FS_STRICT_ENUM: - if (setStateStruct(strictEnums, str.strictEnumTags, FS_BYTE)) { - break; - } - // fallthrough - case FS_BYTE: - if (setStateStruct(bytes, str.byteTags, FS_INTERNED_STRING)) { - break; - } - // fallthrough - case FS_INTERNED_STRING: - if (setStateStruct(internedStrings, str.internedStringTags, FS_STRING)) { - break; - } - case FS_STRING: - if (setStateStruct(strings, str.stringTags, FS_END)) { - break; - } - // fallthrough - case FS_END: - return false; - } - - return true; -} - -inline bool Decoder::DecoderState::nextField() { - DCHECK_EQ(state, IN_STRUCT); - if (!nextStruct()) { - return false; - } - state = IN_FIELD; - setLength(); - return true; -} - -inline void Decoder::DecoderState::nextValue() { - DCHECK_NE(state, IN_STRUCT); - if (state != IN_FIELD) { - nextList(); - setLength(); - } -} - -inline void Decoder::DecoderState::setLength() { - if (type.type() == reflection::TYPE_STRING && - type.length == kVariableLength) { - // Variable size, read length - if (++vars.index == vars.count) { - throw TProtocolException("too many vars"); - } - type.length = vars.values[vars.index]; - } -} - -inline uint32_t Decoder::peekElementCount() { - uint32_t len; - cursor_.gather(folly::GroupVarint32::maxSize(1)); - folly::GroupVarint32Decoder decoder(SP(cursor_.peek())); - uint32_t count; - if (!decoder.next(&count)) { - throw TProtocolException("underflow"); - } - return count; -} - -inline void Decoder::readFieldBegin(TType& fieldType, int16_t& fieldId) { - auto& s = top(); - if (s.nextField()) { - fieldType = s.type.ttype(); - fieldId = s.str.tag; - } else { - fieldType = T_STOP; - fieldId = 0; - } -} - -inline void Decoder::readFieldEnd() { - auto& s = top(); - CHECK_EQ(s.state, IN_FIELD); - s.state = IN_STRUCT; -} - -inline void Decoder::readBool(bool& value) { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_BOOL)) { - throw TProtocolException("invalid type"); - } - value = testBit(s.bools.values, s.boolStartBit + s.bools.index); -} - -inline void Decoder::readByte(int8_t& value) { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_BYTE)) { - throw TProtocolException("invalid type"); - } - value = s.bytes.values[s.bytes.index]; -} - -inline void Decoder::readI16(int16_t& value) { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_I16)) { - throw TProtocolException("invalid type"); - } - value = s.ints.values[s.ints.index]; -} - -inline void Decoder::readI32(int32_t& value) { - auto& s = top(); - s.nextValue(); - // Strict enums only occur in structs - // TODO(tudorb): Relax? - if (s.state == IN_FIELD && s.str.fieldState == DecoderState::FS_STRICT_ENUM) { - value = s.strictEnums.values[s.strictEnums.index]; - } else if (UNLIKELY(s.type.typeVal != reflection::TYPE_I32)) { - throw TProtocolException("invalid type"); - } else { - value = s.ints.values[s.ints.index]; - } -} - -inline void Decoder::readI64(int64_t& value) { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_I64)) { - throw TProtocolException("invalid type"); - } - value = s.int64s.values[s.int64s.index]; -} - -inline void Decoder::readDouble(double& value) { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_DOUBLE)) { - throw TProtocolException("invalid type"); - } - int64_t i64 = s.int64s.values[s.int64s.index]; - value = bitwise_cast(i64); -} - -inline bool Decoder::beginReadString() { - auto& s = top(); - s.nextValue(); - if (UNLIKELY(s.type.typeVal != reflection::TYPE_STRING)) { - throw TProtocolException("invalid type"); - } - // Interned strings only occur in structs, - // TODO(tudorb): Relax? - return (s.state == IN_FIELD && - s.str.fieldState == DecoderState::FS_INTERNED_STRING); -} - -template -inline void Decoder::readString(StrType& str) { - if (beginReadString()) { - // interned - auto& s = top(); - auto sp = s.internedStrings.values[s.internedStrings.index]; - str.assign(sp.data(), sp.size()); - } else { - // not interned - str.clear(); - int64_t len = top().type.length; - DCHECK(len >= 0 || len == kTerminated); - if (len == kTerminated) { - char terminator = top().type.terminator; - const uint8_t* term = nullptr; - while (!term) { - auto p = cursor_.peek(); - if (p.second == 0) throw TLibraryException("eof"); - term = static_cast( - memchr(p.first, terminator, p.second)); - size_t n = term ? term - p.first : p.second; - str.append(reinterpret_cast(p.first), n); - cursor_.skip(n); - top().bytesRead += n; - } - } else { - while (len) { - auto p = cursor_.peek(); - if (p.second == 0) throw TLibraryException("eof"); - auto n = std::min(len, static_cast(p.second)); - str.append(reinterpret_cast(p.first), n); - cursor_.skip(n); - top().bytesRead += n; - len -= n; - } - } - } -} - -inline Decoder::DecoderState& Decoder::top() { - DCHECK(!stack_.empty()); - return stack_.back(); -} - -inline void Decoder::pop() { - DCHECK(!stack_.empty()); - size_t bytesRead = stack_.back().bytesRead; - stack_.pop_back(); - if (stack_.empty()) { - bytesRead_ = bytesRead; - } else { - top().bytesRead += bytesRead; - } -} - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_INL_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/Decoder.h b/thrift/lib/cpp/protocol/neutronium/Decoder.h deleted file mode 100644 index de0edff68d..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Decoder.h +++ /dev/null @@ -1,239 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_H_ - -#include "thrift/lib/cpp/protocol/neutronium/Utils.h" -#include "thrift/lib/cpp/protocol/neutronium/InternTable.h" -#include "thrift/lib/cpp/protocol/neutronium/Schema.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "folly/FBString.h" -#include "folly/Range.h" -#include "folly/small_vector.h" -#include "folly/experimental/io/Cursor.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -class Decoder { - public: - explicit Decoder(const Schema* schema, const InternTable* internTable, - folly::IOBuf* buf); - void setRootType(int64_t type); - - void readStructBegin(); - void readStructEnd(); - - void readFieldBegin(TType& fieldType, int16_t& fieldId); - void readFieldEnd(); - - void readMapBegin(TType& keyType, TType& valType, uint32_t& size); - void readMapEnd(); - - void readListBegin(TType& elemType, uint32_t& size); - void readListEnd(); - - void readSetBegin(TType& elemType, uint32_t& size); - void readSetEnd(); - - void readBool(bool& value); - void readByte(int8_t& value); - void readI16(int16_t& value); - void readI32(int32_t& i32); - void readI64(int64_t& i64); - void readDouble(double& dub); - - template - void readString(StrType& str); - - void readBinary(std::string& str) { - readString(str); - } - - size_t bytesRead() const { - return bytesRead_; - } - - private: - bool beginReadString(); // returns true if interned - - const Schema* schema_; - const InternTable* internTable_; - folly::io::RWPrivateCursor cursor_; - int64_t rootType_; - - enum State { - IN_STRUCT, - IN_FIELD, - IN_MAP_KEY, - IN_MAP_VALUE, - IN_LIST_VALUE, - IN_SET_VALUE, - }; - - static const int64_t kVariableLength = -1; - static const int64_t kTerminated = -2; - - struct TypeInfo { - TypeInfo() - : typeVal(reflection::TYPE_VOID), - length(kVariableLength), - dataType(nullptr), - terminator('\0') { } - TypeInfo(const Schema* schema, int64_t t); - /* implicit */ TypeInfo(int64_t t); - reflection::Type type() const { - return reflection::getType(typeVal); - } - TType ttype() const { - return toTType(type()); - } - - int64_t typeVal; - int64_t length; - const DataType* dataType; - char terminator; - }; - - static const size_t kIntInline = 8; - static const size_t kInt64Inline = 8; - static const size_t kByteInline = 8; - static const size_t kFixedInt16Inline = 8; - static const size_t kFixedInt32Inline = 8; - static const size_t kFixedInt64Inline = 8; - static const size_t kBoolInline = 8; - static const size_t kStringInline = 8; - - struct DecoderState { - DecoderState(const Schema* schema, int64_t type, - const DataType* dataType, uint32_t size); - DecoderState(DecoderState&&) = default; - DecoderState& operator=(DecoderState&&) = default; - - enum FieldState { - FS_START, - FS_INT, - FS_INT64, - FS_BYTE, - FS_BOOL, - FS_STRICT_ENUM, - FS_INTERNED_STRING, - FS_STRING, - FS_END - }; - - const DataType* dataType; - State state; - - TypeInfo type; - - size_t bytesRead; - - struct TypeStateBase { - TypeStateBase() : count(0), index(-1) { } - size_t count; - ssize_t index; - }; - - template - struct TypeState : public TypeStateBase { - folly::small_vector values; - }; - - TypeState ints; // int16_t, int32_t - TypeState int64s; // int64_t, double - TypeState bytes; // int8_t - size_t boolStartBit; // offset of first bit from bools in bools.values - TypeState bools; // bool - TypeState strictEnums; - size_t totalStrictEnumBits; - TypeState vars; // variable-length - TypeState internedStrings; - TypeStateBase strings; // non-interned strings and user-defined types - - // TODO(tudorb): Make Struct and List into a union, but as these types are - // non-POD, the union would have a deleted copy/move constructor, - // copy/move assignment operator, and destructor, which meanns that - // DecoderState would have to have them user-defined in order to insert - // DecoderState in containers, bleh. - - typedef - folly::small_vector, 8> - TagVec; - - typedef - folly::small_vector, 8> - FullTagVec; - - struct Struct { - FieldState fieldState; - int16_t tag; - - TagVec intTags; - TagVec int64Tags; - TagVec byteTags; - TagVec boolTags; - FullTagVec strictEnumTags; - - FullTagVec stringTags; - FullTagVec internedStringTags; - - TagVec fixedInt16Tags; - TagVec fixedInt32Tags; - TagVec fixedInt64Tags; - } str; - struct List { - uint32_t remaining; - TypeInfo mapKeyType; - TypeInfo valueType; - } list; - - template - void setStateList(T& ts); - - template - bool setStateStruct(TS& ts, const TV& tv, FieldState nextState); - - bool nextField(); - void nextValue(); - void addType(TypeInfo& tinfo, - const StructField& field, int16_t tag, uint32_t count); - - private: - void setLength(); - void nextList(); - bool nextStruct(); - }; - - size_t bytesRead_; - static const size_t kStackInline = 8; - folly::small_vector stack_; - - void readBoolsAndStrictEnums(size_t skipBits); - void read(); - void push(reflection::Type expected, int64_t type, uint32_t size); - void pop(); - DecoderState& top(); - uint32_t peekElementCount(); - int64_t nextType(); - std::pair ensure(size_t n); -}; - - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#define THRIFT_INCLUDE_DECODER_INL -#include "thrift/lib/cpp/protocol/neutronium/Decoder-inl.h" -#undef THRIFT_INCLUDE_DECODER_INL - - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_DECODER_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/Encoder-inl.h b/thrift/lib/cpp/protocol/neutronium/Encoder-inl.h deleted file mode 100644 index a70a8a9dbf..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Encoder-inl.h +++ /dev/null @@ -1,357 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_INL_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_INL_H_ - -#ifndef THRIFT_INCLUDE_ENCODER_INL -#error This file may only be included from Encoder.h -#endif - -#include "folly/Conv.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -inline void Encoder::writeFieldBegin(const char* name, TType fieldType, - int16_t fieldId) { - auto& s = top(); - DCHECK(s.state == IN_STRUCT); - s.field = s.dataType->fields.at(fieldId); - s.tag = fieldId; - s.state = IN_FIELD; -} - -inline void Encoder::writeFieldEnd() { - auto& s = top(); - DCHECK(s.state == DONE_FIELD); - s.tag = 0; - s.field.clear(); - s.state = IN_STRUCT; -} - -inline void Encoder::writeFieldStop() { - auto& s = top(); - DCHECK(s.state == IN_STRUCT); - flush(); -} - -inline bool Encoder::EncoderState::inDataState() const { - return (state == IN_FIELD || - state == IN_MAP_KEY || - state == IN_MAP_VALUE || - state == IN_LIST_VALUE || - state == IN_SET_VALUE); -} - -inline bool Encoder::EncoderState::inFlushableState() const { - return (state == IN_STRUCT || - state == IN_MAP_KEY || - state == IN_LIST_VALUE || - state == IN_SET_VALUE); -} - -inline void Encoder::EncoderState::dataWritten() { - switch (state) { - case IN_FIELD: - state = DONE_FIELD; - break; - case IN_MAP_KEY: - state = IN_MAP_VALUE; - field.type = dataType->valueType; - break; - case IN_MAP_VALUE: - state = IN_MAP_KEY; - field.type = dataType->mapKeyType; - break; - case IN_LIST_VALUE: - break; - case IN_SET_VALUE: - break; - default: - LOG(FATAL) << "Invalid state " << state; - } -} - -template -inline size_t findIndex(const C& container, T val) { - auto pos = container.find(val); - if (pos == container.end()) throw std::out_of_range("not found"); - return pos - container.begin(); -} - -inline void Encoder::EncoderState::markFieldSet() { - // only useful for structs - if (state != IN_FIELD || field.isRequired) return; - optionalSet[findIndex(dataType->optionalFields, tag)] = true; -} - -template -inline void Encoder::EncoderState::checkType() const { - throw TLibraryException(folly::to("Invalid type ", field.type)); -} - -template -inline void Encoder::EncoderState::checkType(reflection::Type t, - Args... tail) const { - if (t == reflection::getType(field.type)) return; - checkType(tail...); -} - -template -inline void Encoder::EncoderState::appendToOutput(const Vec& vec) { - size_t bytes = vec.size() * sizeof(typename Vec::value_type::second_type); - for (auto& p : vec) { - appender.writeBE(p.second); - } - bytesWritten += bytes; -} - -inline void Encoder::writeMapBegin(TType keyType, TType valType, - uint32_t size) { - push(reflection::TYPE_MAP, topType(), size); -} - -inline void Encoder::writeMapEnd() { - DCHECK_EQ(top().state, IN_MAP_KEY); - flush(); - pop(); -} - -inline void Encoder::writeListBegin(TType elemType, uint32_t size) { - push(reflection::TYPE_LIST, topType(), size); -} - -inline void Encoder::writeListEnd() { - DCHECK_EQ(top().state, IN_LIST_VALUE); - flush(); - pop(); -} - -inline void Encoder::writeSetBegin(TType elemType, uint32_t size) { - push(reflection::TYPE_SET, topType(), size); -} - -inline void Encoder::writeSetEnd() { - DCHECK_EQ(top().state, IN_SET_VALUE); - flush(); - pop(); -} - -inline void Encoder::writeStructBegin(const char* name) { - push(reflection::TYPE_STRUCT, topType(), 0); -} - -inline void Encoder::writeStructEnd() { - DCHECK_EQ(top().state, FLUSHED); - // writeFieldStop() called flush() - pop(); -} - -inline void Encoder::push(reflection::Type rtype, int64_t type, - uint32_t size) { - DCHECK(stack_.empty() || top().inDataState()); - if (reflection::getType(type) != rtype) { - throw TLibraryException(folly::to( - "Invalid aggregate type ", reflection::getType(type), - " expected ", rtype)); - } - - const DataType* dt = &(schema_->map().at(type)); - stack_.emplace_back(new EncoderState(type, dt, size)); -} - -inline void Encoder::pop() { - auto& s = top(); - DCHECK_EQ(s.state, FLUSHED); - int64_t size = s.dataType->fixedSize; - DCHECK(size == -1 || size == s.buf->computeChainDataLength()); - size_t bytesWritten = s.bytesWritten; - DCHECK_EQ(bytesWritten, s.buf->computeChainDataLength()); - auto buf = std::move(s.buf); - stack_.pop_back(); - if (stack_.empty()) { - outputBuf_->prependChain(std::move(buf)); - bytesWritten_ = bytesWritten; - } else { - writeData(std::move(buf)); - top().bytesWritten += bytesWritten; - } -} - -inline Encoder::EncoderState& Encoder::top() { - DCHECK(!stack_.empty()); - DCHECK(stack_.back()); - return *stack_.back(); -} - -inline const Encoder::EncoderState& Encoder::top() const { - DCHECK(!stack_.empty()); - DCHECK(stack_.back()); - return *stack_.back(); -} - -inline int64_t Encoder::topType() const { - return (stack_.empty() ? rootType_ : top().field.type); -} - -inline void Encoder::writeBool(bool v) { - auto& s = top(); - DCHECK(s.inDataState()); - s.checkType(reflection::TYPE_BOOL); - s.markFieldSet(); - s.bools.emplace_back(s.tag, v); - s.dataWritten(); -} - -inline void Encoder::writeByte(int8_t v) { - auto& s = top(); - DCHECK(s.inDataState()); - s.markFieldSet(); - s.checkType(reflection::TYPE_BYTE); - s.bytes.emplace_back(s.tag, v); - s.dataWritten(); -} - -inline void Encoder::writeI16(int16_t v) { - auto& s = top(); - DCHECK(s.inDataState()); - s.checkType(reflection::TYPE_I16); - s.markFieldSet(); - if (s.field.isFixed) { - s.fixedInt16s.emplace_back(s.tag, v); - } else { - s.varInts.emplace_back(s.tag, v); - } - s.dataWritten(); -} - -inline void Encoder::writeI32(int32_t v) { - auto& s = top(); - DCHECK(s.inDataState()); - s.checkType(reflection::TYPE_I32, reflection::TYPE_ENUM); - s.markFieldSet(); - if (reflection::getType(s.field.type) == reflection::TYPE_ENUM && - s.field.isStrictEnum) { - auto& dt = schema_->map().at(s.field.type); - uint8_t nbits = dt.enumBits(); - uint32_t value = findIndex(dt.enumValues, v); - s.strictEnums.push_back({s.tag, {nbits, value}}); - s.totalStrictEnumBits += nbits; - } else { - if (s.field.isFixed) { - s.fixedInt32s.emplace_back(s.tag, v); - } else { - s.varInts.emplace_back(s.tag, v); - } - } - s.dataWritten(); -} - -inline void Encoder::writeI64(int64_t v) { - innerWriteI64(v, reflection::TYPE_I64); -} - -inline void Encoder::writeDouble(double v) { - innerWriteI64(bitwise_cast(v), reflection::TYPE_DOUBLE); -} - -inline void Encoder::innerWriteI64(int64_t v, reflection::Type expected) { - auto& s = top(); - DCHECK(s.inDataState()); - s.markFieldSet(); - s.checkType(expected); - if (s.field.isFixed) { - s.fixedInt64s.emplace_back(s.tag, v); - } else { - s.varInt64s.emplace_back(s.tag, v); - } - s.dataWritten(); -} - -namespace { -std::unique_ptr copyBufferToSize( - const void* data, size_t dataSize, size_t outSize, char pad) { - auto buf = folly::IOBuf::create(outSize); - dataSize = std::min(dataSize, outSize); - memcpy(buf->writableData(), data, dataSize); - if (dataSize < outSize) { - memset(buf->writableData() + dataSize, pad, outSize - dataSize); - } - buf->append(outSize); - return buf; -} - -std::unique_ptr copyBufferAndTerminate( - const void* data, size_t dataSize, char terminator) { - if (memchr(data, terminator, dataSize)) { - throw TProtocolException("terminator found in terminated string"); - } - // 1 byte of tailroom for the terminator - auto buf = folly::IOBuf::copyBuffer(data, dataSize, 0, 1); - buf->writableTail()[0] = terminator; - buf->append(1); - return buf; -} - -} // namespace - - -// TODO(tudorb): Zero-copy version -inline void Encoder::writeBytes(folly::StringPiece data) { - auto& s = top(); - DCHECK(s.inDataState()); - s.checkType(reflection::TYPE_STRING); - s.markFieldSet(); - if (s.field.isInterned) { - CHECK(internTable_); - s.varInternIds.emplace_back(s.tag, internTable_->add(data)); - } else if (s.field.isFixed) { - s.strings.emplace_back( - s.tag, copyBufferToSize(data.data(), data.size(), - s.field.fixedStringSize, s.field.pad)); - s.bytesWritten += s.field.fixedStringSize; - } else if (s.field.isTerminated) { - s.strings.emplace_back( - s.tag, copyBufferAndTerminate(data.data(), data.size(), - s.field.terminator)); - s.bytesWritten += data.size() + 1; - } else { - s.varLengths.emplace_back(s.tag, data.size()); - s.strings.emplace_back( - s.tag, folly::IOBuf::copyBuffer(data.data(), data.size())); - s.bytesWritten += data.size(); - } - s.dataWritten(); -} - -inline void Encoder::writeData(std::unique_ptr&& data) { - auto& s = top(); - DCHECK(s.inDataState()); - s.markFieldSet(); - s.strings.emplace_back(s.tag, std::move(data)); - s.dataWritten(); -} - -inline void Encoder::flush() { - auto& s = top(); - DCHECK(s.inFlushableState()); - if (s.state == IN_STRUCT) { - // TODO(tudorb): Check that all required fields were actually specified. - flushStruct(); - } - flushData(s.state == IN_STRUCT); - s.state = FLUSHED; -} - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_INL_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/Encoder.h b/thrift/lib/cpp/protocol/neutronium/Encoder.h deleted file mode 100644 index be2a5590ea..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Encoder.h +++ /dev/null @@ -1,180 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_H_ - -#include "thrift/lib/cpp/protocol/neutronium/Utils.h" -#include "thrift/lib/cpp/protocol/neutronium/Schema.h" -#include "thrift/lib/cpp/protocol/neutronium/InternTable.h" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "folly/FBString.h" -#include "folly/Range.h" -#include "folly/experimental/io/IOBuf.h" -#include "folly/experimental/io/Cursor.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -class Encoder { - public: - Encoder(const Schema* schema, InternTable* internTable, folly::IOBuf* buf); - void setRootType(int64_t rootType); - - // Similar interface to the writing part of TProtocol - void writeStructBegin(const char* name); - void writeStructEnd(); - - void writeFieldBegin(const char* name, TType fieldType, int16_t fieldId); - void writeFieldEnd(); - void writeFieldStop(); - - void writeMapBegin(TType keyType, TType valType, uint32_t size); - void writeMapEnd(); - void writeListBegin(TType elemType, uint32_t size); - void writeListEnd(); - void writeSetBegin(TType elemType, uint32_t size); - void writeSetEnd(); - - void writeBool(bool value); - void writeByte(int8_t byte); - void writeI16(int16_t i16); - void writeI32(int32_t i32); - void writeI64(int64_t i64); - void writeDouble(double dub); - - void writeBinary(const std::string& str) { - writeString(str); - } - template - void writeString(const StrType& str) { - writeBytes(str); - } - - /** - * Return number of bytes written. Non-zero only at root level, after - * the final writeStructEnd(). - */ - size_t bytesWritten() const { - return bytesWritten_; - } - - private: - void innerWriteI64(int64_t i64, reflection::Type expected); - - void writeData(std::unique_ptr&& data); - void markFieldSet(); - - void writeBytes(folly::StringPiece data); - - int32_t intern(folly::StringPiece data); - - const Schema* schema_; - int64_t rootType_; - size_t bytesWritten_; - - enum State { - IN_STRUCT, - IN_FIELD, - DONE_FIELD, - IN_MAP_KEY, - IN_MAP_VALUE, - IN_LIST_VALUE, - IN_SET_VALUE, - FLUSHED, - }; - - struct EncoderState { - EncoderState(int64_t type, const DataType* dt, uint32_t size); - - const DataType* dataType; - State state; - // TODO(tudorb): Check type_ - int16_t tag; - StructField field; - std::unique_ptr buf; - folly::io::Appender appender; - - std::vector> bools; // bool - struct StrictEnum { - uint8_t bits; - uint32_t value; - }; - // strict (bit-field) enums - std::vector> strictEnums; - size_t totalStrictEnumBits; - std::vector> bytes; // byte - - // Integer fields that were requested to be represented as fixed-length - std::vector> fixedInt16s; // i16 - std::vector> fixedInt32s; // i32 - std::vector> fixedInt64s; // i64, double - - // Integer fields that are represented as variable-length (GroupVarint) - std::vector> varInts; // i16, i32 - std::vector> varInt64s; // i64, double - - // Lengths of strings of unknown size, represented as GroupVarint - std::vector> varLengths; - - // Ids of interned strings, represented as GroupVarint - // (see InternTable.h) - std::vector> varInternIds; - - // Strings AND child elements (structs, lists, sets, maps) - // Note that only strings can be of unknown size (and thus use up one - // entry in varLengths, above); we always fully decode children and so - // we determine their size that way - std::vector>> strings; - - // Bitset (see Utils.h) of which optional fields are set; the index is - // the index in DataType::optionalFields. - std::vector optionalSet; - - size_t bytesWritten; - - bool inDataState() const; - void dataWritten(); - - bool inFlushableState() const; - void markFieldSet(); - - template void checkType() const; - template void checkType(reflection::Type t, - Args... tail) const; - - template - void appendToOutput(const Vec& vec); - }; - - std::vector> stack_; - void push(reflection::Type expected, int64_t type, uint32_t size); - void pop(); - int64_t topType() const; - EncoderState& top(); - const EncoderState& top() const; - - void flush(); - void flushBitValues(); - void flushStruct(); - void flushData(bool isStruct); - - InternTable* internTable_; - folly::IOBuf* outputBuf_; -}; - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - - -#define THRIFT_INCLUDE_ENCODER_INL -#include "thrift/lib/cpp/protocol/neutronium/Encoder-inl.h" -#undef THRIFT_INCLUDE_ENCODER_INL - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_ENCODER_H_ */ diff --git a/thrift/lib/cpp/protocol/neutronium/InternTable.h b/thrift/lib/cpp/protocol/neutronium/InternTable.h deleted file mode 100644 index 48ad032373..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/InternTable.h +++ /dev/null @@ -1,102 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_INTERNTABLE_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_INTERNTABLE_H_ - -#include -#include -#include -#include "folly/Range.h" -#include "folly/experimental/io/IOBuf.h" -#include "folly/experimental/io/Cursor.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -/** - * Interned string table. - * - * Strings are stored in a chain of IOBufs, so serializing and deserializing - * the InternTable is fast and easy. - */ -class InternTable { - public: - InternTable(); - - /** - * Add a string to the table, returning the id. - */ - uint32_t add(folly::StringPiece str); - - /** - * Get a string from the table, by id; throws std::out_of_range if the - * id is invalid. - */ - folly::StringPiece get(uint32_t id) const { - return strings_.at(id); - } - - /** - * Serialize the table to a IOBuf chain. - * Note that part of the chain may be shared with the InternTable, so - * you must call unshare() on the returned buffers if you want to - * write to them. - */ - std::unique_ptr serialize(); - - /** - * Load the table from a IOBuf chain. - * Takes ownership of the IOBuf chain. - * InternTable will call unshare() appropriately before writing to - * buffers from the provided chain. - */ - void deserialize(std::unique_ptr&& data); - - /** - * Clear the table. - */ - void clear(); - - private: - // Performance optimization to reduce the number of calls to unshare() / - // unshareOne(), which folly::io::Cursor benchmarks have shown to be - // somewhat expensive. Given that we know that we only write to the tail - // of the IOBuf chain, we can often tell with certainty that the tail - // is private to us and so we don't need to check or call unshareOne(). - bool maybeShared_; - std::unique_ptr head_; - std::vector strings_; - - typedef - std::unordered_map - StringMap; - - // Only allocate writer if needed (when actually add()ing) - struct Writer { - template - /* implicit */ Writer(Args... args) : appender(args...) { } - folly::io::Appender appender; - StringMap map; - }; - std::unique_ptr writer_; - - // Not copiable; not movable - InternTable(const InternTable&) = delete; - InternTable(InternTable&&) = delete; - InternTable& operator=(const InternTable&) = delete; - InternTable& operator=(InternTable&&) = delete; - -}; - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_INTERNTABLE_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/README b/thrift/lib/cpp/protocol/neutronium/README deleted file mode 100644 index b5ff365e85..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/README +++ /dev/null @@ -1,67 +0,0 @@ -Neutronium: a very dense encoding of Thrift objects - -Neutronium is a Thrift encoding format optimized for space at the expense of -speed. It achieves high efficiency in a few ways: - -1. It does not encode type and tag information. This is stored out of line in -a Schema object, which must be provided at both encoding and decoding time. -If encoding many Thrift objects, you can transmit / store the Schema only -once. The Schema (in thrift/lib/thrift/reflection.thrift) is itself a -Thrift object, and can be serialized / deserialized in the usual way. - -2. It encodes data very compactly. Bytes use one byte each; larger numbers -(i16, i32, i64, double) use variable-length encoding (GroupVarint). Booleans -use one bit each. We also encode one bit for every optional field that exists -in the structure definition (indicating whether the field is set or not). -Strings can be encoded in a variety of formats, see below. - -3. Aggregates (lists, maps, sets) are encoded efficiently -- they are encoded -like a structure with a variable number of fields. So list takes -advantage of GroupVarint encoding among consecutive values. - -4. Strings can be interned: when encoding multiple strings, we can detect -duplicates and store only an ID. This requires using an InternTable and -passing the same InternTable to the encoder and decoder (the InternTable -can be easily serialized and deserialized). - -Neutronium is backwards compatible as long as the schema is identical from -encoding to decoding, and the changes you made to the Thrift definition are -backwards compatible (that is, fields were added, removed, or renamed, but -field ids remained the same) - -Configuration: - -Neutronium can be configured by using field attributes in your Thrift -definition: - -struct Foo { - 1: i32 a (neutronium.fixed = 1), -} - -Attributes for number fields: - neutronium.fixed = 1 - Encode the number as a fixed-length value (i16 takes 2 bytes, i32 - takes 4 bytes, i64 takes 8 bytes) instead of using Varint encoding - -Attributes for string fields: - neutronium.fixed = - neutronium.pad = 'X' - Do not encode the string length, assume that all strings have length - . Strings longer than are truncated; strings - shorter than are padded with 'X' (default: the null byte, '\0'). - Use this when you expect that all / most strings have a fixed length. - - neutronium.terminator = 'X' - Do not encode the string length; store strings terminated with a - terminator ('\0' will likely be a popular choice). Encoding strings that - contain the terminator is an error. - - neutronium.intern = 1 - Intern strings; requires a non-NULL InternTable. - -Attributes for enum fields: - neutronium.strict = 1 - Encode the enum using as few bits as necessary to encode all possible - values; note that it becomes an error to encode an enum value that is not - specified in the Thrift definition. - diff --git a/thrift/lib/cpp/protocol/neutronium/Schema-inl.h b/thrift/lib/cpp/protocol/neutronium/Schema-inl.h deleted file mode 100644 index 8ba257e719..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Schema-inl.h +++ /dev/null @@ -1,32 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_INL_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_INL_H_ - -#ifndef THRIFT_INCLUDE_SCHEMA_INL -#error This file may only be included from Schema.h -#endif - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -namespace detail { -extern const TType typeToTType[]; -} // namespace detail - -inline TType toTType(reflection::Type t) { - return detail::typeToTType[t]; -} - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_INL_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/Schema.h b/thrift/lib/cpp/protocol/neutronium/Schema.h deleted file mode 100644 index aea16993ad..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Schema.h +++ /dev/null @@ -1,111 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_H_ - -#include -#include "boost/interprocess/containers/flat_map.hpp" -#include "boost/interprocess/containers/flat_set.hpp" -#include "thrift/lib/cpp/protocol/TProtocol.h" -#include "thrift/lib/cpp/Reflection.h" -#include "external/glog/logging.h" -#include "folly/Bits.h" -#include "thrift/lib/cpp/protocol/neutronium/Utils.h" - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -struct StructField { - StructField() - : type(0), - isRequired(false), - isInterned(false), - isFixed(false), - isTerminated(false), - fixedStringSize(0), - pad('\0'), - terminator('\0') { - } - - void setFlags(const reflection::DataType& rtype, - const reflection::StructField& rfield); - - void clear() { - *this = StructField(); - } - - // from reflection::StructField - int64_t type; - bool isRequired : 1; - bool isInterned : 1; - - // numbers: not varint-encoded - // strings: fixed size, fixedStringSize bytes, padded with 'pad' - bool isFixed : 1; - - // strings: terminated with 'terminator' which may not occur in the string - bool isTerminated : 1; - - // enums: strict (bitfield) encoding - bool isStrictEnum : 1; - - uint32_t fixedStringSize; - char pad; - char terminator; -}; - -struct DataType { - DataType() : mapKeyType(0), valueType(0), fixedSize(-1) { } - - // from reflection::StructField - boost::container::flat_map fields; - int64_t mapKeyType; - int64_t valueType; - // generated - int64_t fixedSize; // -1 = not fixed size - boost::container::flat_set optionalFields; - boost::container::flat_set enumValues; - - // Minimum number of bits needed to represent all enum values - // 0 if there's only one possible value -- there's nothing to encode! - size_t enumBits() const { - return enumValues.empty() ? 0 : folly::findLastSet(enumValues.size() - 1); - } -}; - -class Schema { - public: - typedef std::unordered_map Map; - Schema() { } - explicit Schema(const reflection::Schema& rschema); - void add(const reflection::Schema& rschema); - - const Map& map() const { return map_; } - - private: - int64_t fixedSizeForField(const StructField& field) const; - - int64_t add(const reflection::Schema& rschema, int64_t type); - void add(const reflection::Schema& rschema, int64_t type, - const reflection::DataType& dt); - Map map_; -}; - -TType toTType(reflection::Type t); - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#define THRIFT_INCLUDE_SCHEMA_INL -#include "thrift/lib/cpp/protocol/neutronium/Schema-inl.h" -#undef THRIFT_INCLUDE_SCHEMA_INL - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_SCHEMA_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/Utils.h b/thrift/lib/cpp/protocol/neutronium/Utils.h deleted file mode 100644 index d1f6dc53e2..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/Utils.h +++ /dev/null @@ -1,110 +0,0 @@ -/** - * Copyright 2012 Facebook - * @author Tudor Bosman (tudorb@fb.com) - */ - -#ifndef THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_UTILS_H_ -#define THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_UTILS_H_ - -#include -#include -#include -#include - -namespace apache { -namespace thrift { -namespace protocol { -namespace neutronium { - -// Helper functions for using an array of uint8_t values as a bitset - -// byte index -constexpr inline size_t byteIndex(size_t bit) { - return bit / 8; -} - -// offset within byte -constexpr inline size_t bitOffset(size_t bit) { - return bit % 8; -} - -// number of bytes needed to represent bitCount bits (round up) -constexpr inline size_t byteCount(size_t bitCount) { - return bitCount / 8 + (bitCount % 8 != 0); -} - -// set bit -inline void setBit(uint8_t* p, size_t bit) { - p[byteIndex(bit)] |= (1 << bitOffset(bit)); -} - -inline void setBits(uint8_t* p, size_t bit, size_t count, uint32_t value) { - assert(value < (1 << count)); - while (count) { - size_t index = byteIndex(bit); - size_t offset = bitOffset(bit); - size_t countInThisByte = std::min(count, 8 - offset); - // Extract "countInThisByte" bits from value - uint8_t mask = (1 << countInThisByte) - 1; - uint8_t v = value & mask; - // Wipe out these bits, then set them to the new value - p[index] = (p[index] & ~(mask << offset)) | (v << offset); - - value >>= countInThisByte; - bit += countInThisByte; - count -= countInThisByte; - } -} - -inline uint32_t getBits(uint8_t* p, size_t bit, size_t count) { - uint32_t value = 0; - size_t shift = 0; - while (count) { - size_t index = byteIndex(bit); - size_t offset = bitOffset(bit); - size_t countInThisByte = std::min(count, 8 - offset); - uint8_t mask = (1 << countInThisByte) - 1; - uint8_t v = (p[index] & (mask << offset)) >> offset; - - value |= (v << shift); - shift += countInThisByte; - bit += countInThisByte; - count -= countInThisByte; - } - return value; -} - -// clear bit -inline void clearBit(uint8_t* p, size_t bit) { - p[byteIndex(bit)] &= ~(1 << bitOffset(bit)); -} - -// test bit -inline bool testBit(const uint8_t* p, size_t bit) { - return p[byteIndex(bit)] & (1 << bitOffset(bit)); -} - -// Overloads for vector, array, or anything else that has -// a working operator[] -template -inline void setBit(T& p, size_t bit) { - setBit(&p[0], bit); -} - -template -inline void clearBit(T& p, size_t bit) { - clearBit(&p[0], bit); -} - -template -inline bool testBit(const T& p, size_t bit) { - return testBit(&p[0], bit); -} - -} // namespace neutronium -} // namespace protocol -} // namespace thrift -} // namespace apache - -#endif /* THRIFT_LIB_CPP_PROTOCOL_NEUTRONIUM_UTILS_H_ */ - diff --git a/thrift/lib/cpp/protocol/neutronium/intern_table.thrift b/thrift/lib/cpp/protocol/neutronium/intern_table.thrift deleted file mode 100644 index 4951c990c6..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/intern_table.thrift +++ /dev/null @@ -1,6 +0,0 @@ -namespace cpp apache.thrift.protocol.neutronium - -struct InternTableSizes { - 1: required list sizes, -} - diff --git a/thrift/lib/cpp/protocol/neutronium/test/neutronium_test.thrift b/thrift/lib/cpp/protocol/neutronium/test/neutronium_test.thrift deleted file mode 100644 index ec04995365..0000000000 --- a/thrift/lib/cpp/protocol/neutronium/test/neutronium_test.thrift +++ /dev/null @@ -1,80 +0,0 @@ -namespace cpp apache.thrift.protocol.neutronium.test - -cpp_include "folly/FBString.h" - -struct TestFixedSizeStruct1 { - 1: bool a, - 2: bool b, - 3: bool c, - 4: byte d, -} - -struct TestFixedSizeStruct2 { - 1: i32 a (neutronium.fixed = 1), - 2: i64 b (neutronium.fixed = 1), -} - -struct TestNotFixedSizeStruct2 { - 1: i32 a, - 2: i64 b, -} - -struct TestStruct1 { - 1: bool a, - 2: optional bool b, - 3: i32 c (neutronium.fixed = 1), - 4: optional i32 d, - 5: i64 e, - 6: optional i64 f, - 7: string g -} - -struct TestStruct2 { - 1: i32 a, - 2: TestStruct1 b, - 3: string c, - 4: list d, - 5: list e, - 6: map f, -} - -struct TestStringEncoding1 { - 1: i32 a, - 2: string b, - 3: string c (neutronium.intern = 1), - 4: string d1 (neutronium.fixed = 10, neutronium.pad = 'X'), - 5: string d2 (neutronium.fixed = 10, neutronium.pad = 'X'), - 6: string e (neutronium.terminator = 'X'), -} - -enum Foo { - HELLO = 1, // 0 - WORLD = 42, // 1 - MEOW = 23456, // 3 - GOODBYE = 12345 // 2 -} - -struct TestEnumEncoding1 { - 1: Foo a, - 2: Foo b (neutronium.strict = 1), - 3: bool c, - 4: i32 d -} - -struct TestEnumEncoding2 { - 1: bool a, - 2: Foo b (neutronium.strict = 1), - 4: optional Foo d (neutronium.strict = 1), - 5: Foo e (neutronium.strict = 1), -} - -struct BenchStruct1 { - 1: required i32 a, -} - -struct BenchStruct2 { - 1: optional i32 a, - 4: optional string b, - 5: optional list c -} - diff --git a/thrift/lib/cpp/server/TConnectionContext.h b/thrift/lib/cpp/server/TConnectionContext.h deleted file mode 100644 index 41da039ccc..0000000000 --- a/thrift/lib/cpp/server/TConnectionContext.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TCONNECTIONCONTEXT_H_ -#define THRIFT_TCONNECTIONCONTEXT_H_ 1 - -#include - -#include -#include "thrift/lib/cpp/protocol/TProtocol.h" - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -} - -namespace protocol { -class TProtocol; -} - -namespace server { - -class TConnectionContext { - public: - TConnectionContext() - : userData_(NULL) - , destructor_(NULL) {} - - virtual ~TConnectionContext() { - cleanupUserData(); - } - - // expose getPeerAddress() defined in TRpcTransportContext - - virtual const transport::TSocketAddress* getPeerAddress() const = 0; - - virtual boost::shared_ptr getInputProtocol() const = 0; - - virtual boost::shared_ptr getOutputProtocol() const = 0; - /** - * Get the user data field. - */ - void* getUserData() const { - return userData_; - } - - /** - * Set the user data field. - * - * @param data The new value for the user data field. - * @param destructor A function pointer to invoke when the connection - * context is destroyed. It will be invoked with the - * contents of the user data field. - * - * @return Returns the old user data value. - */ - virtual void* setUserData(void* data, void (*destructor)(void*) = NULL) { - void* oldData = userData_; - userData_ = data; - destructor_ = destructor; - return oldData; - } - - protected: - void cleanupUserData() { - if (destructor_) { - destructor_(userData_); - destructor_ = NULL; - } - userData_ = NULL; - } - - private: - void* userData_; - void (*destructor_)(void*); -}; - -}}} // apache::thrift::server - -#endif // THRIFT_TCONNECTIONCONTEXT_H_ diff --git a/thrift/lib/cpp/server/TNonblockingServer.h b/thrift/lib/cpp/server/TNonblockingServer.h deleted file mode 100644 index 18dce011a5..0000000000 --- a/thrift/lib/cpp/server/TNonblockingServer.h +++ /dev/null @@ -1,1165 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_SERVER_TNONBLOCKINGSERVER_H_ -#define THRIFT_SERVER_TNONBLOCKINGSERVER_H_ 1 - -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/transport/TSocket.h" -#include "thrift/lib/cpp/concurrency/ThreadManager.h" -#include "thrift/lib/cpp/concurrency/Thread.h" -#include "thrift/lib/cpp/concurrency/PosixThreadFactory.h" -#include "thrift/lib/cpp/concurrency/Mutex.h" -#include "thrift/lib/cpp/concurrency/ThreadLocal.h" -#include -#include -#include -#include -#include -#include -#include -#include // libevent -#include - - -namespace apache { namespace thrift { namespace server { - -using apache::thrift::transport::TMemoryBuffer; -using apache::thrift::transport::TSocket; -using apache::thrift::protocol::TProtocol; -using apache::thrift::concurrency::Runnable; -using apache::thrift::concurrency::ThreadManager; -using apache::thrift::concurrency::PosixThreadFactory; -using apache::thrift::concurrency::ThreadFactory; -using apache::thrift::concurrency::Thread; -using apache::thrift::concurrency::Mutex; -using apache::thrift::concurrency::Guard; - -/** - * This is a non-blocking server in C++ for high performance that - * operates a set of IO threads (by default only one). It assumes that - * all incoming requests are framed with a 4 byte length indicator and - * writes out responses using the same framing. - * - * It does not use the TServerTransport framework, but rather has socket - * operations hardcoded for use with select. - * - */ - - -/// Overload condition actions. -enum TOverloadAction { - T_OVERLOAD_NO_ACTION, ///< Don't handle overload */ - T_OVERLOAD_CLOSE_ON_ACCEPT, ///< Drop new connections immediately */ - T_OVERLOAD_DRAIN_TASK_QUEUE, ///< Drop some tasks from head of task queue */ - T_OVERLOAD_PAUSE_ACCEPTING ///< do not accept any new connections -}; - -class TNonblockingIOThread; -class TNonblockingServerObserver; - -class TNonblockingServer : public TServer { - private: - class TConnection; - - friend class TNonblockingIOThread; - private: - /// Listen backlog - static const int LISTEN_BACKLOG = 1024; - - /// Default limit on size of idle connection pool - static const int CONNECTION_STACK_LIMIT = -1; - - /// Default limit on frame size - static const int MAX_FRAME_SIZE = 256 * 1024 * 1024; - - /// Default limit on total number of connected sockets - static const int MAX_CONNECTIONS = INT_MAX; - - /// Default limit on connections in handler/task processing - static const int MAX_ACTIVE_PROCESSORS = INT_MAX; - - /// Default limit on the number of active requests on the server. - static const int MAX_ACTIVE_REQUESTS = INT_MAX; - - /// Default limit on memory usage - static const uint64_t MAX_MEMORY_USAGE_BYTES = ULONG_MAX; - - /// Default size of write buffer - static const int WRITE_BUFFER_DEFAULT_SIZE = 1024; - - /// Maximum size of read buffer allocated to idle connection (0 = unlimited) - static const int IDLE_READ_BUFFER_LIMIT = 8192; - - /// Maximum size of write buffer allocated to idle connection (0 = unlimited) - static const int IDLE_WRITE_BUFFER_LIMIT = 0; - - /// # of calls before resizing oversized buffers (0 = check only on close) - static const int RESIZE_BUFFER_EVERY_N = 0; - - /// # of IO threads to use by default - static const int DEFAULT_IO_THREADS = 1; - - /// File descriptor of an invalid socket - static const int INVALID_SOCKET = -1; - - /// # of IO threads this server will use - size_t numIOThreads_; - - /// Whether to set high scheduling priority for IO threads - bool useHighPriorityIOThreads_; - - /// Server socket file descriptor - int serverSocket_; - - /// Port server runs on - int port_; - - /// For processing via thread pool, may be NULL - boost::shared_ptr threadManager_; - - /// Is thread pool processing? - bool threadPoolProcessing_; - - // Factory to create the IO threads - boost::shared_ptr ioThreadFactory_; - - // Vector of IOThread objects that will handle our IO - std::vector > ioThreads_; - - // Index of next IO Thread to be used (for round-robin) - int nextIOThread_; - - // Synchronizes access to connection stack and similar data, such as - // numActiveRequests_. - Mutex connMutex_; - - /// Number of TConnection object we've created - size_t numTConnections_; - - /// Number of Connections processing or waiting to process - size_t numActiveProcessors_; - - /// Number of active/outstanding requests on the server. I.e., sum of requests - /// that are being processed, waiting to be processed and are waiting for the - /// reply to be sent out over the wire. - size_t numActiveRequests_; - - /// Limit for the number of requests that are being processed, waiting to be - /// processed, or are waiting for the reply to be sent out over the wire. - size_t maxActiveRequests_; - - /// listen backlog - int32_t listenBacklog_; - - /// Limit for how many TConnection objects to cache - /// 0 = infinite, -1 = none. - size_t connectionStackLimit_; - - /// Limit for number of connections processing or waiting to process - size_t maxActiveProcessors_; - - /// Limit for number of open connections - size_t maxConnections_; - - /// Limit for memory usage - uint64_t maxMemoryUsageBytes_; - - /// Limit for frame size - size_t maxFrameSize_; - - /// Time in milliseconds before an unperformed task expires (0 == infinite). - int64_t taskExpireTime_; - - /// Time in milliseconds to pause accepts for OVERLOAD_PAUSE_ACCEPTING - int pauseAcceptDuration_; - - /** - * Hysteresis for overload state. This is the fraction of the overload - * value that needs to be reached before the overload state is cleared; - * must be <= 1.0. - */ - double overloadHysteresis_; - - /// Action to take when we're overloaded. - TOverloadAction overloadAction_; - - /** - * The write buffer is initialized (and when idleWriteBufferLimit_ is checked - * and found to be exceeded, reinitialized) to this size. - */ - size_t writeBufferDefaultSize_; - - /** - * Max read buffer size for an idle TConnection. When we place an idle - * TConnection into connectionStack_ or on every resizeBufferEveryN_ calls, - * we will free the buffer (such that it will be reinitialized by the next - * received frame) if it has exceeded this limit. 0 disables this check. - */ - size_t idleReadBufferLimit_; - - /** - * Max write buffer size for an idle connection. When we place an idle - * TConnection into connectionStack_ or on every resizeBufferEveryN_ calls, - * we insure that its write buffer is <= to this size; otherwise we - * replace it with a new one of writeBufferDefaultSize_ bytes to insure that - * idle connections don't hog memory. 0 disables this check. - */ - size_t idleWriteBufferLimit_; - - /** - * Every N calls we check the buffer size limits on a connected TConnection. - * 0 disables (i.e. the checks are only done when a connection closes). - */ - int32_t resizeBufferEveryN_; - - /// Set if we are currently in an overloaded state. - bool overloaded_; - - /// Count of connections dropped since overload started - uint32_t nConnectionsDropped_; - - /// Count of connections dropped on overload since server started - uint64_t nTotalConnectionsDropped_; - - // Notification of various server events - boost::shared_ptr observer_; - - /** - * This is a stack of all the objects that have been created but that - * are NOT currently in use. When we close a connection, we place it on this - * stack so that the object can be reused later, rather than freeing the - * memory and reallocating a new object later. - */ - std::stack connectionStack_; - - /** - * This contains all existing TConnections, including the ones in the - * connectionStack_. - */ - std::tr1::unordered_set connectionSet_; - - /** - * Struct to help set socket options for - * TNonblockingServer::TConnection->TSocket sockets - */ - TSocket::Options sockOptHelper_; - - /** - * Thread-local data storage to track the current connection being processed. - */ - typedef concurrency::ThreadLocal< - TConnection, - concurrency::NoopThreadLocalManager > - ThreadLocalConnection; - ThreadLocalConnection currentConnection_; - - /** - * Called when server socket had something happen. We accept all waiting - * client connections on listen socket fd and assign TConnection objects - * to handle those requests. - * - * @param fd the listen socket. - * @param which the event flag that triggered the handler. - */ - void handleEvent(int fd, short which); - - void init(int port) { - serverSocket_ = -1; - numIOThreads_ = DEFAULT_IO_THREADS; - nextIOThread_ = 0; - useHighPriorityIOThreads_ = false; - port_ = port; - threadPoolProcessing_ = false; - numTConnections_ = 0; - numActiveProcessors_ = 0; - numActiveRequests_ = 0; - connectionStackLimit_ = CONNECTION_STACK_LIMIT; - maxActiveProcessors_ = MAX_ACTIVE_PROCESSORS; - maxActiveRequests_ = MAX_ACTIVE_REQUESTS; - maxConnections_ = MAX_CONNECTIONS; - maxMemoryUsageBytes_ = MAX_MEMORY_USAGE_BYTES; - maxFrameSize_ = MAX_FRAME_SIZE; - taskExpireTime_ = 0; - pauseAcceptDuration_ = 1; - overloadHysteresis_ = 0.8; - overloadAction_ = T_OVERLOAD_NO_ACTION; - writeBufferDefaultSize_ = WRITE_BUFFER_DEFAULT_SIZE; - idleReadBufferLimit_ = IDLE_READ_BUFFER_LIMIT; - idleWriteBufferLimit_ = IDLE_WRITE_BUFFER_LIMIT; - resizeBufferEveryN_ = RESIZE_BUFFER_EVERY_N; - overloaded_ = false; - nConnectionsDropped_ = 0; - nTotalConnectionsDropped_ = 0; - listenBacklog_ = LISTEN_BACKLOG; - - } - - size_t getWriteBufferBytesImpl() const; - size_t getReadBufferBytesImpl() const; - - protected: - - /// Increment the count of connections currently processing. - void incrementActiveProcessors() { - Guard g(connMutex_); - ++numActiveProcessors_; - } - - /// Decrement the count of connections currently processing. - void decrementActiveProcessors() { - Guard g(connMutex_); - if (numActiveProcessors_ > 0) { - --numActiveProcessors_; - } - } - - /// Increment the number of active requests on the server. - void incrementNumActiveRequests() { - Guard g(connMutex_); - ++numActiveRequests_; - } - - /// Decrement the number of active requests on the server. - void decrementNumActiveRequests() { - Guard g(connMutex_); - if (numActiveRequests_ > 0) { - --numActiveRequests_; - } - } - - public: - template - TNonblockingServer( - const boost::shared_ptr& processorFactory, - int port, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory) { - init(port); - } - - template - TNonblockingServer(const boost::shared_ptr& processor, - int port, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor) { - init(port); - } - - template - TNonblockingServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& protocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory) { - - init(port); - - setProtocolFactory(protocolFactory); - setThreadManager(threadManager); - } - - template - TNonblockingServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& duplexProtocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory) { - - init(port); - - setDuplexProtocolFactory(duplexProtocolFactory); - setThreadManager(threadManager); - } - - template - TNonblockingServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& protocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor) { - - init(port); - - setProtocolFactory(protocolFactory); - setThreadManager(threadManager); - } - - template - TNonblockingServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& duplexProtocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor) { - - init(port); - - setDuplexProtocolFactory(duplexProtocolFactory); - setThreadManager(threadManager); - } - - template - TNonblockingServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)): - TServer(processorFactory) { - - init(port); - - setDuplexTransportFactory(duplexTransportFactory); - setDuplexProtocolFactory(duplexProtocolFactory); - setThreadManager(threadManager); - } - - template - TNonblockingServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - int port, - const boost::shared_ptr& threadManager = - boost::shared_ptr(), - THRIFT_OVERLOAD_IF(Processor, TProcessor)): - TServer(processor) { - - init(port); - - setDuplexTransportFactory(duplexTransportFactory); - setDuplexProtocolFactory(duplexProtocolFactory); - setThreadManager(threadManager); - } - - void setThreadManager(boost::shared_ptr threadManager); - - boost::shared_ptr getThreadManager() { - return threadManager_; - } - - /** - * Sets the number of IO threads used by this server. Can only be used before - * the call to serve() and has no effect afterwards. We always use a - * PosixThreadFactory for the IO worker threads, because they must joinable - * for clean shutdown. - */ - void setNumIOThreads(size_t numThreads) { - numIOThreads_ = numThreads; - } - - /** Return whether the IO threads will get high scheduling priority */ - bool useHighPriorityIOThreads() const { - return useHighPriorityIOThreads_; - } - - /** Set whether the IO threads will get high scheduling priority. */ - void setUseHighPriorityIOThreads(bool val) { - useHighPriorityIOThreads_ = val; - } - - /** Return the number of IO threads used by this server. */ - size_t getNumIOThreads() const { - return numIOThreads_; - } - - /** - * Get the maximum number of unused TConnection we will hold in reserve. - * - * @return the current limit on TConnection pool size. - */ - size_t getConnectionStackLimit() const { - return connectionStackLimit_; - } - - /** - * Set the maximum number of unused TConnection we will hold in reserve. - * - * @param sz the new limit for TConnection pool size. - */ - void setConnectionStackLimit(size_t sz) { - connectionStackLimit_ = sz; - } - - bool isThreadPoolProcessing() const { - return threadPoolProcessing_; - } - - /** - * set the listen backlog - * - * @param listenBacklog the new listen backlog - */ - void setListenBacklog(int32_t listenBacklog) { - listenBacklog_ = listenBacklog; - } - - /** - * Return the count of sockets currently connected to. - * - * @return count of connected sockets. - */ - size_t getNumConnections() const { - return numTConnections_; - } - - /** - * Return the count of sockets currently connected to. - * - * @return count of connected sockets. - */ - size_t getNumActiveConnections() const { - return getNumConnections() - getNumIdleConnections(); - } - - /** - * Return the bytes in all connection's write buffer. - * - * @return bytes - */ - size_t getWriteBufferBytes() const { - concurrency::Guard g(connMutex_); - return getWriteBufferBytesImpl(); - } - - /** - * Return the bytes in all connection's read buffer. - * - * @return bytes - */ - size_t getReadBufferBytes() const { - concurrency::Guard g(connMutex_); - return getReadBufferBytesImpl(); - } - - /** - * Return the count of connection objects allocated but not in use. - * - * @return count of idle connection objects. - */ - size_t getNumIdleConnections() const { - return connectionStack_.size(); - } - - /** - * Return count of number of connections which are currently processing. - * This is defined as a connection where all data has been received and - * either assigned a task (when threading) or passed to a handler (when - * not threading), and where the handler has not yet returned. - * - * @return # of connections currently processing. - */ - size_t getNumActiveProcessors() const { - return numActiveProcessors_; - } - - /** - * Return the number of active/outstanding requests on the server. This - * includes requests that are processing, waiting to be processed and have - * been processed, but are waiting for the reply to be sent out over the wire. - * - * @return # of currently active requests. - */ - size_t getNumActiveRequests() const { - return numActiveRequests_; - } - - /** - * Get the maximum number of active requests. - * - * @return current setting. - */ - size_t getMaxActiveRequests() const { - return maxActiveRequests_; - } - - /** - * Set the maximum # of active requests allowed before overload. - * - * @param maxActiveRequsts new setting for maximum # of active requests. - */ - void setMaxActiveRequests(size_t maxActiveRequests) { - maxActiveRequests_ = maxActiveRequests; - } - - /** - * Get the maximum # of connections allowed before overload. - * - * @return current setting. - */ - size_t getMaxConnections() const { - return maxConnections_; - } - - /** - * Set the maximum # of connections allowed before overload. - * - * @param maxConnections new setting for maximum # of connections. - */ - void setMaxConnections(size_t maxConnections) { - maxConnections_ = maxConnections; - } - - /** - * Get the maximum # of connections waiting in handler/task before overload. - * - * @return current setting. - */ - size_t getMaxActiveProcessors() const { - return maxActiveProcessors_; - } - - /** - * Set the maximum # of connections waiting in handler/task before overload. - * - * @param maxActiveProcessors new setting for maximum # of active processes. - */ - void setMaxActiveProcessors(size_t maxActiveProcessors) { - maxActiveProcessors_ = maxActiveProcessors; - } - - /** - * Get the maximum memory usage allowed before overload. - * - * @return current setting. - */ - uint64_t getMaxMemoryUsageBytes() const { - return maxMemoryUsageBytes_; - } - - /** - * Set the maximum memory usage allowed before overload. - * - * @param maxMemoryUsage new setting for maximum memory usage. - */ - void setMaxMemoryUsageBytes(uint64_t maxMemoryUsageBytes) { - maxMemoryUsageBytes_ = maxMemoryUsageBytes; - } - - /** - * Get the maximum allowed frame size. - * - * If a client tries to send a message larger than this limit, - * its connection will be closed. - * - * @return Maxium frame size, in bytes. - */ - size_t getMaxFrameSize() const { - return maxFrameSize_; - } - - /** - * Set the maximum allowed frame size, up to 2^31-1 - * - * @param maxFrameSize The new maximum frame size. - */ - void setMaxFrameSize(size_t maxFrameSize) { - if (maxFrameSize > 0x7fffffff) { - maxFrameSize = 0x7fffffff; - } - maxFrameSize_ = maxFrameSize; - } - - /** - * Get fraction of maximum limits before an overload condition is cleared. - * - * @return hysteresis fraction - */ - double getOverloadHysteresis() const { - return overloadHysteresis_; - } - - /** - * Set fraction of maximum limits before an overload condition is cleared. - * A good value would probably be between 0.5 and 0.9. - * - * @param hysteresisFraction fraction <= 1.0. - */ - void setOverloadHysteresis(double hysteresisFraction) { - if (hysteresisFraction <= 1.0 && hysteresisFraction > 0.0) { - overloadHysteresis_ = hysteresisFraction; - } - } - - /** - * Get duration of stopping accepts when overload - * - * @return pauseAcceptDuration_ - */ - int getPauseAcceptDuration() const { - return pauseAcceptDuration_; - } - - /** - * Set the accept pause duration (when overload) in ms - * - * @param pauseDuration > 0 - */ - void setPauseAcceptDuration(int pauseDuration) { - if (pauseDuration > 0) { - pauseAcceptDuration_ = pauseDuration; - } - } - - /** - * Get the action the server will take on overload. - * - * @return a TOverloadAction enum value for the currently set action. - */ - TOverloadAction getOverloadAction() const { - return overloadAction_; - } - - /** - * Set the action the server is to take on overload. - * - * @param overloadAction a TOverloadAction enum value for the action. - */ - void setOverloadAction(TOverloadAction overloadAction) { - overloadAction_ = overloadAction; - } - - /** - * Get the time in milliseconds after which a task expires (0 == infinite). - * - * @return a 64-bit time in milliseconds. - */ - int64_t getTaskExpireTime() const { - return taskExpireTime_; - } - - /** - * Set the time in milliseconds after which a task expires (0 == infinite). - * - * @param taskExpireTime a 64-bit time in milliseconds. - */ - void setTaskExpireTime(int64_t taskExpireTime) { - taskExpireTime_ = taskExpireTime; - } - - /** - * Determine if the server is currently overloaded. - * This function checks the maximums for open connections and connections - * currently in processing, and sets an overload condition if they are - * exceeded. The overload will persist until both values are below the - * current hysteresis fraction of their maximums. - * - * @return true if an overload condition exists, false if not. - */ - bool serverOverloaded(); - - /** - * Check if the server is overloaded and overloadAction_ is - * T_OVERLOAD_PAUSE_ACCEPTING, and if so, pause the accept on the listening - * socket - * - * @return true if overloadAction_ != OVERLOAD_PAUSE_ACCEPTING, or - * if overload condition doesn't exist. - */ - bool canContinueToAccept(); - - /** - * Check if the server is overloaded, and if so, take the necessary action. - * - * @param conn The connection currently being processed that is triggering - * the overload check. - * - * Returns true if the current connection has been closed due to overload - * processing, and false otherwise. (Note that a false return value does not - * mean that the server is not overloaded.) - */ - bool checkForOverload(TConnection* conn); - - - /** Pop and discard next task on threadpool wait queue. - * - * @return true if a task was discarded, false if the wait queue was empty. - */ - bool drainPendingTask(); - - /** - * Get the starting size of a TConnection object's write buffer. - * - * @return # bytes we initialize a TConnection object's write buffer to. - */ - size_t getWriteBufferDefaultSize() const { - return writeBufferDefaultSize_; - } - - /** - * Set the starting size of a TConnection object's write buffer. - * - * @param size # bytes we initialize a TConnection object's write buffer to. - */ - void setWriteBufferDefaultSize(size_t size) { - writeBufferDefaultSize_ = size; - } - - /** - * Get the maximum size of read buffer allocated to idle TConnection objects. - * - * @return # bytes beyond which we will dealloc idle buffer. - */ - size_t getIdleReadBufferLimit() const { - return idleReadBufferLimit_; - } - - /** - * [NOTE: This is for backwards compatibility, use getIdleReadBufferLimit().] - * Get the maximum size of read buffer allocated to idle TConnection objects. - * - * @return # bytes beyond which we will dealloc idle buffer. - */ - size_t getIdleBufferMemLimit() const { - return idleReadBufferLimit_; - } - - /** - * Set the maximum size read buffer allocated to idle TConnection objects. - * If a TConnection object is found (either on connection close or between - * calls when resizeBufferEveryN_ is set) with more than this much memory - * allocated to its read buffer, we free it and allow it to be reinitialized - * on the next received frame. - * - * @param limit of bytes beyond which we will shrink buffers when checked. - */ - void setIdleReadBufferLimit(size_t limit) { - idleReadBufferLimit_ = limit; - } - - /** - * [NOTE: This is for backwards compatibility, use setIdleReadBufferLimit().] - * Set the maximum size read buffer allocated to idle TConnection objects. - * If a TConnection object is found (either on connection close or between - * calls when resizeBufferEveryN_ is set) with more than this much memory - * allocated to its read buffer, we free it and allow it to be reinitialized - * on the next received frame. - * - * @param limit of bytes beyond which we will shrink buffers when checked. - */ - void setIdleBufferMemLimit(size_t limit) { - idleReadBufferLimit_ = limit; - } - - - - /** - * Get the maximum size of write buffer allocated to idle TConnection objects. - * - * @return # bytes beyond which we will reallocate buffers when checked. - */ - size_t getIdleWriteBufferLimit() const { - return idleWriteBufferLimit_; - } - - /** - * Set the maximum size write buffer allocated to idle TConnection objects. - * If a TConnection object is found (either on connection close or between - * calls when resizeBufferEveryN_ is set) with more than this much memory - * allocated to its write buffer, we destroy and construct that buffer with - * writeBufferDefaultSize_ bytes. - * - * @param limit of bytes beyond which we will shrink buffers when idle. - */ - void setIdleWriteBufferLimit(size_t limit) { - idleWriteBufferLimit_ = limit; - } - - /** - * Get # of calls made between buffer size checks. 0 means disabled. - * - * @return # of calls between buffer size checks. - */ - int32_t getResizeBufferEveryN() const { - return resizeBufferEveryN_; - } - - /** - * Check buffer sizes every "count" calls. This allows buffer limits - * to be enforced for persistant connections with a controllable degree - * of overhead. 0 disables checks except at connection close. - * - * @param count the number of calls between checks, or 0 to disable - */ - void setResizeBufferEveryN(int32_t count) { - resizeBufferEveryN_ = count; - } - - /** - * Sets the sockOptHelper_ - * Socket options on underlying TSockets are set by passing - * the sockOptHelper_ to TSocket::setSocketOptions() function - * in the TConnection constructor - */ - void setSocketOptions(const TSocket::Options& oh) { - sockOptHelper_ = oh; - } - - void setObserver( - const boost::shared_ptr& observer) { - observer_ = observer; - } - - /** - * Main workhorse function, starts up the server listening on a port and - * loops over the libevent handler. - */ - void serve(); - - /** - * Causes the server to terminate gracefully (can be called from any thread). - */ - void stop(); - - TConnectionContext* getConnectionContext() const; - - private: - void addTask(boost::shared_ptr task) { - threadManager_->add(task, 0LL, taskExpireTime_); - } - - void setCurrentConnection(TConnection* conn) { - assert(currentConnection_.get() == NULL); - currentConnection_.set(conn); - } - void clearCurrentConnection() { - currentConnection_.clear(); - } - - /** - * Callback function that the threadmanager calls when a task reaches - * its expiration time. It is needed to clean up the expired connection. - * - * @param task the runnable associated with the expired task. - */ - void expireClose(boost::shared_ptr task); - - const boost::shared_ptr& getObserver() const { - return observer_; - } - - /// Creates a socket to listen on and binds it to the local port. - void createAndListenOnSocket(); - - /** - * Takes a socket created by createAndListenOnSocket() and sets various - * options on it to prepare for use in the server. - * - * @param fd descriptor of socket to be initialized/ - */ - void listenSocket(int fd); - /** - * Return an initialized connection object. Creates or recovers from - * pool a TConnection and initializes it with the provided socket FD - * and flags. - * - * @param socket FD of socket associated with this connection. - * @param addr the sockaddr of the client - * @param addrLen the length of addr - * @return pointer to initialized TConnection object. - */ - TConnection* createConnection(int socket, const sockaddr* addr, - socklen_t addrLen); - - /** - * Returns a connection to pool or deletion. If the connection pool - * (a stack) isn't full, place the connection object on it, otherwise - * just delete it. - * - * @param connection the TConection being returned. - */ - void returnConnection(TConnection* connection); -}; - -class TNonblockingIOThread : public Runnable { - public: - // Creates an IO thread and sets up the event base. The listenSocket should - // be a valid FD on which listen() has already been called. If the - // listenSocket is < 0, accepting will not be done. - TNonblockingIOThread(TNonblockingServer* server, - int number, - int listenSocket, - bool useHighPriority); - - ~TNonblockingIOThread(); - - // Returns the event-base for this thread. - event_base* getEventBase() const { return eventBase_; } - - // Returns the server for this thread. - TNonblockingServer* getServer() const { return server_; } - - // Returns the number of this IO thread. - int getThreadNumber() const { return number_; } - - // Returns the thread id associated with this object. This should - // only be called after the thread has been started. - pthread_t getThreadId() const { return threadId_; } - - // Returns the send-fd for task complete notifications. - int getNotificationSendFD() const { return notificationPipeFDs_[1]; } - - // Returns the read-fd for task complete notifications. - int getNotificationRecvFD() const { return notificationPipeFDs_[0]; } - - // Returns the actual thread object associated with this IO thread. - boost::shared_ptr getThread() const { return thread_; } - - // Sets the actual thread object associated with this IO thread. - void setThread(const boost::shared_ptr& t) { thread_ = t; } - - // Used by TConnection objects to indicate processing has finished. - bool notify(TNonblockingServer::TConnection* conn); - - // Enters the event loop and does not return until a call to stop(). - virtual void run(); - - // Exits the event loop as soon as possible. - void stop(); - - // Ensures that the event-loop thread is fully finished and shut down. - void join(); - - /// Maintains a count of requests for sampling purposes - /// request counter is maintained module the sample rate - uint32_t incrementRequestCounter(uint32_t sampleRate); - - /// Return true if the currently running thread is this I/O thread - bool isInIOThread() const { - return pthread_equal(pthread_self(), threadId_); - } - - /// Pauses accept event handling for pauseDuration milliseconds - void pauseAcceptHandling(int pauseDuration); - - private: - /** - * C-callable event handler for signaling task completion. Provides a - * callback that libevent can understand that will read a connection - * object's address from a pipe and call connection->transition() for - * that object. - * - * @param fd the descriptor the event occurred on. - */ - static void notifyHandler(int fd, short which, void* v); - - /** - * C-callable event handler for listener events. Provides a callback - * that libevent can understand which invokes server->handleEvent(). - * - * @param fd the descriptor the event occurred on. - * @param which the flags associated with the event. - * @param v void* callback arg where we placed TNonblockingServer's "this". - */ - static void listenHandler(int fd, short which, void* v) { - ((TNonblockingServer*)v)->handleEvent(fd, which); - } - - /** - * C-callable event handler to re-enable accept handling. - * Provides a callback that libevent can understand. - * - * @param fd unused. - * @param which the flags associated with the event. - * @param v void* callback arg where we placed TNonblockingIOThread's "this". - */ - static void reenableAcceptHandler(int fd, short which, void* v) { - ((TNonblockingIOThread*)v)->reenableAccept(); - } - - /// Re-enables accept event handling. - void reenableAccept(); - - /// Exits the loop ASAP in case of shutdown or error. - void breakLoop(bool error); - - /// Registers the events for the notification & listen sockets - void registerEvents(); - - /// Create the pipe used to notify I/O process of task completion. - void createNotificationPipe(); - - /// Unregisters our events for notification and listen sockets. - void cleanupEvents(); - - /// Sets (or clears) high priority scheduling status for the current thread. - void setCurrentThreadHighPriority(bool value); - - private: - /// associated server - TNonblockingServer* server_; - - /// thread number (for debugging). - const int number_; - - /// The actual physical thread id. - pthread_t threadId_; - - /// If listenSocket_ >= 0, adds an event on the event_base to accept conns - int listenSocket_; - - /// Sets a high scheduling priority when running - bool useHighPriority_; - - /// pointer to eventbase to be used for looping - event_base* eventBase_; - - /// Whether the server is currently accepting connections - bool acceptingConnections_; - - /// Used with eventBase_ for connection events (only in listener thread) - struct event serverEvent_; - - /// Used with eventBase_ for backing off on accept handling until there are - /// available fds - struct event acceptBackoffEvent_; - - /// Used with eventBase_ for task completion notification - struct event notificationEvent_; - - /// File descriptors for pipe used for task completion notification. - int notificationPipeFDs_[2]; - - /// Actual IO Thread - boost::shared_ptr thread_; - - /// Call counter - uint32_t requestCounter_; -}; - - -}}} // apache::thrift::server - -#endif // #ifndef THRIFT_SERVER_TNONBLOCKINGSERVER_H_ diff --git a/thrift/lib/cpp/server/TNonblockingServerObserver.h b/thrift/lib/cpp/server/TNonblockingServerObserver.h deleted file mode 100644 index 594a2849d7..0000000000 --- a/thrift/lib/cpp/server/TNonblockingServerObserver.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef THRIFT_SERVER_TNONBLOCKINGSERVEROBSERVER_H_ -#define THRIFT_SERVER_TNONBLOCKINGSERVEROBSERVER_H_ 1 - -#include - -namespace apache { namespace thrift { namespace server { - -class TNonblockingServerObserver { - public: - - virtual ~TNonblockingServerObserver() {} - - TNonblockingServerObserver() : sampleRate_(0) {} - TNonblockingServerObserver(uint32_t sampleRate) : sampleRate_(sampleRate) {} - - class CallTimestamps { - public: - uint64_t readBegin; - uint64_t readEnd; - uint64_t processBegin; - uint64_t processEnd; - uint64_t writeBegin; - uint64_t writeEnd; - - CallTimestamps() { - init(); - } - - void init() { - readBegin = readEnd = 0; - processBegin = processEnd = 0; - writeBegin = writeEnd = 0; - } - - }; - - // Notifications for various events on the TNonblockingServer - virtual void connDropped() = 0; - - virtual void taskKilled() = 0; - - virtual void callCompleted(const CallTimestamps& runtimes) = 0; - - // The observer has to specify a sample rate for callCompleted notifications - inline uint32_t getSampleRate() const { - return sampleRate_; - } - - protected: - uint32_t sampleRate_; -}; - -}}} // apache::thrift::server -#endif diff --git a/thrift/lib/cpp/server/TRpcTransportContext.h b/thrift/lib/cpp/server/TRpcTransportContext.h deleted file mode 100644 index cb1a30226e..0000000000 --- a/thrift/lib/cpp/server/TRpcTransportContext.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_SERVER_TRPCTRANSPORTCONTEXT_H_ -#define THRIFT_SERVER_TRPCTRANSPORTCONTEXT_H_ 1 - -#include "thrift/lib/cpp/server/TConnectionContext.h" - -#include - -namespace apache { namespace thrift { - -namespace transport { -class TRpcTransport; -} - -namespace server { - -class TRpcTransportContext : public TConnectionContext { - public: - TRpcTransportContext(boost::shared_ptr transport) - : transport_(transport) {} - - TRpcTransportContext( - const boost::shared_ptr& transport, - const boost::shared_ptr& iprot, - const boost::shared_ptr& oprot) - : transport_(transport), - iprot_(iprot), - oprot_(oprot) {} - - virtual const transport::TSocketAddress* getPeerAddress() const; - - const boost::shared_ptr& getTransport() const { - return transport_; - } - - virtual boost::shared_ptr getInputProtocol() const { - return iprot_; - } - - virtual boost::shared_ptr getOutputProtocol() const { - return oprot_; - } - - private: - boost::shared_ptr transport_; - boost::shared_ptr iprot_; - boost::shared_ptr oprot_; -}; - -}}} // apache::thrift::server - -#endif // THRIFT_SERVER_TRPCTRANSPORTCONTEXT_H_ diff --git a/thrift/lib/cpp/server/TServer.h b/thrift/lib/cpp/server/TServer.h deleted file mode 100644 index 9623b41d01..0000000000 --- a/thrift/lib/cpp/server/TServer.h +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_SERVER_TSERVER_H -#define THRIFT_SERVER_TSERVER_H 1 - -#include "thrift/lib/cpp/TProcessor.h" -#include "thrift/lib/cpp/transport/TServerTransport.h" -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" -#include "thrift/lib/cpp/concurrency/Thread.h" -#include "thrift/lib/cpp/util/shared_ptr_util.h" - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -} - -namespace server { - -using apache::thrift::TProcessor; -using apache::thrift::protocol::TBinaryProtocolFactory; -using apache::thrift::protocol::TProtocol; -using apache::thrift::protocol::TProtocolFactory; -using apache::thrift::protocol::TDuplexProtocolFactory; -using apache::thrift::protocol::TDualProtocolFactory; -using apache::thrift::protocol::TSingleProtocolFactory; -using apache::thrift::transport::TServerTransport; -using apache::thrift::transport::TTransport; -using apache::thrift::transport::TTransportFactory; -using apache::thrift::transport::TDuplexTransportFactory; -using apache::thrift::transport::TDualTransportFactory; -using apache::thrift::transport::TSingleTransportFactory; - -class TConnectionContext; - -/** - * Virtual interface class that can handle events from the server core. To - * use this you should subclass it and implement the methods that you care - * about. Your subclass can also store local data that you may care about, - * such as additional "arguments" to these methods (stored in the object - * instance's state). - */ -class TServerEventHandler { - public: - - virtual ~TServerEventHandler() {} - - /** - * Called before the server begins. - * - * @param address The address on which the server is listening. - */ - virtual void preServe(const transport::TSocketAddress* address) {} - - /** - * Called when a new client has connected and is about to being processing. - * - * @param ctx A pointer to the connection context. The context will remain - * valid until the corresponding connectionDestroyed() call. - */ - virtual void newConnection(TConnectionContext* ctx) { - (void)ctx; - } - - /** - * Called when a client has finished request-handling to delete server - * context. - * - * @param ctx A pointer to the connection context. The context will be - * destroyed after connectionDestroyed() returns. - */ - virtual void connectionDestroyed(TConnectionContext* ctx) { - (void)ctx; - } - - protected: - - /** - * Prevent direct instantiation. - */ - TServerEventHandler() {} - -}; - -/** - * Thrift server. - * - */ -class TServer : public concurrency::Runnable { - public: - - virtual ~TServer() {} - - virtual void serve() = 0; - - virtual void stop() {} - - // This API is intended to stop listening on the server - // socket and stop accepting new connection first while - // still letting the established connections to be - // processed on the server. - virtual void stopListening() {} - - // Allows running the server as a Runnable thread - virtual void run() { - serve(); - } - - boost::shared_ptr getProcessorFactory() { - return processorFactory_; - } - - boost::shared_ptr getServerTransport() { - return serverTransport_; - } - - boost::shared_ptr getDuplexTransportFactory() { - return duplexTransportFactory_; - } - - boost::shared_ptr getDuplexProtocolFactory() { - return duplexProtocolFactory_; - } - - boost::shared_ptr getEventHandler() { - return eventHandler_; - } - - /** - * Get the TConnectionContext for the connection currently being processed. - * - * This is intended to be invoked from within the TProcessor (or the handler - * used by the TProcessor). - * - * Note: Not all server types currently support getConnectionContext(). Some - * servers may always return NULL. - * - * TODO: Eventually this method should be supported by all server types, and - * made into a pure virtual method. - * - * @return Return a pointer to the TConnectionContext for the current - * connection, or NULL if invoked outside of a call to - * TProcessor::process(). The returned object is only guaranteed to - * be valid until process() returns. - */ - virtual TConnectionContext* getConnectionContext() const { - return NULL; - } - -protected: - template - TServer(const boost::shared_ptr& processorFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)): - processorFactory_(processorFactory) { - setTransportFactory(boost::shared_ptr( - new TTransportFactory())); - setProtocolFactory(boost::shared_ptr( - new TBinaryProtocolFactory())); - } - - template - TServer(const boost::shared_ptr& processor, - THRIFT_OVERLOAD_IF(Processor, TProcessor)): - processorFactory_(new TSingletonProcessorFactory(processor)) { - setTransportFactory(boost::shared_ptr( - new TTransportFactory())); - setProtocolFactory(boost::shared_ptr( - new TBinaryProtocolFactory())); - } - - template - TServer(const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)): - processorFactory_(processorFactory), - serverTransport_(serverTransport) { - setTransportFactory(boost::shared_ptr( - new TTransportFactory())); - setProtocolFactory(boost::shared_ptr( - new TBinaryProtocolFactory())); - } - - template - TServer(const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - THRIFT_OVERLOAD_IF(Processor, TProcessor)): - processorFactory_(new TSingletonProcessorFactory(processor)), - serverTransport_(serverTransport) { - setTransportFactory(boost::shared_ptr( - new TTransportFactory())); - setProtocolFactory(boost::shared_ptr( - new TBinaryProtocolFactory())); - } - - template - TServer(const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)): - processorFactory_(processorFactory), - serverTransport_(serverTransport) { - setTransportFactory(transportFactory); - setProtocolFactory(protocolFactory); - } - - template - TServer(const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)): - processorFactory_(new TSingletonProcessorFactory(processor)), - serverTransport_(serverTransport) { - setTransportFactory(transportFactory); - setProtocolFactory(protocolFactory); - } - - template - TServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - processorFactory_(processorFactory), - serverTransport_(serverTransport), - duplexTransportFactory_(duplexTransportFactory), - duplexProtocolFactory_(duplexProtocolFactory) {} - - template - TServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - processorFactory_(new TSingletonProcessorFactory(processor)), - serverTransport_(serverTransport), - duplexTransportFactory_(duplexTransportFactory), - duplexProtocolFactory_(duplexProtocolFactory) {} - - /** - * Get a TProcessor to handle calls on a particular connection. - * - * This method should only be called once per connection (never once per - * call). This allows the TProcessorFactory to return a different processor - * for each connection if it desires. - */ - boost::shared_ptr getProcessor(TConnectionContext* ctx) { - return processorFactory_->getProcessor(ctx); - } - - // Class variables - boost::shared_ptr processorFactory_; - boost::shared_ptr serverTransport_; - - boost::shared_ptr duplexTransportFactory_; - boost::shared_ptr duplexProtocolFactory_; - - boost::shared_ptr eventHandler_; - -public: - void setProcessorFactory( - boost::shared_ptr processorFactory) { - processorFactory_ = processorFactory; - } - - void setTransportFactory( - boost::shared_ptr transportFactory) { - duplexTransportFactory_.reset( - new TSingleTransportFactory(transportFactory)); - } - - void setDuplexTransportFactory( - boost::shared_ptr duplexTransportFactory) { - duplexTransportFactory_ = duplexTransportFactory; - } - - void setProtocolFactory(boost::shared_ptr protocolFactory) { - duplexProtocolFactory_.reset( - new TSingleProtocolFactory(protocolFactory)); - } - - void setDuplexProtocolFactory( - boost::shared_ptr duplexProtocolFactory) { - duplexProtocolFactory_ = duplexProtocolFactory; - } - - void setServerEventHandler( - boost::shared_ptr eventHandler) { - eventHandler_ = eventHandler; - } - -}; - -/** - * Helper function to increase the max file descriptors limit - * for the current process and all of its children. - * By default, tries to increase it to as much as 2^24. - */ - int increase_max_fds(int max_fds=(1<<24)); - - -}}} // apache::thrift::server - -#endif // #ifndef THRIFT_SERVER_TSERVER_H diff --git a/thrift/lib/cpp/server/TSimpleServer.h b/thrift/lib/cpp/server/TSimpleServer.h deleted file mode 100644 index 6a35d0d03a..0000000000 --- a/thrift/lib/cpp/server/TSimpleServer.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_SERVER_TSIMPLESERVER_H -#define THRIFT_SERVER_TSIMPLESERVER_H 1 - -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TServerTransport.h" - -namespace apache { namespace thrift { namespace server { - -/** - * This is the most basic simple server. It is single-threaded and runs a - * continuous loop of accepting a single connection, processing requests on - * that connection until it closes, and then repeating. It is a good example - * of how to extend the TServer interface. - * - */ -class TSimpleServer : public TServer { - public: - template - TSimpleServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory, serverTransport, transportFactory, - protocolFactory), - stop_(false), - connectionCtx_(NULL) {} - - template - TSimpleServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor, serverTransport, transportFactory, protocolFactory), - stop_(false), - connectionCtx_(NULL) {} - - template - TSimpleServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory, serverTransport, - duplexTransportFactory, duplexProtocolFactory), - stop_(false), - connectionCtx_(NULL) {} - - template - TSimpleServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor, serverTransport, - duplexTransportFactory, duplexProtocolFactory), - stop_(false), - connectionCtx_(NULL) {} - - ~TSimpleServer() {} - - void serve(); - - void stop(); - - TConnectionContext* getConnectionContext() const; - - protected: - bool stop_; - TConnectionContext* connectionCtx_; -}; - -}}} // apache::thrift::server - -#endif // #ifndef THRIFT_SERVER_TSIMPLESERVER_H diff --git a/thrift/lib/cpp/server/TThreadPoolServer.h b/thrift/lib/cpp/server/TThreadPoolServer.h deleted file mode 100644 index 2ce0e2e399..0000000000 --- a/thrift/lib/cpp/server/TThreadPoolServer.h +++ /dev/null @@ -1,130 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_SERVER_TTHREADPOOLSERVER_H -#define THRIFT_SERVER_TTHREADPOOLSERVER_H 1 - -#include "thrift/lib/cpp/concurrency/ThreadManager.h" -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TServerTransport.h" -#include "thrift/lib/cpp/concurrency/ThreadLocal.h" - -#include - -namespace apache { namespace thrift { namespace server { - -using apache::thrift::concurrency::ThreadManager; -using apache::thrift::protocol::TProtocolFactory; -using apache::thrift::transport::TServerTransport; -using apache::thrift::transport::TTransportFactory; - -class TThreadPoolServer : public TServer { - public: - template - TThreadPoolServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadManager, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory, serverTransport, transportFactory, - protocolFactory), - threadManager_(threadManager), - stop_(false), - timeout_(0) {} - - template - TThreadPoolServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadManager, - THRIFT_OVERLOAD_IF(Processor, TProcessor)) : - TServer(processor, serverTransport, transportFactory, protocolFactory), - threadManager_(threadManager), - stop_(false), - timeout_(0) {} - - template - TThreadPoolServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadManager, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)): - TServer(processorFactory, serverTransport, - duplexTransportFactory, duplexProtocolFactory), - threadManager_(threadManager), - stop_(false), - timeout_(0) {} - - template - TThreadPoolServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadManager, - THRIFT_OVERLOAD_IF(Processor, TProcessor)): - TServer(processor, serverTransport, - duplexTransportFactory, duplexProtocolFactory), - threadManager_(threadManager), - stop_(false), - timeout_(0) {} - - virtual ~TThreadPoolServer(); - - virtual void serve(); - - virtual int64_t getTimeout() const; - - virtual void setTimeout(int64_t value); - - virtual void stop() { - stop_ = true; - serverTransport_->interrupt(); - } - - virtual TConnectionContext* getConnectionContext() const; - - protected: - class Task; - typedef concurrency::ThreadLocal > - ThreadLocalTask; - - void setCurrentTask(Task* task); - void clearCurrentTask(); - - boost::shared_ptr threadManager_; - volatile bool stop_; - volatile int64_t timeout_; - - /** - * Thread-local data storage to track the current connection being processed. - */ - ThreadLocalTask currentTask_; -}; - -}}} // apache::thrift::server - -#endif // #ifndef THRIFT_SERVER_TTHREADPOOLSERVER_H diff --git a/thrift/lib/cpp/server/TThreadedServer.h b/thrift/lib/cpp/server/TThreadedServer.h deleted file mode 100644 index 61c5034518..0000000000 --- a/thrift/lib/cpp/server/TThreadedServer.h +++ /dev/null @@ -1,223 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_SERVER_TTHREADEDSERVER_H -#define THRIFT_SERVER_TTHREADEDSERVER_H 1 - -#include "thrift/lib/cpp/server/TServer.h" -#include "thrift/lib/cpp/transport/TServerTransport.h" -#include "thrift/lib/cpp/concurrency/Monitor.h" -#include "thrift/lib/cpp/concurrency/Thread.h" -#include "thrift/lib/cpp/concurrency/ThreadLocal.h" - -#include - -namespace apache { namespace thrift { namespace server { - -using apache::thrift::TProcessor; -using apache::thrift::transport::TServerTransport; -using apache::thrift::transport::TTransportFactory; -using apache::thrift::concurrency::Monitor; -using apache::thrift::concurrency::ThreadFactory; - -class TThreadedServer : public TServer { - - public: - class Task; - - template - TThreadedServer(const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)); - - template - TThreadedServer(const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)); - - template - TThreadedServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)); - - template - TThreadedServer(const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)); - - template - TThreadedServer(const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)); - - template - TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)); - - template - TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF(Processor, TProcessor)); - - virtual ~TThreadedServer(); - - virtual void serve(); - - void stop() { - stop_ = true; - serverTransport_->interrupt(); - } - - virtual TConnectionContext* getConnectionContext() const; - - protected: - typedef concurrency::ThreadLocal > - ThreadLocalTask; - - void init(); - void setCurrentTask(Task* task); - - boost::shared_ptr threadFactory_; - volatile bool stop_; - - Monitor tasksMonitor_; - std::set tasks_; - - /** - * Thread-local data storage to track the current connection being processed. - */ - ThreadLocalTask currentTask_; -}; - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF_DEFN(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory, serverTransport, transportFactory, - protocolFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF_DEFN(ProcessorFactory, TProcessorFactory)) : - TServer(processorFactory, serverTransport, transportFactory, - protocolFactory), - threadFactory_(threadFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processorFactory, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF_DEFN(ProcessorFactory, TProcessorFactory)): - TServer(processorFactory, serverTransport, duplexTransportFactory, - duplexProtocolFactory), - threadFactory_(threadFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - THRIFT_OVERLOAD_IF_DEFN(Processor, TProcessor)) : - TServer(processor, serverTransport, transportFactory, protocolFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& transportFactory, - const boost::shared_ptr& protocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF_DEFN(Processor, TProcessor)) : - TServer(processor, serverTransport, transportFactory, protocolFactory), - threadFactory_(threadFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - THRIFT_OVERLOAD_IF_DEFN(Processor, TProcessor)) : - TServer(processor, serverTransport, duplexTransportFactory, - duplexProtocolFactory) { - init(); -} - -template -TThreadedServer::TThreadedServer( - const boost::shared_ptr& processor, - const boost::shared_ptr& serverTransport, - const boost::shared_ptr& duplexTransportFactory, - const boost::shared_ptr& duplexProtocolFactory, - const boost::shared_ptr& threadFactory, - THRIFT_OVERLOAD_IF_DEFN(Processor, TProcessor)): - TServer(processor, serverTransport, duplexTransportFactory, - duplexProtocolFactory), - threadFactory_(threadFactory) { - init(); -} - -}}} // apache::thrift::server - -#endif // #ifndef _THRIFT_SERVER_TTHREADEDSERVER_H_ diff --git a/thrift/lib/cpp/server/test/AggregatorTest.thrift b/thrift/lib/cpp/server/test/AggregatorTest.thrift deleted file mode 100644 index 3f94ba3667..0000000000 --- a/thrift/lib/cpp/server/test/AggregatorTest.thrift +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/local/bin/thrift -cpp - -include "common/fb303/if/fb303.thrift" - -namespace cpp apache.thrift.async - -struct StructRequest { - 1:i32 i32Val, - 2:i64 i64Val, - 3:double doubleVal, - 4:string stringVal, -} - -struct StructResponse { - 1:StructRequest request, - 2:i32 errorCode - 3:string answerString, -} - -service AggregatorTest extends fb303.FacebookService { - StructResponse sendStructRecvStruct(1:StructRequest request), - oneway void sendStructNoRecv(1:StructRequest request), - StructResponse sendMultiParamsRecvStruct( - 1:i32 i32Val, - 2:i64 i64Val, - 3:double doubleVal, - 4:string stringVal, - 5:StructRequest structVal, - ), - oneway void sendMultiParamsNoRecv( - 1:i32 i32Val, - 2:i64 i64Val, - 3:double doubleVal, - 4:string stringVal, - 5:StructRequest structVal, - ), - StructResponse noSendRecvStruct(), - oneway void noSendNoRecv(), -} - - diff --git a/thrift/lib/cpp/server/test/AggregatorUtilTest.h b/thrift/lib/cpp/server/test/AggregatorUtilTest.h deleted file mode 100644 index 6020ad80ea..0000000000 --- a/thrift/lib/cpp/server/test/AggregatorUtilTest.h +++ /dev/null @@ -1,143 +0,0 @@ -#ifndef COMMON_CLIENT_MGMT_AGGR_UTILTEST -#define COMMON_CLIENT_MGMT_AGGR_UTILTEST 1 - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include "thrift/lib/cpp/server/test/gen-cpp/AggregatorTest_types.h" -#include "thrift/lib/cpp/server/test/gen-cpp/AggregatorTest.h" - -#include "common/logging/logging.h" - -static inline void defaultData(apache::thrift::async::StructRequest* res) { - res->i32Val = 32; - res->i64Val = 64; - res->doubleVal = -12.34; - res->stringVal = "string"; -} - -static inline void randomData(apache::thrift::async::StructRequest* res) { - res->i32Val = ::random(); - res->i64Val = ::random(); - res->doubleVal = ::random() * ((::random() % 2) == 0 ? -1 : 1); - res->stringVal = boost::lexical_cast(::random()); -} - -static inline void toAnswerString(std::string* dest, - const int32_t i32Val, - const int64_t i64Val, - const double doubleVal, - const std::string& stringVal) { - *dest += - boost::lexical_cast(i32Val) + - ";" + - boost::lexical_cast(i64Val) + - ";" + - boost::lexical_cast(doubleVal) + - ";" + - boost::lexical_cast(stringVal); -} - -static inline void toAnswerString(std::string* dest, - const apache::thrift::async::StructRequest& request) { - toAnswerString(dest, request.i32Val, - request.i64Val, - request.doubleVal, - request.stringVal); -} - -static inline void toAnswerString(std::string* dest, - const int32_t i32Val, - const int64_t i64Val, - const double doubleVal, - const std::string& stringVal, - const apache::thrift::async::StructRequest& structVal) { - toAnswerString(dest, i32Val, - i64Val, - doubleVal, - stringVal); - *dest += "*"; - toAnswerString(dest, structVal); -} - -static inline void zeroResponse(apache::thrift::async::StructResponse* dest) { - dest->request.i32Val = 0; - dest->request.i64Val = 0; - dest->request.doubleVal = 0.0; - dest->request.stringVal = ""; - dest->errorCode = 0; - dest->answerString = ""; -} - -static inline void printResponse( - const apache::thrift::async::StructResponse& x) { - LOG(INFO) << "request.i32Val: " << x.request.i32Val - << ", request.i64Val: " << x.request.i64Val - << ", request.doubleVal: " << x.request.doubleVal - << ", request.stringVal: " << x.request.stringVal - << ", request.stringVal: " << x.request.stringVal - << ", errorCode: " << x.errorCode - << ", answerString: " << x.answerString; -} - -static inline bool equalResult( - const apache::thrift::async::StructResponse& ethalon, - const apache::thrift::async::StructResponse& response) { - bool res = ethalon.request.i32Val == response.request.i32Val - && ethalon.request.i64Val == response.request.i64Val - && fabs(ethalon.request.doubleVal - response.request.doubleVal) < 0.0001 - && ethalon.request.stringVal == response.request.stringVal - && ethalon.errorCode == response.errorCode - && ethalon.answerString == response.answerString; - if (!res) { - printResponse(ethalon); - printResponse(response); - } - return res; -} - -static inline void addResponse(apache::thrift::async::StructResponse* dest, - const apache::thrift::async::StructResponse& src) { - dest->request.i32Val += src.request.i32Val; - dest->request.i64Val += src.request.i64Val; - dest->request.doubleVal += src.request.doubleVal; - dest->request.stringVal += src.request.stringVal; - dest->errorCode += src.errorCode; - dest->answerString += "/"; - dest->answerString += src.answerString; -} - -static inline void addRequest(apache::thrift::async::StructResponse* dest, - const apache::thrift::async::StructRequest& src) { - apache::thrift::async::StructResponse response; - response.request = src; - response.errorCode = 0; - response.answerString = ""; - toAnswerString(&response.answerString, response.request); - addResponse(dest, response); -} - -static inline void addRequest(apache::thrift::async::StructResponse* dest, - const int32_t i32Val, - const int64_t i64Val, - const double doubleVal, - const std::string& stringVal, - const apache::thrift::async::StructRequest& structVal) { - apache::thrift::async::StructResponse response; - response.request = structVal; - response.errorCode = 0; - response.answerString = ""; - toAnswerString(&response.answerString, - i32Val, i64Val, doubleVal, stringVal, response.request); - addResponse(dest, response); -} - -#endif diff --git a/thrift/lib/cpp/server/test/connctx.thrift b/thrift/lib/cpp/server/test/connctx.thrift deleted file mode 100644 index 3f65fb36fa..0000000000 --- a/thrift/lib/cpp/server/test/connctx.thrift +++ /dev/null @@ -1,7 +0,0 @@ -exception CtxError { - 1: string message -} (message = "message") - -service ConnCtxService { - binary getClientAddress() throws (1: CtxError error) -} diff --git a/thrift/lib/cpp/test/DebugProtocolTest.thrift b/thrift/lib/cpp/test/DebugProtocolTest.thrift deleted file mode 100644 index 7a7278ecc8..0000000000 --- a/thrift/lib/cpp/test/DebugProtocolTest.thrift +++ /dev/null @@ -1,27 +0,0 @@ -struct Message { - 1: bool a, - 2: byte b, - 3: i16 c, - 4: i32 d, - 5: i64 e, - 6: double f, - 7: string g -} - -typedef list MsgList -typedef list IntList -typedef list StringList - - -typedef map MsgMap -typedef set MsgSet - -struct Ooo { - 1: MsgList l, - 2: MsgMap m, - 3: MsgSet s -} - -service DebugProtocolService { - void Func(1: MsgList lst); -} diff --git a/thrift/lib/cpp/test/NetworkUtil.h b/thrift/lib/cpp/test/NetworkUtil.h deleted file mode 100644 index 853d413c76..0000000000 --- a/thrift/lib/cpp/test/NetworkUtil.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_NETWORKUTIL_H_ -#define THRIFT_TEST_NETWORKUTIL_H_ 1 - -#include - -namespace apache { namespace thrift { - -namespace transport { -class TSocketAddress; -} - -namespace test { - -/** - * Get a list of all configured local IP addresses. - */ -void getLocalAddresses(std::vector* results); - -}}} // apache::thrift::test - -#endif // THRIFT_TEST_NETWORKUTIL_H_ diff --git a/thrift/lib/cpp/test/STAR.newdev.facebook.com.crt b/thrift/lib/cpp/test/STAR.newdev.facebook.com.crt deleted file mode 100644 index 3b91dcfae1..0000000000 --- a/thrift/lib/cpp/test/STAR.newdev.facebook.com.crt +++ /dev/null @@ -1,34 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIF9DCCBNygAwIBAgIKEf4IyQAAAAAt5DANBgkqhkiG9w0BAQUFADBKMRMwEQYK -CZImiZPyLGQBGRYDY29tMRswGQYKCZImiZPyLGQBGRYLVGhlRmFjZWJvb2sxFjAU -BgNVBAMTDVRoZUZhY2Vib29rQ0EwHhcNMTEwNDI4MTkxMjU0WhcNMTMwNDI3MTkx -MjU0WjAgMR4wHAYDVQQDDBUqLm5ld2Rldi5mYWNlYm9vay5jb20wggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQC42UW2BSdL/OkaP7OGsPGxmZjKEvkYLnSC -WEJLrs9axKTe35jLD6SZjZtUkQn8DelgeDgKrHo5mbPz7yO4TKDBZaVj0nhJRnto -sCrRXyNinslmgThaIGkQOglNO9zly7fKYl0DQDJ+YG4zX6oV/43ZosjXjeLJNHiD -A14rXfUoooUoFFULb4QeKehI9FZo9KyMMtUofAl4Ms2Yu+eO3oOfq+fK0H3qLRVX -KP0+fQXknx6O/a584CkedLpuc+i2a7Lp6iuT7ZHyJgTpE1Lw2JawlE7MACcAHsve -ODpC5AL53luvu1uvVQqUOeQ6Thz4n0BtPKn+KIzEleDCdeCy5QLXAgMBAAGjggME -MIIDADAdBgNVHQ4EFgQUn79HO8QnhoLhTFmXyIMYpNQLgMowHwYDVR0jBBgwFoAU -/c5mcfzW2IaPBA5cUuOYapXlvScwggEPBgNVHR8EggEGMIIBAjCB/6CB/KCB+YaB -u2xkYXA6Ly8vQ049VGhlRmFjZWJvb2tDQSxDTj1TQy1DQVNVQjAxLENOPUNEUCxD -Tj1QdWJsaWMlMjBLZXklMjBTZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1 -cmF0aW9uLERDPVRoZUZhY2Vib29rLERDPWNvbT9jZXJ0aWZpY2F0ZVJldm9jYXRp -b25MaXN0P2Jhc2U/b2JqZWN0Q2xhc3M9Y1JMRGlzdHJpYnV0aW9uUG9pbnSGOWh0 -dHA6Ly9jZXJ0cy50aGVmYWNlYm9vay5jb20vQ2VydEVucm9sbC9UaGVGYWNlYm9v -a0NBLmNybDCCAScGCCsGAQUFBwEBBIIBGTCCARUwgbAGCCsGAQUFBzAChoGjbGRh -cDovLy9DTj1UaGVGYWNlYm9va0NBLENOPUFJQSxDTj1QdWJsaWMlMjBLZXklMjBT -ZXJ2aWNlcyxDTj1TZXJ2aWNlcyxDTj1Db25maWd1cmF0aW9uLERDPVRoZUZhY2Vi -b29rLERDPWNvbT9jQUNlcnRpZmljYXRlP2Jhc2U/b2JqZWN0Q2xhc3M9Y2VydGlm -aWNhdGlvbkF1dGhvcml0eTBgBggrBgEFBQcwAoZUaHR0cDovL2NlcnRzLnRoZWZh -Y2Vib29rLmNvbS9DZXJ0RW5yb2xsL1NDLUNBU1VCMDEuVGhlRmFjZWJvb2suY29t -X1RoZUZhY2Vib29rQ0EuY3J0MA4GA1UdDwEB/wQEAwIFoDA+BgkrBgEEAYI3FQcE -MTAvBicrBgEEAYI3FQiCuMAag87Wd4fdgReE4Kg9h9aFb4E4hrepboP/41MCAWQC -AQIwEwYDVR0lBAwwCgYIKwYBBQUHAwEwGwYJKwYBBAGCNxUKBA4wDDAKBggrBgEF -BQcDATANBgkqhkiG9w0BAQUFAAOCAQEAgVv0ngnjVzRNv9tu1pk/a9nW6+tKDMCO -IgqUHFO5MmnlOSGK+PLBV8gflBnzjDl7y+LCtMXPSpdTFA7hBrxsVGsLwMjluttO -Az50eskueoO2jxUe21uQw+7Fiy5EhtVdsDPQ/CXZXA2MNGV0cFVxLIY+IpzddP25 -fz1j/r3YtomHaEtGaJXDkgb7YdcLlJ5XZKM59Idp4KfLRNUTjaZXIUpTEBRcIdYV -WXcbFRNBM9oBRej9YEeXdlx51w38eX1BczQ40pwTsi7ze+1ZNESaK9oqvZuNsisg -CYJunbzTNfHWB6M/uvLiwoWjGihr8cf3/ULtxcq9+IFmsphavEzn7A== ------END CERTIFICATE----- diff --git a/thrift/lib/cpp/test/STAR.newdev.facebook.com.key b/thrift/lib/cpp/test/STAR.newdev.facebook.com.key deleted file mode 100644 index eab6acf2f2..0000000000 --- a/thrift/lib/cpp/test/STAR.newdev.facebook.com.key +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAuNlFtgUnS/zpGj+zhrDxsZmYyhL5GC50glhCS67PWsSk3t+Y -yw+kmY2bVJEJ/A3pYHg4Cqx6OZmz8+8juEygwWWlY9J4SUZ7aLAq0V8jYp7JZoE4 -WiBpEDoJTTvc5cu3ymJdA0AyfmBuM1+qFf+N2aLI143iyTR4gwNeK131KKKFKBRV -C2+EHinoSPRWaPSsjDLVKHwJeDLNmLvnjt6Dn6vnytB96i0VVyj9Pn0F5J8ejv2u -fOApHnS6bnPotmuy6eork+2R8iYE6RNS8NiWsJROzAAnAB7L3jg6QuQC+d5br7tb -r1UKlDnkOk4c+J9AbTyp/iiMxJXgwnXgsuUC1wIDAQABAoIBAQCAFHxLDPMXodxa -hbz9HOm7Z3QIwHC8oqO0FTeKfUvL1uluTHvwZ5xjkU0JoZ3LelA0udgK/UuLUcbw -xMh5UQ8qMiYRLqqOCzpDZZ2liUhZczCVx/+l40MpLS14yHvc9fUZVGKid/8Etghl -rGmL6JD/Nd34DaYQSD0gelrrraTLS/K/f3II1AkJUYUNGoe+FHlBOIMw0rrl2yLX -nvCK7DCCWXkdy5PAolm1sEek3ZWRLvykYQm+Pe7tDDAXb7JEhnp1MCwz8QPv3A+8 -Wotk8LdIsRbqdHjychBaHNu4XfyIwfK2W3+yTBudbs3eHzMOvbY7lznb1tcpAiFQ -ot+YwMJhAoGBAOm0dSj2DbAvf53F49EoqNqRlrXuH5PHRFsPeGPHRJXt+AVYzwMe -lMlDXhU3+hgZmE1aKci9sr2i0z71GpLxTAcIzITC0iyWok2h7NC6HtFW0xM3U/oc -1THDWwbxULTzGEzEuYq5AR5xu54aEfjEpCBVBWP52lyNs3hPTHlcOoLpAoGBAMp7 -pgTPnJr/Nr4Fdny/D3Iy+aKKe2wu1vgEaTqYGGpKq976C+8nEZ1hqHzFTQgdsTIK -QUPGAw2LgtSPcB+jIvJoG8LHPum7n3/7lV3JeEXbDhMMrSX7emJ2KZ+qO5dSRMgT -PDtjeK33egEvXw24j1d4ZSef4smw87xmSNk1Fj+/AoGAOxIezvSqbw8CbamYNMTX -MS+9bUy79IlYcL/PSUETx+W3W/qfkIVJTDnX7PsSHsdRZLPWfePc6uveAzrGtb+B -3QFPWHs5zoVgjsjP584zfew5O9EvS7e/920OdAnIwYP0b2sGDtdGPiC3MHYcdsmV -RorW6vc7R0uVwmIgzUgPjgkCgYBImXD7RJ04Dc3I8Bh9vduB7LkJCHIcZeb54ksA -kUwfwEpDlo/03aM5NKy+n9dw04SXFoo0DKlHkAAGyq8/CLUdCSr6+YmbMISN1NzH -Vddj5Jj1R5RFjBdjek6OSvE23m5+9jagbJf2eEcsaZnBR61NhYNvY6pi+qlJobr4 -9knV7QKBgQDRC1lTIcONxZIWRQMhgIdiVjRL4jfITRmrgAUHnOTDqrDr6pzDmHGO -Js8jRQxq3h8mWHnF2P5HMI4QVmpQ8RuH9bJhycIKbPN0r/QsynsHJeVN/pvWe1ke -Z8U59I9XJnB0KEXRkGEZyftw5GDFX1EqEJBbR3iHojkWZB/SZ/65YQ== ------END RSA PRIVATE KEY----- diff --git a/thrift/lib/cpp/test/ScopedEventBaseThread.h b/thrift/lib/cpp/test/ScopedEventBaseThread.h deleted file mode 100644 index 8736544da3..0000000000 --- a/thrift/lib/cpp/test/ScopedEventBaseThread.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_SCOPEDEVENTBASETHREAD_H_ -#define THRIFT_TEST_SCOPEDEVENTBASETHREAD_H_ 1 - -#include -#include - -namespace apache { namespace thrift { namespace async { -class TEventBase; -}}} -namespace apache { namespace thrift { namespace concurrency { -class Thread; -}}} - -namespace apache { namespace thrift { namespace test { - -/** - * A helper class to start a new thread running a TEventBase loop. - * - * The new thread will be started by the ScopedEventBaseThread constructor. - * When the ScopedEventBaseThread object is destroyed, the thread will be - * stopped. - */ -class ScopedEventBaseThread { - public: - ScopedEventBaseThread(); - ~ScopedEventBaseThread(); - - ScopedEventBaseThread(ScopedEventBaseThread&& other); - ScopedEventBaseThread &operator=(ScopedEventBaseThread&& other); - - /** - * Get a pointer to the TEventBase driving this thread. - */ - async::TEventBase *getEventBase() const { - return eventBase_.get(); - } - - private: - ScopedEventBaseThread(const ScopedEventBaseThread& other) = delete; - ScopedEventBaseThread& operator=(const ScopedEventBaseThread& other) = delete; - - std::unique_ptr eventBase_; - boost::shared_ptr thread_; -}; - -}}} // apache::thrift::test - -#endif // THRIFT_TEST_SCOPEDEVENTBASETHREAD_H_ diff --git a/thrift/lib/cpp/test/SocketPair.h b/thrift/lib/cpp/test/SocketPair.h deleted file mode 100644 index eebe534e40..0000000000 --- a/thrift/lib/cpp/test/SocketPair.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_SOCKETPAIR_H_ -#define THRIFT_TEST_SOCKETPAIR_H_ 1 - -namespace apache { namespace thrift { namespace test { - -class SocketPair { - public: - enum Mode { - BLOCKING, - NONBLOCKING - }; - - SocketPair(Mode mode = NONBLOCKING); - ~SocketPair(); - - int operator[](int index) const { - return fds_[index]; - } - - void closeFD0(); - void closeFD1(); - - int extractFD0() { - return extractFD(0); - } - int extractFD1() { - return extractFD(1); - } - int extractFD(int index) { - int fd = fds_[index]; - fds_[index] = -1; - return fd; - } - - private: - int fds_[2]; -}; - -}}} // apache::thrift::test - -#endif // THRIFT_TEST_SOCKETPAIR_H_ diff --git a/thrift/lib/cpp/test/TimeUtil.h b/thrift/lib/cpp/test/TimeUtil.h deleted file mode 100644 index d4f0fcd72d..0000000000 --- a/thrift/lib/cpp/test/TimeUtil.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_TIMEUTIL_H_ -#define THRIFT_TEST_TIMEUTIL_H_ 1 - -#include -#include - -namespace apache { namespace thrift { namespace test { - -class TimePoint { - public: - explicit TimePoint(bool set = true) - : timeStart_(0), - timeEnd_(0), - timeWaiting_(0), - tid_(0) { - if (set) { - reset(); - } - } - - void reset(); - - bool isUnset() const { - return (timeStart_ == 0 && timeEnd_ == 0 && timeWaiting_ == 0); - } - - int64_t getTime() const { - return timeStart_; - } - - int64_t getTimeStart() const { - return timeStart_; - } - - int64_t getTimeEnd() const { - return timeStart_; - } - - int64_t getTimeWaiting() const { - return timeWaiting_; - } - - pid_t getTid() const { - return tid_; - } - - private: - int64_t timeStart_; - int64_t timeEnd_; - int64_t timeWaiting_; - pid_t tid_; -}; - -std::ostream& operator<<(std::ostream& os, const TimePoint& timePoint); - -boost::test_tools::predicate_result checkTimeout(const TimePoint& start, - const TimePoint& end, - int64_t expectedMS, - bool allowSmaller, - int64_t tolerance = 5); - -/** - * Check how long a timeout took to fire. - * - * This method verifies: - * - that the timeout did not fire too early (never less than expectedMS) - * - that the timeout fired within a reasonable period of the expected - * duration. It must fire within the specified tolerance, excluding time - * that this process spent waiting to be scheduled. - * - * @param start A TimePoint object set just before the timeout - * was scheduled. - * @param end A TimePoint object set when the timeout fired. - * @param expectedMS The timeout duration, in milliseconds - * @param tolerance The tolerance, in milliseconds. - */ -#define T_CHECK_TIMEOUT(start, end, expectedMS, ...) \ - BOOST_CHECK(apache::thrift::test::checkTimeout((start), (end), \ - (expectedMS), false, \ - ##__VA_ARGS__)) - -/** - * Verify that an event took less than a specified amount of time. - * - * This is similar to T_CHECK_TIMEOUT, but does not fail if the event took less - * than the allowed time. - */ -#define T_CHECK_TIME_LT(start, end, expectedMS, ...) \ - BOOST_CHECK(apache::thrift::test::checkTimeout((start), (end), \ - (expectedMS), true, \ - ##__VA_ARGS__)) - -}}} // apache::thrift::test - -#endif // THRIFT_TEST_TIMEUTIL_H_ diff --git a/thrift/lib/cpp/test/checks.h b/thrift/lib/cpp/test/checks.h deleted file mode 100644 index 4ee07f5d0c..0000000000 --- a/thrift/lib/cpp/test/checks.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TEST_CHECKS_H_ -#define THRIFT_TEST_CHECKS_H_ 1 - -#include -#include "common/logging/logging.h" -#include "thrift/lib/cpp/protocol/TDebugProtocol.h" - - -namespace apache { namespace thrift { namespace test { - -template -inline std::string* formatString(const T1& v1, const T2& v2, - const std::string& op) { - std::stringstream ss; - ss << ThriftDebugString(v1) << " "<< op <<" " << ThriftDebugString(v2); - return new std::string(ss.str()); -} - -template -inline std::string* checkThriftEqImpl(const T1& val1, const T2& val2) -{ - if (val1 == val2) { - return NULL; - } - return formatString(val1, val2, "=="); -} - -template -inline std::string* checkThriftNeImpl(const T1& val1, const T2& val2) -{ - if (val1 != val2) { - return NULL; - } - return formatString(val1, val2, "!="); -} - -template -inline std::string* checkThriftLeImpl(const T1& val1, const T2& val2) -{ - if (val1 <= val2) { - return NULL; - } - return formatString(val1, val2, "<="); -} - -template -inline std::string* checkThriftLtImpl(const T1& val1, const T2& val2) { - - if (val1 < val2) { - return NULL; - } - return formatString(val1, val2, "<"); -} - -template -inline std::string* checkThriftGeImpl(const T1& val1, const T2& val2) -{ - if (val1 >= val2) { - return NULL; - } - return formatString(val1, val2, ">="); -} - -template -inline std::string* checkThriftGtImpl(const T1& val1, const T2& val2) -{ - if (val1 > val2) { - return NULL; - } - return formatString(val1, val2, ">"); -} - -}}} - -#define THRIFT_CHECK_OP(name, val1, val2) \ - while (std::string* _checkResult = \ - apache::thrift::test::checkThrift##name##Impl((val1), (val2))) \ - google::LogMessageFatal(__FILE__, __LINE__, \ - google::CheckOpString(_checkResult)).stream() - -#define THRIFT_CHECK_EQ(val1, val2) THRIFT_CHECK_OP(Eq, val1, val2) -#define THRIFT_CHECK_NE(val1, val2) THRIFT_CHECK_OP(Ne, val1, val2) -#define THRIFT_CHECK_LE(val1, val2) THRIFT_CHECK_OP(Le, val1, val2) -#define THRIFT_CHECK_LT(val1, val2) THRIFT_CHECK_OP(Lt, val1, val2) -#define THRIFT_CHECK_GE(val1, val2) THRIFT_CHECK_OP(Ge, val1, val2) -#define THRIFT_CHECK_GT(val1, val2) THRIFT_CHECK_OP(Gt, val1, val2) - -#endif diff --git a/thrift/lib/cpp/test/loadgen/Controller.h b/thrift/lib/cpp/test/loadgen/Controller.h deleted file mode 100644 index 84805664d6..0000000000 --- a/thrift/lib/cpp/test/loadgen/Controller.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_CONTROLLER_H_ -#define THRIFT_TEST_LOADGEN_CONTROLLER_H_ 1 - -#include - -#include "thrift/lib/cpp/concurrency/Monitor.h" -#include "thrift/lib/cpp/test/loadgen/LoadConfig.h" -#include "thrift/lib/cpp/test/loadgen/IntervalTimer.h" - -namespace apache { namespace thrift { - -namespace concurrency { - -class PosixThreadFactory; - -} // apache::thrift::concurrency - -namespace loadgen { - -class WorkerFactory; -class WorkerIf; -class Monitor; - -class Controller : private boost::noncopyable { - public: - Controller(WorkerFactory* factory, Monitor* monitor, - boost::shared_ptr config, - apache::thrift::concurrency::PosixThreadFactory* threadFactory = NULL); - - void run(uint32_t numThreads, double monitorInterval = 1.0); - - private: - class WorkerRunner; - typedef std::vector< boost::shared_ptr > WorkerVector; - - void startWorkers(uint32_t numThreads); - void runMonitor(double interval); - boost::shared_ptr createWorker(); - - concurrency::Monitor initMonitor_; - uint32_t numThreads_; - WorkerFactory* workerFactory_; - Monitor* monitor_; - WorkerVector workers_; - IntervalTimer intervalTimer_; - boost::shared_ptr config_; - apache::thrift::concurrency::PosixThreadFactory* threadFactory_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_CONTROLLER_H_ diff --git a/thrift/lib/cpp/test/loadgen/IntervalTimer.h b/thrift/lib/cpp/test/loadgen/IntervalTimer.h deleted file mode 100644 index 92924a07dd..0000000000 --- a/thrift/lib/cpp/test/loadgen/IntervalTimer.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_INTERVALTIMER_H_ -#define THRIFT_TEST_LOADGEN_INTERVALTIMER_H_ 1 - -#include "thrift/lib/cpp/concurrency/Util.h" -#include "thrift/lib/cpp/concurrency/Mutex.h" -#include "thrift/lib/cpp/TLogging.h" - -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * IntervalTimer helps perform tasks at a desired rate. - * - * Call sleep() in between each operation, and it will sleep the required - * amount of time to hit the target rate. It accounts for the time required to - * perform each operation, and it also adjusts the subsequent intervals if the - * system sleep call wakes up later than requested. This allows good accuracy - * for the average rate, even when the requested interval is very small. Works - * between multiple threads. - */ -class IntervalTimer { - public: - /** - * Create a new IntervalTimer - * - * @param intervalNsec The desired number of ns each interval should take. - * @param maxBacklog If we can't keep up with the requested rate, reset - * when we fall more than maxBacklog microseconds - * behind. If the rate does eventually recover, this - * will setting helps reduce the amount of time that the - * timer goes too fast in order to catch up to the - * average rate. - */ - IntervalTimer(uint64_t intervalNsec, - uint64_t maxBacklog = 3 * concurrency::Util::US_PER_S) - : numTimes_(0) - , intervalNsec_(intervalNsec) - , intervalStart_(0) - , maxBacklog_(maxBacklog) { } - - void setIntervalNsec(uint64_t interval) { - intervalNsec_ = interval; - } - - void setRatePerSec(uint64_t rate) { - if (rate == 0) intervalNsec_ = 0; - else intervalNsec_ = concurrency::Util::NS_PER_S / rate; - } - - /** - * Start the timer. - * - * Call this method before the first interval. - */ - void start() { - intervalStart_ = concurrency::Util::currentTimeUsec(); - } - - /** - * Sleep until the next interval should start. - * - * @return Returns true during normal operations, and false if the maxBacklog - * was hit and the timer has reset the average rate calculation. - */ - bool sleep() { - // Go as fast as possible when intervalNsec_ is 0 - if (intervalNsec_ == 0) { - return true; - } - - - uint64_t waitUntil, now; - { - concurrency::Guard guard(mutex_); - - // intervalStart_ is when the just previous interval started (or when it - // was supposed to start, if we aren't able to keep up with the requested - // rate). - // - // Update it to be when the next interval is supposed to start - numTimes_++; - now = concurrency::Util::currentTimeUsec(); - - waitUntil = intervalStart_ + (intervalNsec_ * numTimes_) / 1000; - - if (now > waitUntil) { - // If we can't keep up with the requested rate, we'll keep falling - // farther and farther behind. - // - // If we fall farther than maxBacklog_ behind, reset intervalStart_ to - // the current time. This way, if the operations eventually do speed up - // and we are able to meet the requested rate, we won't exceed it for - // too long trying to catch up. - uint64_t delta = now - waitUntil; - if (delta > maxBacklog_) { - intervalStart_ = now; - numTimes_ = 0; - return false; - } - return true; - } - } - - usleep(waitUntil - now); - return true; - } - - private: - uint64_t numTimes_; - uint64_t intervalNsec_; - uint64_t intervalStart_; - uint64_t maxBacklog_; - concurrency::Mutex mutex_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_INTERVALTIMER_H_ diff --git a/thrift/lib/cpp/test/loadgen/LatencyMonitor.h b/thrift/lib/cpp/test/loadgen/LatencyMonitor.h deleted file mode 100644 index 5d6d9522dc..0000000000 --- a/thrift/lib/cpp/test/loadgen/LatencyMonitor.h +++ /dev/null @@ -1,129 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_LATENCYMONITOR_H_ -#define THRIFT_TEST_LOADGEN_LATENCYMONITOR_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/TerminalMonitor.h" -#include "thrift/lib/cpp/test/loadgen/OpEnabledState.h" -#include "thrift/lib/cpp/test/loadgen/LatencyScoreBoard.h" - -namespace apache { namespace thrift { namespace loadgen { - -class LoadConfig; - -/** - * A Monitor implementation that prints QPS rates and latency information for - * all operations. - */ -class LatencyMonitor : public TerminalMonitor { - public: - /// The various fields that LatencyMonitor knows how to print - enum FieldEnum { - FIELD_COUNT, - FIELD_QPS, - FIELD_LATENCY, - FIELD_ALL_TIME_COUNT, - FIELD_ALL_TIME_QPS, - FIELD_ALL_TIME_LATENCY, - }; - - struct FieldInfo { - FieldInfo(FieldEnum f, int w = -1) - : field(f) - , width(w) - , dynamicWidth(true) {} - - FieldEnum field; - int width; - bool dynamicWidth; - }; - - typedef std::vector FieldInfoVector; - - LatencyMonitor(const boost::shared_ptr& config); - - /** - * Set the fields printed for the specified operation. - */ - void setFields(uint32_t opType, const FieldInfoVector* fields); - - /** - * Set the fields printed for aggregate statistics for all operations. - */ - void setTotalFields(const FieldInfoVector* fields); - - virtual boost::shared_ptr newScoreBoard(int id); - - virtual void initializeInfo(); - virtual uint32_t printHeader(); - virtual uint32_t printInfo(uint64_t intervalUsec); - - private: - typedef std::vector< boost::shared_ptr > ScoreBoardVector; - - void printOpHeader(FieldInfoVector* fields); - void printOpInfo(FieldInfoVector* fields, - const LatencyScoreBoard::OpData* current, - const LatencyScoreBoard::OpData* prev, - const LatencyScoreBoard::OpData* initial, - uint64_t intervalUsec, - uint64_t allTimeUsec); - - uint32_t getFieldVectorWidth(const FieldInfoVector* fields) const; - const char *getFieldName(FieldEnum field) const; - uint32_t getDefaultFieldWidth(FieldEnum field) const; - - void formatFieldValue(FieldEnum field, - char* buf, - size_t buflen, - const LatencyScoreBoard::OpData* current, - const LatencyScoreBoard::OpData* prev, - const LatencyScoreBoard::OpData* initial, - uint64_t intervalUsec, - uint64_t allTimeUsec); - void formatLatency(char* buf, size_t buflen, double avg, double stddev); - - void aggregateWorkerScorboards(LatencyScoreBoard* scoreboard); - void printField(const char* value, int width); - void printField(const char* value, FieldInfo* fieldInfo); - - void setDefaultOpFields(); - void printLegend(); - bool isFieldInUse(FieldEnum field); - - uint32_t numOpTypes_; - - /// The list of fields to print for each operation - std::vector opFields_; - /// The fields to print for the aggregate information over all operations - FieldInfoVector totalFields_; - - int64_t initialTime_; - LatencyScoreBoard initialScoreBoard_; - - /// A scoreboard with information aggregated across all of the workers - LatencyScoreBoard aggregateScoreBoard_; - /// A vector of the actual scoreboards used by the workers - ScoreBoardVector scoreboards_; - boost::shared_ptr config_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_LATENCYMONITOR_H_ diff --git a/thrift/lib/cpp/test/loadgen/LatencyScoreBoard.h b/thrift/lib/cpp/test/loadgen/LatencyScoreBoard.h deleted file mode 100644 index 08037a82bd..0000000000 --- a/thrift/lib/cpp/test/loadgen/LatencyScoreBoard.h +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_LATENCYSCOREBOARD_H_ -#define THRIFT_TEST_LOADGEN_LATENCYSCOREBOARD_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/ScoreBoard.h" -#include "thrift/lib/cpp/test/loadgen/ScoreBoardOpVector.h" - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A ScoreBoard that tracks number of queries per second, as well as - * information about how long each operation takes. - * - * This ScoreBoard calls gettimeofday() twice for each operation, so it does - * add a small amount of overhead. If you have extremely high performance - * requirements, you could use QpsScoreBoard to track just the QPS rate and - * eliminate the gettimeofday() calls. - */ -class LatencyScoreBoard : public ScoreBoard { - public: - class OpData { - public: - OpData(); - - void addDataPoint(uint64_t latencyUsecs); - - void zero(); - void accumulate(const OpData* other); - - uint64_t getCount() const; - uint64_t getCountSince(const OpData* other) const; - double getLatencyAvg() const; - double getLatencyAvgSince(const OpData* other) const; - double getLatencyStdDev() const; - double getLatencyStdDevSince(const OpData* other) const; - - uint64_t count_; - uint64_t usecSum_; - uint64_t sumOfSquares_; - }; - - LatencyScoreBoard(uint32_t numOpsHint) - : startTime_(0) - , opData_(numOpsHint) {} - - virtual void opStarted(uint32_t opType); - virtual void opSucceeded(uint32_t opType); - virtual void opFailed(uint32_t opType); - - /** - * Get the OpData for a particular operation type - */ - const OpData* getOpData(uint32_t opType); - - /** - * Compute an OpData object with aggregate information over all operation - * types. - * - * @param result A pointer to the OpData object to fill in with aggregate - * information. - */ - void computeOpAggregate(OpData* result) const; - - /** - * Zero out the statistics. - */ - void zero(); - - /** - * Add the counters from another scoreboard to this one. - */ - void accumulate(const LatencyScoreBoard* other); - - private: - int64_t startTime_; - ScoreBoardOpVector opData_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_LATENCYSCOREBOARD_H_ diff --git a/thrift/lib/cpp/test/loadgen/LoadConfig.h b/thrift/lib/cpp/test/loadgen/LoadConfig.h deleted file mode 100644 index 90e2995d23..0000000000 --- a/thrift/lib/cpp/test/loadgen/LoadConfig.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_LOADCONFIG_H_ -#define THRIFT_TEST_LOADGEN_LOADCONFIG_H_ 1 - -#include -#include -#include - -namespace apache { namespace thrift { namespace loadgen { - -class LoadConfig { - public: - virtual ~LoadConfig() {} - - virtual uint32_t getNumOpTypes() const = 0; - - virtual uint32_t pickOpType() = 0; - virtual uint32_t pickOpsPerConnection() = 0; - - /** - * Return a human-readable name for an operation type. - * - * By default, just converts the integer value to a string, but this may be - * overridden by subclasses. - */ - virtual std::string getOpName(uint32_t opType); - - /** - * Get the number of worker threads to run. - */ - virtual uint32_t getNumWorkerThreads() const = 0; - - /** - * Get the desired number of queries per second. - * - * The workers should attempt to perform only this many operations per - * second. (It is possible that they will perform less than this if they - * cannot drive the requested qps rate.) - * - * @return Return the desired qps rate, or 0 if operations should be - * performed as fast as possible. - */ - virtual uint64_t getDesiredQPS() const { - return 0; - } -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_LOADCONFIG_H_ diff --git a/thrift/lib/cpp/test/loadgen/Monitor.h b/thrift/lib/cpp/test/loadgen/Monitor.h deleted file mode 100644 index 418a9701ff..0000000000 --- a/thrift/lib/cpp/test/loadgen/Monitor.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_MONITOR_H_ -#define THRIFT_TEST_LOADGEN_MONITOR_H_ 1 - -#include -#include -#include - -namespace apache { namespace thrift { namespace loadgen { - -class ScoreBoard; - -class Monitor { - public: - Monitor() {} - virtual ~Monitor() {} - - /** - * Create a new ScoreBoard object. - * - * This method will be called once for each worker thread. All calls to - * newScoreBoard() will be made before run() is invoked. - * - * For each Worker, newScoreBoard() will be called in the thread that will - * run that worker. However, the caller holds a lock and ensures that it - * will only be called in one thread at a time, so newScoreBoard() doesn't - * need to perform any locking internally. - * - * @param id The id of the Worker that will use this ScoreBoard. - */ - virtual boost::shared_ptr newScoreBoard(int id) = 0; - - /** - * Initialize monitoring information. - * - * This method is called once when the workers start, just before the initial - * monitoring interval. It can be used to get initial counter values from - * all of the Workers, so that statistics reported in the first call to - * redisplay() are accurate. - */ - virtual void initializeInfo() {} - - /** - * Redisplay the monitor information. - * - * @param intervalUsec The number of microseconds since the last call to - * redisplay() or initializeInfo(). - */ - virtual void redisplay(uint64_t intervalUsec) = 0; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_MONITOR_H_ diff --git a/thrift/lib/cpp/test/loadgen/OpEnabledState.h b/thrift/lib/cpp/test/loadgen/OpEnabledState.h deleted file mode 100644 index 5e834d9db4..0000000000 --- a/thrift/lib/cpp/test/loadgen/OpEnabledState.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_OPENABLEDSTATE_H_ -#define THRIFT_TEST_LOADGEN_OPENABLEDSTATE_H_ 1 - -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * This class tracks a boolean for each operation type, to tell if an operation - * is enabled or not. - * - * This is mainly intended to be used by Monitor implementations, so they can - * avoid monitoring (or at least printing) information for operations that are - * disabled. - */ -class OpEnabledState { - public: - OpEnabledState(uint32_t numOpTypes) { - enabled_.resize(numOpTypes, true); - } - - void setEnabled(uint32_t opType, bool enabled) { - assert(opType < enabled_.size()); - enabled_[opType] = enabled; - } - - void setAllOpsEnabled(bool enabled) { - for (std::vector::iterator it = enabled_.begin(); - it != enabled_.end(); - ++it) { - *it = enabled; - } - } - - bool isEnabled(uint32_t opType) const { - assert(opType < enabled_.size()); - return enabled_[opType]; - } - - uint32_t getNumEnabled() const { - uint32_t num = 0; - for (std::vector::const_iterator it = enabled_.begin(); - it != enabled_.end(); - ++it) { - if (*it) { - ++num; - } - } - - return num; - } - - private: - std::vector enabled_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_OPENABLEDSTATE_H_ diff --git a/thrift/lib/cpp/test/loadgen/QpsMonitor.h b/thrift/lib/cpp/test/loadgen/QpsMonitor.h deleted file mode 100644 index e4e11dfde8..0000000000 --- a/thrift/lib/cpp/test/loadgen/QpsMonitor.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_QPSMONITOR_H_ -#define THRIFT_TEST_LOADGEN_QPSMONITOR_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/TerminalMonitor.h" -#include "thrift/lib/cpp/test/loadgen/OpEnabledState.h" -#include "thrift/lib/cpp/test/loadgen/QpsScoreBoard.h" - -namespace apache { namespace thrift { namespace loadgen { - -class LoadConfig; - -/** - * A Monitor implementation that prints QPS rates for all operations. - */ -class QpsMonitor : public TerminalMonitor { - public: - QpsMonitor(const boost::shared_ptr& config); - - virtual boost::shared_ptr newScoreBoard(int id); - - virtual void initializeInfo(); - virtual uint32_t printHeader(); - virtual uint32_t printInfo(uint64_t intervalUsec); - - OpEnabledState* getEnabledState() { - return &enabledState_; - } - - const OpEnabledState* getEnabledState() const { - return &enabledState_; - } - - void printAllTimeQps(bool enabled) { - printAllTime_ = enabled; - } - - private: - typedef std::vector< boost::shared_ptr > ScoreBoardVector; - - void computeAggregate(QpsScoreBoard* scoreboard); - - int64_t initialTime_; - uint64_t initialSum_; - - bool printAllTime_; - OpEnabledState enabledState_; - - QpsScoreBoard aggregateScoreBoard_; - ScoreBoardVector scoreboards_; - boost::shared_ptr config_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_QPSMONITOR_H_ diff --git a/thrift/lib/cpp/test/loadgen/QpsScoreBoard.h b/thrift/lib/cpp/test/loadgen/QpsScoreBoard.h deleted file mode 100644 index 39ed6cb43e..0000000000 --- a/thrift/lib/cpp/test/loadgen/QpsScoreBoard.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_QPSSCOREBOARD_H_ -#define THRIFT_TEST_LOADGEN_QPSSCOREBOARD_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/ScoreBoard.h" -#include "thrift/lib/cpp/test/loadgen/ScoreBoardOpVector.h" - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A ScoreBoard that tracks number of queries per second. - * - * This is a very simple scoreboard, that adds very little overhead. - */ -class QpsScoreBoard : public ScoreBoard { - public: - QpsScoreBoard(uint32_t numOpsHint) : opData_(numOpsHint) {} - - virtual void opStarted(uint32_t opType); - virtual void opSucceeded(uint32_t opType); - virtual void opFailed(uint32_t opType); - - /** - * Get the number of operations performed for a specific operation type. - */ - uint64_t getCount(uint32_t opType) const; - - /** - * Compute the total number of operations performed, for all operation types. - */ - uint64_t computeTotalCount() const; - - /** - * Zero out the statistics. - */ - void zero(); - - /** - * Add the counters from another scoreboard to this one. - */ - void accumulate(const QpsScoreBoard* other); - - private: - struct OpData { - OpData() : count(0) {} - - void zero() { - count = 0; - } - - void accumulate(const OpData* other) { - count += other->count; - } - - uint64_t count; - }; - - ScoreBoardOpVector opData_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_QPSSCOREBOARD_H_ diff --git a/thrift/lib/cpp/test/loadgen/RNG.h b/thrift/lib/cpp/test/loadgen/RNG.h deleted file mode 100644 index fb91056583..0000000000 --- a/thrift/lib/cpp/test/loadgen/RNG.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_RNG_H_ -#define THRIFT_TEST_LOADGEN_RNG_H_ 1 - -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A random number generator to use for load tests. - * - * We keep one RNG per thread, to avoid having to perform locking when getting - * random numbers. - * - * RNG also implements the boost random number generator interface, so it can - * be used as an engine for boost random distributions. - * - * - * This class is essentially just a wrapper around boost::mt19937. - * We have to wrap it because some of the boost code copy-constructs the - * generators, causing the state of the original generator to never be updated. - * (In particular uniform_01 copy constructs its generator argument, and - * variate_generator may end up using uniform_01.) - * - * It's rather annoying that we have to define our own wrapper class for this. - */ -class RNG { - public: - // Use boost::mt19937 as the underlying RNG - typedef boost::mt19937 BoostRNG; - - // result_type and has_fixed_range are required for the boost interfaces - typedef BoostRNG::result_type result_type; - static const bool has_fixed_range = false; - - RNG(BoostRNG* rng) : rng_(rng) {} - - /** - * Get the thread-local RNG. - */ - static RNG& getRNG(); - - /** - * Set the RNG seed. - * - * This value is used to pick seeds for new thread-local RNGs. - * It won't affect thread-local RNGs that have already been created. - * - * Note that that the seed value used for each thread-local RNG depends on - * the order in which the thread-local RNGs are created. You may not get - * consistent results across runs if your threads are not initialized in a - * consistent order. - */ - static void setGlobalSeed(result_type s); - - /** - * Re-seed this RNG - */ - void seed(result_type s) { - rng_->seed(s); - } - - /** - * Get a random number. - * - * Part of the boost random generator interface. - */ - result_type operator()() { - return (*rng_)(); - } - - /** - * Get the minimum value that can be returned. - * - * Part of the boost random generator interface. - */ - result_type min() const { - return rng_->min(); - } - - /** - * Get the maximum value that can be returned. - * - * Part of the boost random generator interface. - */ - result_type max() const { - return rng_->max(); - } - - /* - * Helper functions to pick random uint32_t values - */ - static uint32_t getU32(); - static uint32_t getU32(uint32_t max); - static uint32_t getU32(uint32_t min, uint32_t max); - - /** - * Helper function to pick random double values in the range [0.0, 1.0) - */ - static double getReal(); - - /** - * Helper function to pick random double values in the range [min, max) - */ - static double getReal(double min, double max); - - /** - * Helper function to pick random values in a log-normal distribution. - * - * @param mean The mean value for the log-normal distribution. - * @param sigma The sigma value for the log-normal distribution. - * (This controls how spread-out the distribution will be.) - * If negative, defaults to half the mean. - */ - static double getLogNormal(double mean, double sigma = -1.0); - - private: - BoostRNG* rng_; -}; - -}}} // apache::thrift::test - -#endif // THRIFT_TEST_LOADGEN_RNG_H_ diff --git a/thrift/lib/cpp/test/loadgen/ScoreBoard.h b/thrift/lib/cpp/test/loadgen/ScoreBoard.h deleted file mode 100644 index fd5cd33361..0000000000 --- a/thrift/lib/cpp/test/loadgen/ScoreBoard.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_SCOREBOARD_H_ -#define THRIFT_TEST_LOADGEN_SCOREBOARD_H_ 1 - -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A ScoreBoard object keeps statistics for a Worker. - * - * There is intended to be one ScoreBoard object per Worker, so that it doesn't - * need to perform locking when recording statistics. - * - * The Monitor object is responsible for aggregating the statistics from the - * various ScoreBoards. - */ -class ScoreBoard { - public: - virtual ~ScoreBoard() {} - - /** - * opStarted() is invoked just before each call to - * Worker::performOperation(). - */ - virtual void opStarted(uint32_t opType) = 0; - - /** - * opSucceeded() is invoked after each successful call to - * Worker::performOperation(). - */ - virtual void opSucceeded(uint32_t opType) = 0; - - /** - * opFailed() is invoked if Worker::performOperation() throws an exception. - */ - virtual void opFailed(uint32_t opType) = 0; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_SCOREBOARD_H_ diff --git a/thrift/lib/cpp/test/loadgen/ScoreBoardOpVector.h b/thrift/lib/cpp/test/loadgen/ScoreBoardOpVector.h deleted file mode 100644 index 1935a84627..0000000000 --- a/thrift/lib/cpp/test/loadgen/ScoreBoardOpVector.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_SCOREBOARDOPVECTOR_H_ -#define THRIFT_TEST_LOADGEN_SCOREBOARDOPVECTOR_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/ScoreBoard.h" - -#include -#include -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A vector of per-operation scoreboard data. - * - * This is useful for implementing ScoreBoard classes. - * - * The OpDataT class must have: - * - a default constructor - * - a zero() method - * - an accumulate() method - */ -template -class ScoreBoardOpVector { - private: - typedef std::vector DataVector; - - public: - typedef typename DataVector::iterator Iterator; - typedef typename DataVector::const_iterator ConstIterator; - - ScoreBoardOpVector(uint32_t numOpsHint) { - resize(numOpsHint); - } - - OpDataT* getOpData(uint32_t opType) { - if (opType >= opData_.size()) { - resize(opType + 1); - } - return &opData_[opType]; - } - - const OpDataT* getOpDataOrNull(uint32_t opType) const { - if (opType >= opData_.size()) { - return NULL; - } - return &opData_[opType]; - } - - void zero() { - for (Iterator it = opData_.begin(); it != opData_.end(); ++it) { - it->zero(); - } - } - - void accumulate(const ScoreBoardOpVector* other) { - if (other->opData_.size() > opData_.size()) { - resize(other->opData_.size()); - } - - uint32_t index = 0; - for (ConstIterator it = other->opData_.begin(); - it != other->opData_.end(); - ++it, ++index) { - opData_[index].accumulate(&(*it)); - } - } - - void accumulateOverOps(OpDataT* result) const { - result->zero(); - for (ConstIterator it = opData_.begin(); it != opData_.end(); ++it) { - result->accumulate(&(*it)); - } - } - - Iterator begin() { - return opData_.begin(); - } - Iterator end() { - return opData_.end(); - } - - ConstIterator begin() const { - return opData_.begin(); - } - ConstIterator end() const { - return opData_.end(); - } - - private: - void resize(uint32_t numOps) { - assert(numOps > opData_.size()); - - // We could add some padding here. In the past, when using glibc malloc - // with QpsScoreBoard and just 1 operation, I've seen the opData for two - // different worker threads end up being allocated on the same cache line. - // This hurts peformance, since the two worker threads run on different - // CPUs and they each keep evicting the cache line from the other CPU. - // With jemalloc this doesn't seem to happen anymore, and allocating more - // space then necessary here can very slightly slow down performance. - - opData_.resize(numOps); - } - - DataVector opData_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_SCOREBOARDOPVECTOR_H_ diff --git a/thrift/lib/cpp/test/loadgen/TerminalMonitor.h b/thrift/lib/cpp/test/loadgen/TerminalMonitor.h deleted file mode 100644 index f06847dbd1..0000000000 --- a/thrift/lib/cpp/test/loadgen/TerminalMonitor.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_TERMINALMONITOR_H_ -#define THRIFT_TEST_LOADGEN_TERMINALMONITOR_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/Monitor.h" - -namespace apache { namespace thrift { namespace loadgen { - -/** - * A Monitor object that prints statistics to a terminal. - * - * It handles printing header lines, and re-printing the header whenever it - * scrolls off of the screen. - */ -class TerminalMonitor : public Monitor { - public: - TerminalMonitor(); - - virtual void redisplay(uint64_t intervalUsec); - - /** - * Initialize monitoring information. - * - * This method is called immediately after all of the Workers have started, - * just before the initial monitoring interval. It can be used to get - * initial counter values from all of the Workers, so that statistics - * reported in the first call to printInfo() are accurate. - * - * If subclasses override initializeInfo(), they should make sure to call - * TerminalMonitor::initializeInfo() in their method. - */ - virtual void initializeInfo(); - - /** - * Print header lines. - * - * This is called when monitoring first starts. If the screen height can - * be determined, this is also called every time the previous header scrolls - * off the screen. - * - * @return Returns the number of lines printed. - */ - virtual uint32_t printHeader() = 0; - - /** - * Print monitoring information. - * - * This is called once every specified interval. - * - * @param intervalUsec The number of microseconds since the previous call to - * printInfo(). The first time printInfo() is called, - * this is the number of microseconds since - * initializeInfo() was called. - * - * @return Returns the number of lines printed. - */ - virtual uint32_t printInfo(uint64_t intervalUsec) = 0; - - protected: - int32_t getScreenHeight(); - - int32_t screenHeight_; - uint32_t linesPrinted_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_TERMINALMONITOR_H_ diff --git a/thrift/lib/cpp/test/loadgen/WeightedLoadConfig.h b/thrift/lib/cpp/test/loadgen/WeightedLoadConfig.h deleted file mode 100644 index b76522d710..0000000000 --- a/thrift/lib/cpp/test/loadgen/WeightedLoadConfig.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_WEIGHTEDLOADCONFIG_H_ -#define THRIFT_TEST_LOADGEN_WEIGHTEDLOADCONFIG_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/LoadConfig.h" - -#include -#include - -namespace apache { namespace thrift { namespace loadgen { - -class OpEnabledState; - -class WeightedLoadConfig : public LoadConfig { - public: - WeightedLoadConfig(uint32_t numOps); - - void setOpInfo(uint32_t opType, - const std::string& name, - uint32_t weight); - uint32_t getOpWeight(uint32_t opType); - - virtual uint32_t getNumOpTypes() const; - virtual uint32_t pickOpType(); - virtual uint32_t pickOpsPerConnection() = 0; - - virtual std::string getOpName(uint32_t opType); - - /** - * Update an OpEnabledState object to enable only operations that have a - * non-zero weight. - */ - virtual void configureEnabledState(OpEnabledState* enabledState) const; - - private: - uint32_t weightsSum_; - std::vector weights_; - std::vector names_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_WEIGHTEDLOADCONFIG_H_ diff --git a/thrift/lib/cpp/test/loadgen/Worker.h b/thrift/lib/cpp/test/loadgen/Worker.h deleted file mode 100644 index 04db52fa48..0000000000 --- a/thrift/lib/cpp/test/loadgen/Worker.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_WORKER_H_ -#define THRIFT_TEST_LOADGEN_WORKER_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/WorkerIf.h" - -#include "thrift/lib/cpp/test/loadgen/IntervalTimer.h" -#include "thrift/lib/cpp/test/loadgen/LoadConfig.h" -#include "thrift/lib/cpp/test/loadgen/ScoreBoard.h" -#include "thrift/lib/cpp/concurrency/Util.h" -#include "thrift/lib/cpp/TLogging.h" - -#include -#include - -namespace apache { namespace thrift { namespace loadgen { - -/** - * Main Worker implementation - * - * If you are implementing a new load generator, you should define your own - * subclass of Worker, and implement the createConnection() and - * performOperation() methods. - * - * This is templatized on the client type. - * - * The Config type is also templatized for convenience. This allows - * subclasses to store their own more-specific configuration type that derives - * from LoadConfig. - */ -template -class Worker : public WorkerIf, public boost::noncopyable { - public: - typedef ClientT ClientType; - typedef ConfigT ConfigType; - - enum ErrorAction { - EA_CONTINUE, - EA_NEXT_CONNECTION, - EA_DROP_THREAD, - EA_ABORT - }; - - Worker() - : id_(-1) - , alive_(false) - , intervalTimer_(NULL) - , config_() - , scoreboard_() {} - - /** - * Initialize the Worker. - * - * This is separate from the constructor so that developers writing new - * Worker implementations don't have to pass through additional constructor - * arguments. If the subclass doesn't need any special initialization, they - * can just use the default constructor. - * - * If a Worker implementation does need to perform additional implementation- - * specific initialization after the config object has been set, it can - * override init(). - */ - void init(int id, - const boost::shared_ptr& config, - const boost::shared_ptr& scoreboard, - IntervalTimer* itimer) { - assert(id_ == -1); - assert(!config_); - id_ = id; - config_ = config; - scoreboard_ = scoreboard; - intervalTimer_ = itimer; - alive_ = true; - } - - virtual ~Worker() {} - - int getID() const { - return id_; - } - - /** - * Create a new connection to the server. - * - * Subclasses must implement this method. - */ - virtual boost::shared_ptr createConnection() = 0; - - /** - * Perform an operation on a connection. - * - * Subclasses must implement this method. - */ - virtual void performOperation(const boost::shared_ptr& client, - uint32_t opType) = 0; - - /** - * Determine how to handle an exception raised by createConnection(). - * - * The default behavior is to log an error message and abort. - * Subclasses may override this function to provide alternate behavior. - */ - virtual ErrorAction handleConnError(const std::exception& ex) { - T_ERROR("worker %d caught %s exception while connecting: %s", - id_, typeid(ex).name(), ex.what()); - return EA_ABORT; - } - - /** - * Determine how to handle an exception raised by performOperation(). - * - * The default behavior is to log an error message and continue processing on - * a new connection. Subclasses may override this function to provide - * alternate behavior. - */ - virtual ErrorAction handleOpError(uint32_t opType, const std::exception& ex) { - T_ERROR("worker %d caught %s exception performing operation %s: %s", - id_, typeid(ex).name(), config_->getOpName(opType).c_str(), - ex.what()); - return EA_NEXT_CONNECTION; - } - - /** - * Get the LoadConfig for this worker. - * - * (Returns a templatized config type for convenience, so subclasses can - * store a subclass of LoadConfig, and retrieve it without having to cast it - * back to the subclass type.) - */ - const boost::shared_ptr& getConfig() const { - return config_; - } - - /** - * The main worker method. - * - * Loop forever creating connections and performing operations on them. - * (May return if an error occurs and the error handler returns - * EA_DROP_THREAD.) - */ - virtual void run() { - while (true) { - // Create a new connection - boost::shared_ptr client; - try { - client = createConnection(); - } catch (const std::exception& ex) { - ErrorAction action = handleConnError(ex); - if (action == EA_CONTINUE || action == EA_NEXT_CONNECTION) { - // continue the next connection loop - continue; - } else if (action == EA_DROP_THREAD) { - T_ERROR("worker %d exiting after connection error", id_); - alive_ = false; - return; - } else if (action == EA_ABORT) { - T_ERROR("worker %d causing abort after connection error", id_); - abort(); - } else { - T_ERROR("worker %d received unknown conn error action %d; aborting", - id_, action); - abort(); - } - } - - // Determine how many operations to perform on this connection - uint32_t nops = config_->pickOpsPerConnection(); - - // Perform operations on the connection - for (uint32_t n = 0; n < nops; ++n) { - // Only send as fast as requested - if (!intervalTimer_->sleep()) { - T_ERROR("can't keep up with requested QPS rate"); - } - uint32_t opType = config_->pickOpType(); - scoreboard_->opStarted(opType); - try { - performOperation(client, opType); - scoreboard_->opSucceeded(opType); - } catch (const std::exception& ex) { - scoreboard_->opFailed(opType); - ErrorAction action = handleOpError(opType, ex); - if (action == EA_CONTINUE) { - // nothing to do; continue trying to use this connection - } else if (action == EA_NEXT_CONNECTION) { - // break out of the op loop, - // continue the next connection loop - break; - } else if (action == EA_DROP_THREAD) { - T_ERROR("worker %d exiting after op %d error", id_, opType); - // return from run() - alive_ = false; - return; - } else if (action == EA_ABORT) { - T_ERROR("worker %d causing abort after op %d error", id_, opType); - abort(); - } else { - T_ERROR("worker %d received unknown op error action %d; aborting", - id_, action); - abort(); - } - } - } - } - - assert(false); - alive_ = false; - } - - bool isAlive() const { - return alive_; - } - - protected: - // Methods needed for overriding ::run - const boost::shared_ptr& getScoreBoard() const { - return scoreboard_; - } - - void stopWorker() { - alive_ = false; - } - - private: - int id_; - bool alive_; - IntervalTimer* intervalTimer_; - boost::shared_ptr config_; - boost::shared_ptr scoreboard_; -}; - - -/** - * Default WorkerFactory implementation. - * - * This factory creates Worker objects using the default constructor, - * then calls init(id, config, scoreboard) on each worker before returning it. - */ -template -class SimpleWorkerFactory : public WorkerFactory { - public: - SimpleWorkerFactory(const boost::shared_ptr& config) - : config_(config) {} - - virtual WorkerT* newWorker(int id, - const boost::shared_ptr& scoreboard, - IntervalTimer* itimer) { - std::auto_ptr worker(new WorkerT); - worker->init(id, config_, scoreboard, itimer); - return worker.release(); - } - - boost::shared_ptr config_; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_WORKER_H_ diff --git a/thrift/lib/cpp/test/loadgen/WorkerIf.h b/thrift/lib/cpp/test/loadgen/WorkerIf.h deleted file mode 100644 index a5e65fc560..0000000000 --- a/thrift/lib/cpp/test/loadgen/WorkerIf.h +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_WORKERIF_H_ -#define THRIFT_TEST_LOADGEN_WORKERIF_H_ 1 - -#include - -#include "thrift/lib/cpp/test/loadgen/IntervalTimer.h" - -namespace apache { namespace thrift { namespace loadgen { - -class ScoreBoard; - -/** - * Interface class for all Worker types to inherit from - * - * If you are implementing a new load generator, you generally should derive - * from Worker instead of using WorkerIf directly. WorkerIf - * only exists to provide a common base class for all Worker template - * instantiations. - */ -class WorkerIf { - public: - virtual ~WorkerIf() {} - - /** - * Run the worker - */ - virtual void run() = 0; - - /** - * Determine if this worker is still running. - * - * Returns false if this worker's run() function has returned. - */ - virtual bool isAlive() const = 0; -}; - - -/** - * WorkerFactory - */ -class WorkerFactory { - public: - virtual ~WorkerFactory() {} - - virtual WorkerIf* newWorker(int id, - const boost::shared_ptr& sb, - IntervalTimer* itimer) = 0; -}; - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_WORKERIF_H_ diff --git a/thrift/lib/cpp/test/loadgen/loadgen.h b/thrift/lib/cpp/test/loadgen/loadgen.h deleted file mode 100644 index 8158cace73..0000000000 --- a/thrift/lib/cpp/test/loadgen/loadgen.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TEST_LOADGEN_LOADGEN_H_ -#define THRIFT_TEST_LOADGEN_LOADGEN_H_ 1 - -#include "thrift/lib/cpp/test/loadgen/Worker.h" - -namespace apache { namespace thrift { - -namespace concurrency { - -class PosixThreadFactory; - -} // apache::thrift::concurrency - -namespace loadgen { - -class LoadConfig; -class Monitor; - -/** - * Run load generation. - * - * @param factory The WorkerFactory to use to create each worker thread. - * @param config The LoadConfig object that describes the operations. - * @param interval The number of seconds between each line of statistics - * output. - * @param monitor The Monitor to use for printing statistics. If NULL, - * a LatencyMonitor will be used. - */ -void runLoadGen(WorkerFactory* factory, - const boost::shared_ptr& config, - double interval = 1.0, - Monitor* monitor = NULL, - apache::thrift::concurrency::PosixThreadFactory* threadFactory = NULL); - -/** - * Run load generation. - * - * This is a helper function around runLoadGen() that automatically creates a - * SimpleWorkerFactory. - */ -template -void runLoadGen(const boost::shared_ptr& config, - double interval = 1.0, - Monitor* monitor = NULL, - apache::thrift::concurrency::PosixThreadFactory* threadFactory = NULL) { - SimpleWorkerFactory factory(config); - runLoadGen(&factory, config, interval, monitor, threadFactory); -} - -/** - * Run load generation. - * - * This is a helper function around runLoadGen() that automatically creates a - * SimpleWorkerFactory. - */ -template -void runLoadGen(const boost::shared_ptr& config, - double interval = 1.0, - Monitor* monitor = NULL, - apache::thrift::concurrency::PosixThreadFactory* threadFactory = NULL) { - runLoadGen(config, interval, monitor, threadFactory); -} - -}}} // apache::thrift::loadgen - -#endif // THRIFT_TEST_LOADGEN_LOADGEN_H_ diff --git a/thrift/lib/cpp/thrift_config.h b/thrift/lib/cpp/thrift_config.h deleted file mode 100644 index 6a84630cc8..0000000000 --- a/thrift/lib/cpp/thrift_config.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef THRIFT_THRIFT_CONFIG_H_ -#define THRIFT_THRIFT_CONFIG_H_ - -#include - -/* Define to 1 if you have the `clock_gettime' function. */ -#define THRIFT_HAVE_CLOCK_GETTIME 1 - -/* Define to 1 if you have the header file. */ -#define THRIFT_HAVE_ENDIAN_H 1 - -/* Define to 1 if you have the header file. */ -#define THRIFT_HAVE_INTTYPES_H 1 - -/* Define to 1 if you have the header file. */ -#define THRIFT_HAVE_STDINT_H 1 - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define ARITHMETIC_RIGHT_SHIFT 1 - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define LOGICAL_RIGHT_SHIFT 2 - -/* Possible value for SIGNED_RIGHT_SHIFT_IS */ -#define UNKNOWN_RIGHT_SHIFT 3 - -/* Indicates the effect of the right shift operator on negative signed - integers */ -#define SIGNED_RIGHT_SHIFT_IS 1 - -/* - * Define to noexcept if the compiler supports noexcept - * - * If the compiler does not support noexcept, we define to the empty string - * in optimized builds. In debug builds, we define to throw(), so that the - * compiler will complain if a child class does not use THRIFT_NOEXCEPT when - * overriding a virtual method originally declared with THRIFT_NOEXCEPT. In - * debug mode, the program will also immediately call unexpected() if a - * THRIFT_NOEXCEPT function does throw an exception. - */ -#ifdef NDEBUG -#define THRIFT_NOEXCEPT -#else -#define THRIFT_NOEXCEPT throw() -#endif - -/* - * We have std::unique_ptr if we're compiling with gcc-4.4 or greater - * and C++0x features are enabled. - */ -#ifdef __GNUC__ -#if __GNUC_PREREQ(4, 4) -#define THRIFT_HAVE_UNIQUE_PTR __GXX_EXPERIMENTAL_CXX0X__ -#else -#define THRIFT_HAVE_UNIQUE_PTR 0 -#endif -#else /* ! __GNUC__ */ -#define THRIFT_HAVE_UNIQUE_PTR 0 -#endif /* __GNUC__ */ - -#endif /* THRIFT_THRIFT_CONFIG_H_ */ diff --git a/thrift/lib/cpp/transport/HDFS.h b/thrift/lib/cpp/transport/HDFS.h deleted file mode 100644 index 41fab86432..0000000000 --- a/thrift/lib/cpp/transport/HDFS.h +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright (c) 2009- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TRANSPORT_HDFS_H -#define _THRIFT_TRANSPORT_HDFS_H - -#include -#include - -/** - * Dead-simple wrappers around hdfs and hdfsFile descriptors. - * The wrappers take responsibility of descriptor allocation/release in ctor/dtor. - * - * @author Li Zhang - */ - -class HDFS { - public: - HDFS(); - HDFS(const std::string& host, uint16_t port); - bool disconnect(); - ~HDFS(); - void* getHandle() const { - return hdfs_; - } - bool isConnected() const { - return hdfs_ != NULL; - } - protected: - void* hdfs_; -}; - -class HDFSFile { - public: - enum AccessPolicy { - OPEN_FOR_READ = 0, - CREATE_FOR_WRITE = 1, - OPEN_FOR_APPEND = 2, - }; - HDFSFile(boost::shared_ptr hdfs, const std::string& path, AccessPolicy ap, - int bufferSize = 0, short replication = 0, int32_t blocksize = 0); - bool close(); - void* getHandle() const { - return file_; - } - boost::shared_ptr getFS() const { - return hdfs_; - } - bool isOpen() const { - return file_ != NULL; - } - ~HDFSFile(); - protected: - boost::shared_ptr hdfs_; - void* file_; -}; - -#endif diff --git a/thrift/lib/cpp/transport/TBufferTransports.h b/thrift/lib/cpp/transport/TBufferTransports.h deleted file mode 100644 index 0825a18cc2..0000000000 --- a/thrift/lib/cpp/transport/TBufferTransports.h +++ /dev/null @@ -1,973 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_TBUFFERTRANSPORTS_H_ -#define THRIFT_TRANSPORT_TBUFFERTRANSPORTS_H_ 1 - -#include -#include "boost/scoped_array.hpp" -#include "folly/Likely.h" - -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" - -namespace apache { namespace thrift { namespace transport { - - -/** - * Base class for all transports that use read/write buffers for performance. - * - * TBufferBase is designed to implement the fast-path "memcpy" style - * operations that work in the common case. It does so with small and - * (eventually) nonvirtual, inlinable methods. TBufferBase is an abstract - * class. Subclasses are expected to define the "slow path" operations - * that have to be done when the buffers are full or empty. - * - */ -class TBufferBase : public TVirtualTransport { - - public: - - /** - * Fast-path read. - * - * When we have enough data buffered to fulfill the read, we can satisfy it - * with a single memcpy, then adjust our internal pointers. If the buffer - * is empty, we call out to our slow path, implemented by a subclass. - * This method is meant to eventually be nonvirtual and inlinable. - */ - uint32_t read(uint8_t* buf, uint32_t len) { - uint8_t* new_rBase = rBase_ + len; - if (LIKELY(new_rBase <= rBound_)) { - std::memcpy(buf, rBase_, len); - rBase_ = new_rBase; - return len; - } - return readSlow(buf, len); - } - - /** - * Shortcutted version of readAll. - */ - uint32_t readAll(uint8_t* buf, uint32_t len) { - uint8_t* new_rBase = rBase_ + len; - if (LIKELY(new_rBase <= rBound_)) { - std::memcpy(buf, rBase_, len); - rBase_ = new_rBase; - return len; - } - return apache::thrift::transport::readAll(*this, buf, len); - } - - /** - * Fast-path write. - * - * When we have enough empty space in our buffer to accommodate the write, we - * can satisfy it with a single memcpy, then adjust our internal pointers. - * If the buffer is full, we call out to our slow path, implemented by a - * subclass. This method is meant to eventually be nonvirtual and - * inlinable. - */ - void write(const uint8_t* buf, uint32_t len) { - uint8_t* new_wBase = wBase_ + len; - if (LIKELY(new_wBase <= wBound_)) { - std::memcpy(wBase_, buf, len); - wBase_ = new_wBase; - return; - } - writeSlow(buf, len); - } - - /** - * Fast-path borrow. A lot like the fast-path read. - */ - const uint8_t* borrow(uint8_t* buf, uint32_t* len) { - if (LIKELY(static_cast(*len) <= rBound_ - rBase_)) { - // With strict aliasing, writing to len shouldn't force us to - // refetch rBase_ from memory. TODO(dreiss): Verify this. - *len = rBound_ - rBase_; - return rBase_; - } - return borrowSlow(buf, len); - } - - /** - * Consume doesn't require a slow path. - * When the read ptr catches up with write ptr, invokes consumeEnd(). - */ - void consume(uint32_t len) { - if (LIKELY(static_cast(len) <= rBound_ - rBase_)) { - rBase_ += len; - if (rBase_ == wBase_) { - // This is required for TMemoryBuffer. - consumeEnd(); - } - } else { - throw TTransportException(TTransportException::BAD_ARGS, - "consume did not follow a borrow."); - } - } - - - protected: - - /// Slow path read. - virtual uint32_t readSlow(uint8_t* buf, uint32_t len) = 0; - - /// Slow path write. - virtual void writeSlow(const uint8_t* buf, uint32_t len) = 0; - - /// consumeEnd, invoked when all data has been consumed. - virtual void consumeEnd() { } - /** - * Slow path borrow. - * - * POSTCONDITION: return == NULL || rBound_ - rBase_ >= *len - */ - virtual const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len) = 0; - - /** - * Trivial constructor. - * - * Initialize pointers safely. Constructing is not a very - * performance-sensitive operation, so it is okay to just leave it to - * the concrete class to set up pointers correctly. - */ - TBufferBase() - : rBase_(NULL) - , rBound_(NULL) - , wBase_(NULL) - , wBound_(NULL) - {} - - /// Convenience mutator for setting the read buffer. - void setReadBuffer(uint8_t* buf, uint32_t len) { - rBase_ = buf; - rBound_ = buf+len; - } - - /// Convenience mutator for setting the write buffer. - void setWriteBuffer(uint8_t* buf, uint32_t len) { - wBase_ = buf; - wBound_ = buf+len; - } - - virtual ~TBufferBase() {} - - /// Reads begin here. - uint8_t* rBase_; - /// Reads may extend to just before here. - uint8_t* rBound_; - - /// Writes begin here. - uint8_t* wBase_; - /// Writes may extend to just before here. - uint8_t* wBound_; -}; - - -/** - * Buffered transport. For reads it will read more data than is requested - * and will serve future data out of a local buffer. For writes, data is - * stored to an in memory buffer before being written out. - * - */ -class TBufferedTransport - : public TVirtualTransport { - public: - - static const int DEFAULT_BUFFER_SIZE = 512; - - /// Use default buffer sizes. - explicit TBufferedTransport(boost::shared_ptr transport) - : transport_(transport) - , rBufSize_(DEFAULT_BUFFER_SIZE) - , wBufSize_(DEFAULT_BUFFER_SIZE) - , wBufResetSize_(0) - , wBufResetEveryN_(0) - , wBufResetCount_(0) - , rBuf_(new uint8_t[rBufSize_]) - , wBuf_(new uint8_t[wBufSize_]) - { - initPointers(); - } - - /// Use specified buffer sizes. - TBufferedTransport(boost::shared_ptr transport, uint32_t sz) - : transport_(transport) - , rBufSize_(sz) - , wBufSize_(sz) - , wBufResetSize_(0) - , wBufResetEveryN_(0) - , wBufResetCount_(0) - , rBuf_(new uint8_t[rBufSize_]) - , wBuf_(new uint8_t[wBufSize_]) - { - initPointers(); - } - - /** - * Ctor with initial read and write buffer sizes and write buffer reset - * behaviour settings. - * - * @param transport Underlying transport. - * @param sz Initial buffer size. - * @param reset_sz Buffer size after a reset. See also reset_every_n. - * @param reset_every_n Reset the buffer after every N calls to flush(). - * If set to zero (default), no reset is done. - */ - TBufferedTransport(boost::shared_ptr transport, uint32_t rsz, - uint32_t wsz, uint32_t reset_sz = 0, - uint32_t reset_every_n = 0) - : transport_(transport) - , rBufSize_(rsz) - , wBufSize_(wsz) - , wBufResetSize_(reset_sz) - , wBufResetEveryN_(reset_every_n) - , wBufResetCount_(0) - , rBuf_(new uint8_t[rBufSize_]) - , wBuf_(new uint8_t[wBufSize_]) - { - initPointers(); - } - - // Tries to put some data back in the beginning of the read buffer. - void putBack(uint8_t* buf, uint32_t len); - - void open() { - transport_->open(); - } - - bool isOpen() { - return transport_->isOpen(); - } - - bool peek() { - if (rBase_ == rBound_) { - setReadBuffer(rBuf_.get(), transport_->read(rBuf_.get(), rBufSize_)); - } - return (rBound_ > rBase_); - } - - void close() { - flush(); - transport_->close(); - } - - virtual uint32_t readSlow(uint8_t* buf, uint32_t len); - - virtual void writeSlow(const uint8_t* buf, uint32_t len); - - void flush(); - - - /** - * The following behavior is currently implemented by TBufferedTransport, - * but that may change in a future version: - * 1/ If len is at most rBufSize_, borrow will never return NULL. - * Depending on the underlying transport, it could throw an exception - * or hang forever. - * 2/ Some borrow requests may copy bytes internally. However, - * if len is at most rBufSize_/2, none of the copied bytes - * will ever have to be copied again. For optimal performance, - * stay under this limit. - */ - virtual const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len); - - boost::shared_ptr getUnderlyingTransport() { - return transport_; - } - - /* - * TVirtualTransport provides a default implementation of readAll(). - * We want to use the TBufferBase version instead. - */ - using TBufferBase::readAll; - - protected: - void initPointers() { - setReadBuffer(rBuf_.get(), 0); - setWriteBuffer(wBuf_.get(), wBufSize_); - // Write size never changes. - } - - boost::shared_ptr transport_; - - uint32_t rBufSize_; - uint32_t wBufSize_; - uint32_t wBufResetSize_; - uint32_t wBufResetEveryN_; - uint32_t wBufResetCount_; - boost::scoped_array rBuf_; - boost::scoped_array wBuf_; -}; - - -/** - * Wraps a transport into a buffered one. - * - */ -class TBufferedTransportFactory : public TTransportFactory { - public: - TBufferedTransportFactory() {} - - virtual ~TBufferedTransportFactory() {} - - /** - * Wraps the transport into a buffered one. - */ - virtual boost::shared_ptr getTransport(boost::shared_ptr trans) { - return boost::shared_ptr(new TBufferedTransport(trans)); - } - -}; - - -/** - * Framed transport. All writes go into an in-memory buffer until flush is - * called, at which point the transport writes the length of the entire - * binary chunk followed by the data payload. This allows the receiver on the - * other end to always do fixed-length reads. - * - */ -class TFramedTransport - : public TVirtualTransport { - - public: - - static const int DEFAULT_BUFFER_SIZE = 512; - - - /// Use default buffer sizes. - explicit TFramedTransport(boost::shared_ptr transport) - : transport_(transport) - , rBufSize_(0) - , wBufSize_(DEFAULT_BUFFER_SIZE) - , wBufResetSize_(0) - , wBufResetEveryN_(0) - , wBufResetCount_(0) - , rBuf_() - , wBuf_(new uint8_t[wBufSize_]) - { - initPointers(); - } - - /** - * Ctor with initial buffer size and write buffer reset behaviour settings. - * - * @param transport Underlying transport. - * @param sz Initial buffer size. - * @param reset_sz Buffer size after a reset. See also reset_every_n. - * @param reset_every_n Reset the buffer after every N calls to flush(). - * If set to zero (default), no reset is done. - */ - TFramedTransport(boost::shared_ptr transport, uint32_t sz, - uint32_t reset_sz = 0, uint32_t reset_every_n = 0) - : transport_(transport) - , rBufSize_(0) - , wBufSize_(sz) - , wBufResetSize_(reset_sz) - , wBufResetEveryN_(reset_every_n) - , wBufResetCount_(0) - , rBuf_() - , wBuf_(new uint8_t[wBufSize_]) - { - assert(wBufResetSize_ == 0 || wBufSize_ <= wBufResetSize_); - initPointers(); - } - - void open() { - transport_->open(); - } - - bool isOpen() { - return transport_->isOpen(); - } - - bool peek() { - return (rBase_ < rBound_) || transport_->peek(); - } - - void close() { - flush(); - transport_->close(); - } - - virtual uint32_t readSlow(uint8_t* buf, uint32_t len); - - virtual void writeSlow(const uint8_t* buf, uint32_t len); - - virtual void flush(); - - uint32_t readEnd(); - - uint32_t writeEnd(); - - const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len); - - boost::shared_ptr getUnderlyingTransport() { - return transport_; - } - - /* - * TVirtualTransport provides a default implementation of readAll(). - * We want to use the TBufferBase version instead. - */ - using TBufferBase::readAll; - - protected: - /// Constructor for subclassing. - TFramedTransport() - : rBufSize_(0) - , wBufSize_(DEFAULT_BUFFER_SIZE) - , wBufResetSize_(0) - , wBufResetEveryN_(0) - , wBufResetCount_(0) - , rBuf_() - , wBuf_(new uint8_t[wBufSize_]) - { - initPointers(); - } - - /** - * Reads a frame of input from the underlying stream. - * - * Returns true if a frame was read successfully, or false on EOF. - * (Raises a TTransportException if EOF occurs after a partial frame.) - * - * @param req_sz The size of the requested data. readFrame may read more - * than this amount, but should not read less. - */ - virtual bool readFrame(uint32_t min_frame_sz); - - void initPointers() { - setReadBuffer(NULL, 0); - setWriteBuffer(wBuf_.get(), wBufSize_); - - // Pad the buffer so we can insert the size later. - int32_t pad = 0; - this->write((uint8_t*)&pad, sizeof(pad)); - } - - boost::shared_ptr transport_; - - uint32_t rBufSize_; - uint32_t wBufSize_; - uint32_t wBufResetSize_; - uint32_t wBufResetEveryN_; - uint32_t wBufResetCount_; - boost::scoped_array rBuf_; - boost::scoped_array wBuf_; -}; - -/** - * Wraps a transport into a framed one. - * - */ -class TFramedTransportFactory : public TTransportFactory { - public: - TFramedTransportFactory() {} - - virtual ~TFramedTransportFactory() {} - - /** - * Wraps the transport into a framed one. - */ - virtual boost::shared_ptr getTransport(boost::shared_ptr trans) { - return boost::shared_ptr(new TFramedTransport(trans)); - } - -}; - - -/** - * A memory buffer is a transport that simply reads from and writes to an - * in memory buffer. Anytime you call write on it, the data is simply placed - * into a buffer, and anytime you call read, data is read from that buffer. - * - * The buffers are allocated using C constructs malloc,realloc, and the size - * doubles as necessary. We've considered using scoped - * - */ -class TMemoryBuffer : public TVirtualTransport { - private: - - TMemoryBuffer(const TMemoryBuffer&); - TMemoryBuffer &operator=(const TMemoryBuffer&); - - // Common initialization done by all constructors. - void initCommon(uint8_t* buf, uint32_t size, bool owner, uint32_t wPos) { - if (buf == NULL && size != 0) { - assert(owner); - buf = (uint8_t*)std::malloc(size); - if (buf == NULL) { - throw std::bad_alloc(); - } - } - - buffer_ = buf; - bufferSize_ = size; - - rBase_ = buffer_; - rBound_ = buffer_ + wPos; - // TODO(dreiss): Investigate NULL-ing this if !owner. - wBase_ = buffer_ + wPos; - wBound_ = buffer_ + bufferSize_; - - owner_ = owner; - - linkedBuffer_ = NULL; - observerCount_ = 0; - // rBound_ is really an artifact. In principle, it should always be - // equal to wBase_. We update it in a few places (computeRead, etc.). - } - - public: - static const uint32_t defaultSize = 1024; - - /** - * This enum specifies how a TMemoryBuffer should treat - * memory passed to it via constructors or resetBuffer. - * - * OBSERVE: - * TMemoryBuffer will simply store a pointer to the memory. - * It is the callers responsibility to ensure that the pointer - * remains valid for the lifetime of the TMemoryBuffer, - * and that it is properly cleaned up. - * Note that no data can be written to observed buffers. - * - * COPY: - * TMemoryBuffer will make an internal copy of the buffer. - * The caller has no responsibilities. - * - * TAKE_OWNERSHIP: - * TMemoryBuffer will become the "owner" of the buffer, - * and will be responsible for freeing it. - * The memory must have been allocated with malloc. - */ - enum MemoryPolicy - { OBSERVE = 1 - , COPY = 2 - , TAKE_OWNERSHIP = 3 - }; - - /** - * Construct a TMemoryBuffer with a default-sized buffer, - * owned by the TMemoryBuffer object. - */ - TMemoryBuffer() { - initCommon(NULL, defaultSize, true, 0); - } - - /** - * Construct a TMemoryBuffer with a buffer of a specified size, - * owned by the TMemoryBuffer object. - * - * @param sz The initial size of the buffer. - */ - explicit TMemoryBuffer(uint32_t sz) { - initCommon(NULL, sz, true, 0); - } - - /** - * Construct a TMemoryBuffer with buf as its initial contents. - * - * @param buf The initial contents of the buffer. - * Note that, while buf is a non-const pointer, - * TMemoryBuffer will not write to it if policy == OBSERVE, - * so it is safe to const_cast(whatever). - * @param sz The size of @c buf. - * @param policy See @link MemoryPolicy @endlink . - */ - TMemoryBuffer(uint8_t* buf, uint32_t sz, MemoryPolicy policy = OBSERVE) { - if (buf == NULL && sz != 0) { - throw TTransportException(TTransportException::BAD_ARGS, - "TMemoryBuffer given null buffer with non-zero size."); - } - - switch (policy) { - case OBSERVE: - case TAKE_OWNERSHIP: - initCommon(buf, sz, policy == TAKE_OWNERSHIP, sz); - break; - case COPY: - initCommon(NULL, sz, true, 0); - this->write(buf, sz); - break; - default: - throw TTransportException(TTransportException::BAD_ARGS, - "Invalid MemoryPolicy for TMemoryBuffer"); - } - } - - explicit TMemoryBuffer(TMemoryBuffer *buffer) { - initCommon(buffer->rBase_, buffer->available_read(), false, - buffer->available_read()); - // Have to set buffer_ appropriately so this buffer can take ownership - // later if necessary. initCommon sets all other state correctly. - buffer_ = buffer->buffer_; - linkedBuffer_ = buffer; - linkedBuffer_->observe(this); - } - - ~TMemoryBuffer() { - cleanup(); - } - - // Set this buffer to observe the next length bytes of buffer. - void link(TMemoryBuffer *buffer, uint32_t length) { - assert(length <= buffer->available_read()); - cleanup(); - initCommon(buffer->rBase_, length, false, length); - buffer_ = buffer->buffer_; - linkedBuffer_ = buffer; - linkedBuffer_->observe(this); - } - - bool isOpen() { - return true; - } - - bool peek() { - return (rBase_ < wBase_); - } - - void open() {} - - void close() {} - - uint32_t getBufferSize() const { return bufferSize_; } - - // TODO(dreiss): Make bufPtr const. - void getBuffer(uint8_t** bufPtr, uint32_t* sz) { - *bufPtr = rBase_; - *sz = wBase_ - rBase_; - } - - std::string getBufferAsString() { - if (buffer_ == NULL) { - return ""; - } - uint8_t* buf; - uint32_t sz; - getBuffer(&buf, &sz); - return std::string((char*)buf, (std::string::size_type)sz); - } - - void appendBufferToString(std::string& str) { - if (buffer_ == NULL) { - return; - } - uint8_t* buf; - uint32_t sz; - getBuffer(&buf, &sz); - str.append((char*)buf, sz); - } - - void resetBuffer() { - rBase_ = buffer_; - rBound_ = buffer_; - wBase_ = buffer_; - // It isn't safe to write into a buffer we don't own. - if (!owner_) { - wBound_ = wBase_; - bufferSize_ = 0; - } - } - - // Register an observer of the memory in this buffer. - // - // A TMemoryBuffer with one or more observers has special handling - // for operations that would invalidate the data being observed. If - // an operation would invalidate the buffer pointer (eg: realloc, free), - // ownership of that buffer is first transferred to one of the observing - // TMemoryBuffers. - // - // Calls that reset an apparently empty buffer are delayed until all - // observers are detached. - void observe(TMemoryBuffer *observer) { - if (observer != NULL) { - observers_.push_back(observer); - } - observerCount_++; - } - - // Remove an observer of the memory in this buffer. If there is a pending - // consumeEnd call, process it - void unobserve(TMemoryBuffer *observer) { - if (UNLIKELY(observerCount_ == 0)) { - throw TTransportException("Tried to unobserve a buffer with no " - "observers"); - } - bool found = false; - if (observer != NULL) { - for(TMemoryBufferContainer::iterator it = observers_.begin(); - it != observers_.end(); ++it) { - if (*it == observer) { - observers_.erase(it); - found = true; - break; - } - } - } - if (!found) { - throw TTransportException("Tried to remove an observer that was not " - "observing the buffer"); - } - observerCount_--; - if (observerCount_ == 0 && rBase_ == wBase_) { - consumeEnd(); - } - } - - // Remove link to an observed memory buffer. If the buffer is not linked - // this is a no-op. - void unlink() { - if (linkedBuffer_ != NULL) { - linkedBuffer_->unobserve(this); - linkedBuffer_ = NULL; - } - } - - /// See constructor documentation. - void resetBuffer(uint8_t* buf, uint32_t sz, MemoryPolicy policy = OBSERVE) { - // Use a variant of the copy-and-swap trick for assignment operators. - // This is sub-optimal in terms of performance for two reasons: - // 1/ The constructing and swapping of the (small) values - // in the temporary object takes some time, and is not necessary. - // 2/ If policy == COPY, we allocate the new buffer before - // freeing the old one, precluding the possibility of - // reusing that memory. - // I doubt that either of these problems could be optimized away, - // but the second is probably no a common case, and the first is minor. - // I don't expect resetBuffer to be a common operation, so I'm willing to - // bite the performance bullet to make the method this simple. - - // Construct the new buffer. - TMemoryBuffer new_buffer(buf, sz, policy); - // Move it into ourself. - this->swap(new_buffer); - // Our old self gets destroyed. - } - - /// See constructor documentation. - void resetBuffer(uint32_t sz) { - // Construct the new buffer. - TMemoryBuffer new_buffer(sz); - // Move it into ourself. - this->swap(new_buffer); - // Our old self gets destroyed. - } - - std::string readAsString(uint32_t len) { - std::string str; - (void)readAppendToString(str, len); - return str; - } - - uint32_t readAppendToString(std::string& str, uint32_t len); - - // return number of bytes read - uint32_t readEnd() { - uint32_t bytes = rBase_ - buffer_; - if (rBase_ == wBase_) { - resetBuffer(); - } - return bytes; - } - - // Return number of bytes written - uint32_t writeEnd() { - return wBase_ - buffer_; - } - - uint32_t available_read() const { - // Remember, wBase_ is the real rBound_. - return wBase_ - rBase_; - } - - uint32_t available_write() const { - return wBound_ - wBase_; - } - - // Returns a pointer to where the client can write data to append to - // the TMemoryBuffer, and ensures the buffer is big enough to accommodate a - // write of the provided length. The returned pointer is very convenient for - // passing to read(), recv(), or similar. You must call wroteBytes() as soon - // as data is written or the buffer will not be aware that data has changed. - uint8_t* getWritePtr(uint32_t len) { - ensureCanWrite(len); - return wBase_; - } - - // Informs the buffer that the client has written 'len' bytes into storage - // that had been provided by getWritePtr(). - void wroteBytes(uint32_t len); - - /* - * TVirtualTransport provides a default implementation of readAll(). - * We want to use the TBufferBase version instead. - */ - using TBufferBase::readAll; - - /** - * Extract the read buffer from the TMemoryBuffer, or make a copy if this - * buffer does not own it. It's not safe to assume that a buffer created - * with TAKE_OWNERSHIP or COPY is still the owner of it's underlying buffer, - * because some TMemoryBuffer APIs (resetBuffer, link) change the ownership. - * Because of that, it's more consistent to make a copy rather than throw. - * - * The TMemoryBuffer's internal buffer is returned, and the caller is - * given ownership of the buffer. The caller is responsible for eventually - * freeing the buffer using free(). - * - * The TMemoryBuffer itself will be reset and will allocate a new buffer the - * next time data is written into it. - * - * @param buf The returned buffer pointer is stored at the location - * specified by this argument. - * @param buflen This parameter is used to return the number of bytes of - * readable data available at the start of the returned buffer. - * (Note that this is the amount of available data, not the - * buffer capacity.) - */ - void extractReadBuffer(uint8_t** buf, uint32_t* buflen) { - *buflen = available_read(); - if (owner_) { - if (rBase_ != buffer_) { - memmove(buffer_, rBase_, *buflen); - } - *buf = buffer_; - } else { - *buf = (uint8_t *)malloc(*buflen); - if (*buf == NULL) { - throw std::bad_alloc(); - } - memcpy(*buf, rBase_, *buflen); - cleanup(); - } - initCommon(NULL, 0, true, 0); - } - - protected: - void swap(TMemoryBuffer& that) { - using std::swap; - swap(buffer_, that.buffer_); - swap(bufferSize_, that.bufferSize_); - - swap(rBase_, that.rBase_); - swap(rBound_, that.rBound_); - swap(wBase_, that.wBase_); - swap(wBound_, that.wBound_); - - swap(owner_, that.owner_); - swap(linkedBuffer_, that.linkedBuffer_); - swap(observerCount_, that.observerCount_); - observers_.swap(that.observers_); - for (auto buf: observers_) { - buf->linkedBuffer_ = this; - } - for (auto buf: that.observers_) { - buf->linkedBuffer_ = &that; - } - if (linkedBuffer_ != NULL) { - linkedBuffer_->unobserve(&that); - linkedBuffer_->observe(this); - } - if (that.linkedBuffer_ != NULL) { - that.linkedBuffer_->unobserve(this); - that.linkedBuffer_->observe(&that); - } - } - - void transferOwnership() { - TMemoryBuffer *newOwner = NULL; - assert(!observers_.empty()); - // The optimal case is to make the new owner the TMemoryBuffer - // with the longest life-span. Use FIFO as a hueristic and assign - // the new owner to the last registered observer. - newOwner = observers_.back(); - observers_.pop_back(); - newOwner->owner_ = true; - newOwner->linkedBuffer_ = NULL; - for (TMemoryBufferContainer::iterator it = observers_.begin(); - it != observers_.end(); ++it) { - (*it)->linkedBuffer_ = newOwner; - // It's possible that an observer has other observers - newOwner->observers_.push_back(*it); - newOwner->observerCount_++; - } - observers_.clear(); - observerCount_ = 0; - } - - void cleanup() { - if (owner_) { - if (observerCount_ > 0) { - transferOwnership(); - } else { - std::free(buffer_); - } - } - if (linkedBuffer_ != NULL) { - linkedBuffer_->unobserve(this); - } - } - - void consumeEnd() { - if (observerCount_ == 0) { - resetBuffer(); - } - } - - // Make sure there's at least 'len' bytes available for writing. - void ensureCanWrite(uint32_t len); - - // Compute the position and available data for reading. - void computeRead(uint32_t len, uint8_t** out_start, uint32_t* out_give); - - uint32_t readSlow(uint8_t* buf, uint32_t len); - - void writeSlow(const uint8_t* buf, uint32_t len); - - const uint8_t* borrowSlow(uint8_t* buf, uint32_t* len); - - // Data buffer - uint8_t* buffer_; - - // Allocated buffer size - uint32_t bufferSize_; - - // Is this object the owner of the buffer? - bool owner_; - - TMemoryBuffer *linkedBuffer_; - uint32_t observerCount_; - // The container is a vector (rather than a list) for performance - // reasons despite the O(N) penalty in unobserve. The vec keeps the - // overhead lower in the common case, which is a single observer. - typedef std::vector TMemoryBufferContainer; - TMemoryBufferContainer observers_; - // Don't forget to update constrctors, initCommon, and swap if - // you add new members. -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_TBUFFERTRANSPORTS_H_ diff --git a/thrift/lib/cpp/transport/TFDTransport.h b/thrift/lib/cpp/transport/TFDTransport.h deleted file mode 100644 index 1d1a3e6842..0000000000 --- a/thrift/lib/cpp/transport/TFDTransport.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TFDTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TFDTRANSPORT_H_ 1 - -#include -#include - -#include "TTransport.h" -#include "TVirtualTransport.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * Dead-simple wrapper around a file descriptor. - * - */ -class TFDTransport : public TVirtualTransport { - public: - enum ClosePolicy - { NO_CLOSE_ON_DESTROY = 0 - , CLOSE_ON_DESTROY = 1 - }; - - TFDTransport(int fd, ClosePolicy close_policy = NO_CLOSE_ON_DESTROY) - : fd_(fd) - , close_policy_(close_policy) - {} - - ~TFDTransport() { - if (close_policy_ == CLOSE_ON_DESTROY) { - close(); - } - } - - bool isOpen() { return fd_ >= 0; } - - void open() {} - - void close(); - - uint32_t read(uint8_t* buf, uint32_t len); - - void write(const uint8_t* buf, uint32_t len); - - void setFD(int fd) { fd_ = fd; } - int getFD() { return fd_; } - - protected: - int fd_; - ClosePolicy close_policy_; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TFDTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TFileTransport.h b/thrift/lib/cpp/transport/TFileTransport.h deleted file mode 100644 index 381e7dc20d..0000000000 --- a/thrift/lib/cpp/transport/TFileTransport.h +++ /dev/null @@ -1,462 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TFILETRANSPORT_H_ -#define _THRIFT_TRANSPORT_TFILETRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/Thrift.h" -#include "thrift/lib/cpp/TProcessor.h" - -#include -#include - -#include -#include -#include - -namespace apache { namespace thrift { namespace transport { - -using apache::thrift::TProcessor; -using apache::thrift::protocol::TProtocolFactory; - -// Data pertaining to a single event -typedef struct eventInfo { - uint8_t* eventBuff_; - uint32_t eventSize_; - uint32_t eventBuffPos_; - - eventInfo():eventBuff_(NULL), eventSize_(0), eventBuffPos_(0){}; - ~eventInfo() { - if (eventBuff_) { - delete[] eventBuff_; - } - } -} eventInfo; - -// information about current read state -typedef struct readState { - eventInfo* event_; - - // keep track of event size - uint8_t eventSizeBuff_[4]; - uint8_t eventSizeBuffPos_; - bool readingSize_; - - // read buffer variables - int32_t bufferPtr_; - int32_t bufferLen_; - - // last successful dispatch point - int32_t lastDispatchPtr_; - - void resetState(uint32_t lastDispatchPtr) { - readingSize_ = true; - eventSizeBuffPos_ = 0; - lastDispatchPtr_ = lastDispatchPtr; - } - - void resetAllValues() { - resetState(0); - bufferPtr_ = 0; - bufferLen_ = 0; - if (event_) { - delete(event_); - } - event_ = 0; - } - - readState() { - event_ = 0; - resetAllValues(); - } - - ~readState() { - if (event_) { - delete(event_); - } - } - -} readState; - -/** - * TFileTransportBuffer - buffer class used by TFileTransport for queuing up events - * to be written to disk. Should be used in the following way: - * 1) Buffer created - * 2) Buffer written to (addEvent) - * 3) Buffer read from (getNext) - * 4) Buffer reset (reset) - * 5) Go back to 2, or destroy buffer - * - * The buffer should never be written to after it is read from, unless it is reset first. - * Note: The above rules are enforced mainly for debugging its sole client TFileTransport - * which uses the buffer in this way. - * - */ -class TFileTransportBuffer { - public: - TFileTransportBuffer(uint32_t size); - ~TFileTransportBuffer(); - - bool addEvent(eventInfo *event); - eventInfo* getNext(); - void reset(); - bool isFull(); - bool isEmpty(); - - private: - TFileTransportBuffer(); // should not be used - - enum mode { - WRITE, - READ - }; - mode bufferMode_; - - uint32_t writePoint_; - uint32_t readPoint_; - uint32_t size_; - eventInfo** buffer_; -}; - -/** - * Abstract interface for transports used to read files - */ -class TFileReaderTransport : virtual public TTransport { - public: - virtual int32_t getReadTimeout() = 0; - virtual void setReadTimeout(int32_t readTimeout) = 0; - - virtual uint32_t getNumChunks() = 0; - virtual uint32_t getCurChunk() = 0; - virtual void seekToChunk(int32_t chunk) = 0; - virtual void seekToEnd() = 0; -}; - -/** - * Abstract interface for transports used to write files - */ -class TFileWriterTransport : virtual public TTransport { - public: - virtual uint32_t getChunkSize() = 0; - virtual void setChunkSize(uint32_t chunkSize) = 0; -}; - -/** - * File implementation of a transport. Reads and writes are done to a - * file on disk. - * - */ -class TFileTransport : public TFileReaderTransport, - public TFileWriterTransport { - public: - TFileTransport(std::string path, bool readOnly=false); - ~TFileTransport(); - - // TODO: what is the correct behavior for this? - // the log file is generally always open - bool isOpen() { - return true; - } - - void write(const uint8_t* buf, uint32_t len); - void flush(); - - uint32_t readAll(uint8_t* buf, uint32_t len); - bool peek(); - uint32_t read(uint8_t* buf, uint32_t len); - - // log-file specific functions - void seekToChunk(int32_t chunk); - void seekToEnd(); - uint32_t getNumChunks(); - uint32_t getCurChunk(); - - // for changing the output file - void resetOutputFile(int fd, std::string filename, int64_t offset); - - // Setter/Getter functions for user-controllable options - void setReadBuffSize(uint32_t readBuffSize) { - if (readBuffSize) { - readBuffSize_ = readBuffSize; - } - } - uint32_t getReadBuffSize() { - return readBuffSize_; - } - - static const int32_t TAIL_READ_TIMEOUT = -1; - static const int32_t NO_TAIL_READ_TIMEOUT = 0; - void setReadTimeout(int32_t readTimeout) { - readTimeout_ = readTimeout; - } - int32_t getReadTimeout() { - return readTimeout_; - } - - void setChunkSize(uint32_t chunkSize) { - if (chunkSize) { - chunkSize_ = chunkSize; - } - } - uint32_t getChunkSize() { - return chunkSize_; - } - - void setEventBufferSize(uint32_t bufferSize) { - if (bufferAndThreadInitialized_) { - GlobalOutput("Cannot change the buffer size after writer thread started"); - return; - } - eventBufferSize_ = bufferSize; - } - - uint32_t getEventBufferSize() { - return eventBufferSize_; - } - - void setFlushMaxUs(uint32_t flushMaxUs) { - if (flushMaxUs) { - flushMaxUs_ = flushMaxUs; - } - } - uint32_t getFlushMaxUs() { - return flushMaxUs_; - } - - void setFlushMaxBytes(uint32_t flushMaxBytes) { - if (flushMaxBytes) { - flushMaxBytes_ = flushMaxBytes; - } - } - uint32_t getFlushMaxBytes() { - return flushMaxBytes_; - } - - void setMaxEventSize(uint32_t maxEventSize) { - maxEventSize_ = maxEventSize; - } - uint32_t getMaxEventSize() { - return maxEventSize_; - } - - void setMaxCorruptedEvents(uint32_t maxCorruptedEvents) { - maxCorruptedEvents_ = maxCorruptedEvents; - } - uint32_t getMaxCorruptedEvents() { - return maxCorruptedEvents_; - } - - void setEofSleepTimeUs(uint32_t eofSleepTime) { - if (eofSleepTime) { - eofSleepTime_ = eofSleepTime; - } - } - uint32_t getEofSleepTimeUs() { - return eofSleepTime_; - } - - /* - * Override TTransport *_virt() functions to invoke our implementations. - * We cannot use TVirtualTransport to provide these, since we need to inherit - * virtually from TTransport. - */ - virtual uint32_t read_virt(uint8_t* buf, uint32_t len) { - return this->read(buf, len); - } - virtual uint32_t readAll_virt(uint8_t* buf, uint32_t len) { - return this->readAll(buf, len); - } - virtual void write_virt(const uint8_t* buf, uint32_t len) { - this->write(buf, len); - } - - private: - // helper functions for writing to a file - void enqueueEvent(const uint8_t* buf, uint32_t eventLen); - bool swapEventBuffers(struct timespec* deadline); - bool initBufferAndWriteThread(); - - // control for writer thread - static void* startWriterThread(void* ptr) { - (((TFileTransport*)ptr)->writerThread()); - return 0; - } - void writerThread(); - - // helper functions for reading from a file - eventInfo* readEvent(); - - // event corruption-related functions - bool isEventCorrupted(); - void performRecovery(); - - // Utility functions - void openLogFile(); - void getNextFlushTime(struct timespec* ts_next_flush); - - // Class variables - readState readState_; - uint8_t* readBuff_; - eventInfo* currentEvent_; - - uint32_t readBuffSize_; - static const uint32_t DEFAULT_READ_BUFF_SIZE = 1 * 1024 * 1024; - - int32_t readTimeout_; - static const int32_t DEFAULT_READ_TIMEOUT_MS = 200; - - // size of chunks that file will be split up into - uint32_t chunkSize_; - static const uint32_t DEFAULT_CHUNK_SIZE = 16 * 1024 * 1024; - - // size of event buffers - uint32_t eventBufferSize_; - static const uint32_t DEFAULT_EVENT_BUFFER_SIZE = 10000; - - // max number of microseconds that can pass without flushing - uint32_t flushMaxUs_; - static const uint32_t DEFAULT_FLUSH_MAX_US = 3000000; - - // max number of bytes that can be written without flushing - uint32_t flushMaxBytes_; - static const uint32_t DEFAULT_FLUSH_MAX_BYTES = 1000 * 1024; - - // max event size - uint32_t maxEventSize_; - static const uint32_t DEFAULT_MAX_EVENT_SIZE = 0; - - // max number of corrupted events per chunk - uint32_t maxCorruptedEvents_; - static const uint32_t DEFAULT_MAX_CORRUPTED_EVENTS = 0; - - // sleep duration when EOF is hit - uint32_t eofSleepTime_; - static const uint32_t DEFAULT_EOF_SLEEP_TIME_US = 500 * 1000; - - // sleep duration when a corrupted event is encountered - uint32_t corruptedEventSleepTime_; - static const uint32_t DEFAULT_CORRUPTED_SLEEP_TIME_US = 1 * 1000 * 1000; - - // sleep duration in seconds when an IO error is encountered in the writer thread - uint32_t writerThreadIOErrorSleepTime_; - static const uint32_t DEFAULT_WRITER_THREAD_SLEEP_TIME_US = 60 * 1000 * 1000; - - // writer thread id - pthread_t writerThreadId_; - - // buffers to hold data before it is flushed. Each element of the buffer stores a msg that - // needs to be written to the file. The buffers are swapped by the writer thread. - TFileTransportBuffer *dequeueBuffer_; - TFileTransportBuffer *enqueueBuffer_; - - // conditions used to block when the buffer is full or empty - pthread_cond_t notFull_, notEmpty_; - volatile bool closing_; - - // To keep track of whether the buffer has been flushed - pthread_cond_t flushed_; - bool forceFlush_; - - // Mutex that is grabbed when enqueuing and swapping the read/write buffers - pthread_mutex_t mutex_; - - // File information - std::string filename_; - int fd_; - - // Whether the writer thread and buffers have been initialized - bool bufferAndThreadInitialized_; - - // Offset within the file - off_t offset_; - - // event corruption information - uint32_t lastBadChunk_; - uint32_t numCorruptedEventsInChunk_; - - bool readOnly_; -}; - -// Exception thrown when EOF is hit -class TEOFException : public TTransportException { - public: - TEOFException(): - TTransportException(TTransportException::END_OF_FILE) {}; -}; - - -// wrapper class to process events from a file containing thrift events -class TFileProcessor { - public: - /** - * Constructor that defaults output transport to null transport - * - * @param processor processes log-file events - * @param protocolFactory protocol factory - * @param inputTransport file transport - */ - TFileProcessor(boost::shared_ptr processor, - boost::shared_ptr protocolFactory, - boost::shared_ptr inputTransport); - - TFileProcessor(boost::shared_ptr processor, - boost::shared_ptr inputProtocolFactory, - boost::shared_ptr outputProtocolFactory, - boost::shared_ptr inputTransport); - - /** - * Constructor - * - * @param processor processes log-file events - * @param protocolFactory protocol factory - * @param inputTransport input file transport - * @param output output transport - */ - TFileProcessor(boost::shared_ptr processor, - boost::shared_ptr protocolFactory, - boost::shared_ptr inputTransport, - boost::shared_ptr outputTransport); - - /** - * processes events from the file - * - * @param numEvents number of events to process (0 for unlimited) - * @param tail tails the file if true - */ - void process(uint32_t numEvents, bool tail); - - /** - * process events until the end of the chunk - * - */ - void processChunk(); - - private: - boost::shared_ptr processor_; - boost::shared_ptr inputProtocolFactory_; - boost::shared_ptr outputProtocolFactory_; - boost::shared_ptr inputTransport_; - boost::shared_ptr outputTransport_; -}; - - -}}} // apache::thrift::transport - -#endif // _THRIFT_TRANSPORT_TFILETRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/THDFSFileTransport.h b/thrift/lib/cpp/transport/THDFSFileTransport.h deleted file mode 100644 index 64414fa83a..0000000000 --- a/thrift/lib/cpp/transport/THDFSFileTransport.h +++ /dev/null @@ -1,52 +0,0 @@ -// Copyright (c) 2009- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TRANSPORT_THDFSFILETRANSPORT_H_ -#define _THRIFT_TRANSPORT_THDFSFILETRANSPORT_H_ - -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" -#include "HDFS.h" -#include - -#include -#include - -namespace apache { namespace thrift { namespace transport { -/** - * Dead-simple wrapper around libhdfs. - * THDFSFileTransport only takes care of read/write, - * and leaves allocation/release to HDFS and HDFSFile. - * @author Li Zhang - */ -class THDFSFileTransport : public TVirtualTransport { - public: - - THDFSFileTransport(boost::shared_ptr hdfsFile) : hdfsFile_(hdfsFile) { - } - - ~THDFSFileTransport() { - } - - bool isOpen() { - return hdfsFile_->isOpen(); - } - - void open(); - - void close(); - - uint32_t read(uint8_t* buf, uint32_t len); - - void write(const uint8_t* buf, uint32_t len); - - protected: - boost::shared_ptr hdfsFile_; -}; - -}}} // apache::thrift::transport - -#endif // _THRIFT_TRANSPORT_THDFSFILETRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/THeader.h b/thrift/lib/cpp/transport/THeader.h deleted file mode 100644 index 01524e5386..0000000000 --- a/thrift/lib/cpp/transport/THeader.h +++ /dev/null @@ -1,294 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_THEADER_H_ -#define THRIFT_TRANSPORT_THEADER_H_ 1 - -#include - -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" -#include "thrift/lib/cpp/protocol/TCompactProtocol.h" -#include "thrift/lib/cpp/protocol/TProtocolTypes.h" - -#include "folly/experimental/io/IOBuf.h" -#include "folly/experimental/io/IOBufQueue.h" - -#include -#include "boost/scoped_array.hpp" -#include -#include - -// Don't include the unknown client. -#define CLIENT_TYPES_LEN 5 - -enum CLIENT_TYPE { - THRIFT_HEADER_CLIENT_TYPE = 0, - THRIFT_FRAMED_DEPRECATED = 1, - THRIFT_UNFRAMED_DEPRECATED = 2, - THRIFT_HTTP_CLIENT_TYPE = 3, - THRIFT_FRAMED_COMPACT = 4, - THRIFT_UNKNOWN_CLIENT_TYPE = 5, -}; - -namespace apache { namespace thrift { namespace transport { - -using apache::thrift::protocol::T_COMPACT_PROTOCOL; - -/** - * Class that will take an IOBuf and wrap it in some thrift headers. - * see thrift/doc/HeaderFormat.txt for details. - * - * Supports transforms: zlib snappy hmac - * Supports headers: http-style key/value per request and per connection - * other: Protocol Id and seq ID in header. - * - * Backwards compatible with TFramed format, and unframed format, assuming - * your server transport is compatible (some server types require 4-byte size - * at the start, such as TNonblockingServer). - */ -class THeader { - public: - - virtual ~THeader() {} - - explicit THeader() - : queue_(new folly::IOBufQueue) - , protoId(T_COMPACT_PROTOCOL) - , clientType(THRIFT_HEADER_CLIENT_TYPE) - , seqId(0) - , flags(0) - , identity(s_identity) - { - initSupportedClients(NULL); - } - - explicit THeader(std::bitset const* clientTypes) - : queue_(new folly::IOBufQueue) - , protoId(T_COMPACT_PROTOCOL) - , clientType(THRIFT_HEADER_CLIENT_TYPE) - , seqId(0) - , flags(0) - , identity(s_identity) - { - initSupportedClients(clientTypes); - } - - uint16_t getProtocolId() const; - void setProtocolId(uint16_t protoId) { this->protoId = protoId; } - - virtual void resetProtocol(); - - /** - * We know we got a packet in header format here, try to parse the header - * - * @param IObuf of the header + data. Untransforms the data as appropriate. - * @return Just the data section in an IOBuf - */ - std::unique_ptr readHeaderFormat(std::unique_ptr); - - /** - * Untransform the data based on the received header flags - * On conclusion of function, setReadBuffer is called with the - * untransformed data. - * - * @param IOBuf input data section - * @return IOBuf output data section - */ - std::unique_ptr untransform(std::unique_ptr); - - /** - * Transform the data based on our write transform flags - * At conclusion of function the write buffer is set to the - * transformed data. - * - * @param IOBuf to transform. Returns transformed IOBuf (or chain) - * @return transformed data IOBuf - */ - std::unique_ptr transform(std::unique_ptr); - - uint16_t getNumTransforms() const { - int trans = writeTrans_.size(); - if (macCallback_) { - trans += 1; - } - return trans; - } - - void setTransform(uint16_t transId) { writeTrans_.push_back(transId); } - - // Info headers - typedef std::map StringToStringMap; - - // these work with write headers - void setHeader(const std::string& key, const std::string& value); - void setPersistentHeader(const std::string& key, const std::string& value); - void clearHeaders(); - /** - * this function only clears the local persistent - * header. does not affect the persistent header - * that already set - */ - void clearPersistentHeaders(); - - StringToStringMap& getWriteHeaders() { - return writeHeaders_; - } - - StringToStringMap& getPersistentWriteHeaders() { - return persisWriteHeaders_; - } - - // these work with read headers - const StringToStringMap& getHeaders() const { - return readHeaders_; - } - - std::string getPeerIdentity(); - void setIdentity(const std::string& identity); - - // accessors for seqId - int32_t getSequenceNumber() const { return seqId; } - void setSequenceNumber(int32_t seqId) { this->seqId = seqId; } - - enum TRANSFORMS { - ZLIB_TRANSFORM = 0x01, - HMAC_TRANSFORM = 0x02, - SNAPPY_TRANSFORM = 0x03, - }; - - /** - * Callbacks to get and verify a mac transform. - * - * If a mac callback is provided, it will be called with the outgoing packet, - * with the returned string appended at the end of the data. - * - * If a verify callback is provided, all incoming packets will be called with - * their mac data and packet data to verify. If false is returned, an - * exception is thrown. Packets without any mac also throw an exception if a - * verify function is provided. - * - * If no verify callback is provided, and an incoming packet contains a mac, - * the mac is ignored. - * - **/ - typedef std::tr1::function MacCallback; - typedef std::tr1::function< - bool(const std::string&, const std::string)> VerifyMacCallback; - - void setHmac(MacCallback macCb, VerifyMacCallback verifyCb) { - macCallback_ = macCb; - verifyCallback_ = verifyCb; - } - - /* IOBuf interface */ - - /** - * Adds the header based on the type of transport: - * unframed - does nothing. - * framed - prepends frame size - * header - prepends header, optionally appends mac - * http - only supported for sync case, prepends http header. - * - * @return IOBuf chain with header _and_ data. Data is not copied - */ - std::unique_ptr addHeader(std::unique_ptr); - /** - * Given an IOBuf Chain, remove the header. Supports unframed (sync - * only), framed, header, and http (sync case only). - * - * @param IOBufQueue - queue to try to read message from. - * - * @param needed - if the return is NULL (i.e. we didn't read a full - * message), needed is set to the number of bytes needed - * before you should call removeHeader again. - * - * @return IOBuf - the message chain. May be shared, may be chained. - * If NULL, we didn't get enough data for a whole message, - * call removeHeader again after reading needed more bytes. - */ - std::unique_ptr removeHeader(folly::IOBufQueue*, - size_t& needed); - - protected: - - std::bitset supported_clients; - - void initSupportedClients(std::bitset const*); - - std::unique_ptr queue_; - - // 0 and 16th bits must be 0 to differentiate from framed & unframed - static const uint32_t HEADER_MAGIC = 0x0FFF0000; - static const uint32_t HEADER_MASK = 0xFFFF0000; - static const uint32_t FLAGS_MASK = 0x0000FFFF; - static const uint32_t HTTP_MAGIC = 0x504F5354; // POST - - static const uint32_t MAX_FRAME_SIZE = 0x3FFFFFFF; - - int16_t protoId; - uint16_t clientType; - uint32_t seqId; - uint16_t flags; - std::string identity; - - std::vector readTrans_; - std::vector writeTrans_; - - // Map to use for headers - StringToStringMap readHeaders_; - StringToStringMap writeHeaders_; - - // Map to use for persistent headers - StringToStringMap persisReadHeaders_; - StringToStringMap persisWriteHeaders_; - - static const std::string IDENTITY_HEADER; - static const std::string ID_VERSION_HEADER; - static const std::string ID_VERSION; - - static std::string s_identity; - - MacCallback macCallback_; - VerifyMacCallback verifyCallback_; - - /** - * Returns the maximum number of bytes that write k/v headers can take - */ - size_t getMaxWriteHeadersSize() const; - - /** - * Returns whether the 1st byte of the protocol payload should be hadled - * as compact framed. - */ - bool compactFramed(uint32_t magic); - - struct infoIdType { - enum idType { - // start at 1 to avoid confusing header padding for an infoId - KEYVALUE = 1, - // for persistent header - PKEYVALUE = 2, - END // signal the end of infoIds we can handle - }; - }; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_THEADER_H_ diff --git a/thrift/lib/cpp/transport/THeaderTransport.h b/thrift/lib/cpp/transport/THeaderTransport.h deleted file mode 100644 index ddad1af00b..0000000000 --- a/thrift/lib/cpp/transport/THeaderTransport.h +++ /dev/null @@ -1,185 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_THEADERTRANSPORT_H_ -#define THRIFT_TRANSPORT_THEADERTRANSPORT_H_ 1 - -#include - -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/transport/THeader.h" -#include "thrift/lib/cpp/transport/THttpServer.h" -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" - -#include "folly/experimental/io/IOBuf.h" -#include "folly/experimental/io/IOBufQueue.h" - -#include -#include "boost/scoped_array.hpp" -#include -#include - -namespace apache { namespace thrift { namespace transport { - -/** - * Header transport. All writes go into an in-memory buffer until flush is - * called, at which point the transport writes the length of the entire - * binary chunk followed by the data payload. This allows the receiver on the - * other end to always do fixed-length reads. - * - * Subclass TFramedTransport because most of the read/write methods are similar - * and need similar buffers. Major changes are readFrame & flush. - */ -class THeaderTransport - : public TVirtualTransport - , public THeader { - public: - - explicit THeaderTransport(const boost::shared_ptr transport) - : THeader() - ,transport_(transport) - , outTransport_(transport) - , httpTransport_(transport) - { - initBuffers(); - } - - THeaderTransport(const boost::shared_ptr transport, - std::bitset const* clientTypes) - : THeader(clientTypes) - , transport_(transport) - , outTransport_(transport) - , httpTransport_(transport) - { - initBuffers(); - } - - THeaderTransport(const boost::shared_ptr inTransport, - const boost::shared_ptr outTransport, - std::bitset const* clientTypes) - : THeader(clientTypes) - , transport_(inTransport) - , outTransport_(outTransport) - , httpTransport_(outTransport) - { - initBuffers(); - } - - THeaderTransport(const boost::shared_ptr transport, uint32_t sz, - std::bitset const* clientTypes) - : THeader(clientTypes) - , transport_(transport) - , outTransport_(transport) - , httpTransport_(transport) - { - initBuffers(); - } - - void resetProtocol(); - - void open() { - transport_->open(); - } - - bool isOpen() { - return transport_->isOpen(); - } - - bool peek() { - return (this->rBase_ < this->rBound_) || transport_->peek(); - } - - void close() { - flush(); - transport_->close(); - } - - virtual uint32_t readSlow(uint8_t* buf, uint32_t len); - virtual uint32_t readAll(uint8_t* buf, uint32_t len); - virtual void flush(); - - boost::shared_ptr getUnderlyingTransport() { - return transport_; - } - - /* - * TVirtualTransport provides a default implementation of readAll(). - * We want to use the TBufferBase version instead. - */ - using TBufferBase::readAll; - - protected: - /** - * Reads a frame of input from the underlying stream. - * - * Returns true if a frame was read successfully, or false on EOF. - * (Raises a TTransportException if EOF occurs after a partial frame.) - */ - bool readFrame(uint32_t minFrameSize); - - void allocateReadBuffer(uint32_t sz); - uint32_t getWriteBytes(); - - void initBuffers() { - setReadBuffer(NULL, 0); - setWriteBuffer(wBuf_.get(), wBufSize_); - } - - boost::shared_ptr transport_; - boost::shared_ptr outTransport_; - - boost::shared_ptr httpTransport_; - - // Buffer to use for readFrame/flush processing - std::unique_ptr readBuf_; -}; - -/** - * Wraps a transport into a header one. - * - */ -class THeaderTransportFactory : public TTransportFactory { - public: - THeaderTransportFactory() {} - - virtual ~THeaderTransportFactory() {} - - /** - * Wraps the transport into a header one. - */ - virtual boost::shared_ptr - getTransport(boost::shared_ptr trans) { - return boost::shared_ptr( - new THeaderTransport(trans, &clientTypes)); - } - - void setClientTypes(const std::bitset& clientTypes) { - for (int i = 0; i < CLIENT_TYPES_LEN; ++i) { - this->clientTypes[i] = clientTypes[i]; - } - } - -private: - std::bitset clientTypes; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_THEADERTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/THttpClient.h b/thrift/lib/cpp/transport/THttpClient.h deleted file mode 100644 index 91e04a9cdb..0000000000 --- a/thrift/lib/cpp/transport/THttpClient.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_THTTPCLIENT_H_ -#define THRIFT_TRANSPORT_THTTPCLIENT_H_ 1 - -#include - -namespace apache { namespace thrift { namespace transport { - -class THttpClient : public THttpTransport { - public: - /* - * Create for a given host and port. The version that doesn't take - * a transport constructs its own TSocket as a transport. - * - * The path must be non-empty and start with "/". - */ - THttpClient(const boost::shared_ptr& transport, - const std::string& host, - const std::string& path); - THttpClient(const std::string& host, int port, const std::string& path); - - virtual ~THttpClient(); - - void setUserAgent(const std::string&); - - virtual void flush(); - - virtual void close() { - connectionClosedByServer_ = false; - THttpTransport::close(); - } - - virtual void init() { - /* - * HTTP requires that the `abs_path' component of a POST message start - * with '/' (see rfc2616 and rfc2396). - */ - assert(!path_.empty() && path_[0] == '/'); - - THttpTransport::init(); - } - - protected: - - const std::string host_; - const std::string path_; - std::string userAgent_; - bool connectionClosedByServer_; - - virtual void parseHeader(char* header); - virtual bool parseStatusLine(char* status); - -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_THTTPCLIENT_H_ diff --git a/thrift/lib/cpp/transport/THttpServer.h b/thrift/lib/cpp/transport/THttpServer.h deleted file mode 100644 index 65234084a9..0000000000 --- a/thrift/lib/cpp/transport/THttpServer.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_THTTPSERVER_H_ -#define _THRIFT_TRANSPORT_THTTPSERVER_H_ 1 - -#include - -namespace apache { namespace thrift { namespace transport { - -class THttpServer : public THttpTransport { - public: - THttpServer(boost::shared_ptr transport); - - virtual ~THttpServer(); - - virtual void flush(); - - protected: - - void readHeaders(); - virtual void parseHeader(char* header); - virtual bool parseStatusLine(char* status); - std::string getTimeRFC1123(); - -}; - -/** - * Wraps a transport into HTTP protocol - */ -class THttpServerTransportFactory : public TTransportFactory { - public: - THttpServerTransportFactory() {} - - virtual ~THttpServerTransportFactory() {} - - /** - * Wraps the transport into a buffered one. - */ - virtual boost::shared_ptr getTransport(boost::shared_ptr trans) { - return boost::shared_ptr(new THttpServer(trans)); - } - -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_THTTPSERVER_H_ diff --git a/thrift/lib/cpp/transport/THttpTransport.h b/thrift/lib/cpp/transport/THttpTransport.h deleted file mode 100644 index d315449e4f..0000000000 --- a/thrift/lib/cpp/transport/THttpTransport.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_THTTPTRANSPORT_H_ -#define THRIFT_TRANSPORT_THTTPTRANSPORT_H_ 1 - -#include -#include "TVirtualTransport.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * HTTP implementation of the thrift transport. This was irritating - * to write, but the alternatives in C++ land are daunting. Linking CURL - * requires 23 dynamic libraries last time I checked (WTF?!?). All we have - * here is a VERY basic HTTP/1.1 client which supports HTTP 100 Continue, - * chunked transfer encoding, keepalive, etc. Tested against Apache. - */ -class THttpTransport : public TVirtualTransport { - public: - explicit THttpTransport(boost::shared_ptr transport); - - virtual ~THttpTransport(); - - void open() { - transport_->open(); - } - - bool isOpen() { - return transport_->isOpen(); - } - - bool peek() { - return transport_->peek(); - } - - virtual void close() { - transport_->close(); - } - - uint32_t read(uint8_t* buf, uint32_t len); - - uint32_t readEnd(); - - void write(const uint8_t* buf, uint32_t len); - - virtual void flush() = 0; - - boost::shared_ptr getUnderlyingTransport() { - return transport_; - } - - protected: - - boost::shared_ptr transport_; - - TMemoryBuffer writeBuffer_; - TMemoryBuffer readBuffer_; - - bool readHeaders_; - bool chunked_; - bool chunkedDone_; - uint32_t chunkSize_; - uint32_t contentLength_; - - char* httpBuf_; - uint32_t httpPos_; - uint32_t httpBufLen_; - uint32_t httpBufSize_; - - virtual void init(); - - uint32_t readMoreData(); - char* readLine(); - - void readHeaders(); - virtual void parseHeader(char* header) = 0; - virtual bool parseStatusLine(char* status) = 0; - - uint32_t readChunked(); - void readChunkedFooters(); - uint32_t parseChunkSize(char* line); - - uint32_t readContent(uint32_t size); - - virtual void refill(); - void shift(); - - static const char* CRLF; - static const int CRLF_LEN; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_THTTPCLIENT_H_ diff --git a/thrift/lib/cpp/transport/TMemPagedFactory.h b/thrift/lib/cpp/transport/TMemPagedFactory.h deleted file mode 100644 index 3ed65c475d..0000000000 --- a/thrift/lib/cpp/transport/TMemPagedFactory.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TMEMPAGEDFACTORY_H_ -#define _THRIFT_TRANSPORT_TMEMPAGEDFACTORY_H_ 1 - -#include "external/google_base/spinlock.h" - -namespace apache { namespace thrift { namespace transport { - -/* - * struct keeps information about memory usage for specific page - */ -struct FixedSizeMemoryPage { - FixedSizeMemoryPage* next_; //!< chain hook - uint8_t buffer_[]; //!< pointer to the buffer -}; - -/** - * Fixed size memory pages factory - * Thread safe - * - */ -class FixedSizeMemoryPageFactory { - public: - /** - * Constructor - */ - FixedSizeMemoryPageFactory(size_t pageSize, //!< page size in bytes - size_t maxMemoryUsage, //!< max memory usage - size_t cacheMemorySize); //!< max memory in cache - /** - * Destructor - */ - ~FixedSizeMemoryPageFactory(); - - /** - * Releases all unused memory - */ - void releaseMemory(); - - /** - * Requests for a page allocation - */ - FixedSizeMemoryPage* getPage(bool throwOnError = true); - - /** - * Returns current page size - */ - size_t getPageSize() const; - - /** - * Returns page back to factory - */ - void returnPage(FixedSizeMemoryPage* page); - private: - const size_t pageSize_; - const size_t maxMemoryUsage_; - const size_t cacheMemorySize_; - size_t numAllocatedPages_; - size_t numCachedPages_; - FixedSizeMemoryPage* cachedPages_; - mutable facebook::SpinLock lock_; -}; - - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TMEMPAGEDFACTORY_H_ diff --git a/thrift/lib/cpp/transport/TMemPagedTransport.h b/thrift/lib/cpp/transport/TMemPagedTransport.h deleted file mode 100644 index d9b4e5b9a9..0000000000 --- a/thrift/lib/cpp/transport/TMemPagedTransport.h +++ /dev/null @@ -1,147 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TVirtualTransport.h" -#include "thrift/lib/cpp/transport/TMemPagedFactory.h" -#include - -namespace apache { namespace thrift { namespace transport { - -using namespace boost; - -/** - * Class TTransport for direct usage of paged memory - * NOT thread safe - for a higher performance trade-off - */ -class TMemPagedTransport : public TVirtualTransport { - public: - /** - * Constructor - */ - TMemPagedTransport(shared_ptr& factory); - - /** - * Destructor - */ - ~TMemPagedTransport(); - - /** - * Whether this transport is open. - */ - virtual bool isOpen(); - - /** - * Opens the transport. - */ - virtual void open(); - - /** - * Closes the transport. - */ - virtual void close(); - - /** - * Called when read is completed. - * This can be over-ridden to perform a transport-specific action - * e.g. logging the request to a file - * - * @return number of bytes read if available, 0 otherwise. - */ - virtual uint32_t readEnd(); - - /** - * Called when write is completed. - * This can be over-ridden to perform a transport-specific action - * at the end of a request. - * - * @return number of bytes written if available, 0 otherwise - */ - virtual uint32_t writeEnd(); - - /** - * Implementations of the base functions - */ - inline uint32_t read(uint8_t* buf, uint32_t len); - inline void write(const uint8_t* buf, uint32_t len); - inline const uint8_t* borrow(uint8_t* buf, uint32_t* len); - inline void consume(uint32_t len); - inline uint32_t readAll(uint8_t* buf, uint32_t len); - /** - * interface extension, not part of the TTrasport - * make sure there are some bytes for write at the same page available - */ - inline uint8_t* reserve(uint32_t* len, bool throwOnError = true); - /** - * interface extension, not part of the TTrasport - * similar to consume but for the write - */ - inline void skip(uint32_t len); - - /** - * Reset buffer for read - * Sets read offset to zero - */ - inline void resetForRead(); - - /** - * Reset buffer for write - * Sets write offset to zero and releases extra memory pages - */ - inline void resetForWrite(bool releaseAllPages = false); - - /** - * Returns number of bytes already read from buffer - */ - inline uint32_t getReadBytes() const; - - /** - * Returns current bytes written in buffer - */ - inline uint32_t getWrittenBytes() const; - - private: - /** - * helper function - * write or skip bytes - */ - inline void set(const uint8_t* buf, uint32_t len); - - /** - * helper function - * read or skip bytes - */ - inline uint32_t get(uint8_t* buf, uint32_t len); - - - private: - shared_ptr factory_; //!< memory pages factory - const uint32_t pageSize_; //!< page size - FixedSizeMemoryPage* headPage_; //!< head of the stack - FixedSizeMemoryPage* currentReadPage_; //!< current read page - uint32_t currentReadOffset_; //!< bytes already read - FixedSizeMemoryPage* currentWritePage_; //!< current write page - uint32_t currentWriteOffset_; //!< bytes already written -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TMemPagedTransport.tcc b/thrift/lib/cpp/transport/TMemPagedTransport.tcc deleted file mode 100644 index 480ec8da0e..0000000000 --- a/thrift/lib/cpp/transport/TMemPagedTransport.tcc +++ /dev/null @@ -1,349 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_HPP_ -#define _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_HPP_ 1 - -#include "thrift/lib/cpp/transport/TMemPagedTransport.h" -#include - -namespace apache { namespace thrift { namespace transport { - -/** - * Reset buffer for read - */ -inline void TMemPagedTransport::resetForRead() { - currentReadPage_ = headPage_; - currentReadOffset_ = 0; -} - -/** - * Reset buffer for write - */ -inline void TMemPagedTransport::resetForWrite(bool releaseAllPages) { - FixedSizeMemoryPage* discardPage = NULL; - if (releaseAllPages) { // release all pages - discardPage = headPage_; - headPage_ = NULL; - } else { // make sure head page left or created - if (!headPage_) { // allocate page if any - headPage_ = factory_->getPage(); - } else { - discardPage = headPage_->next_; - headPage_->next_ = NULL; - } - } - while (discardPage) { - FixedSizeMemoryPage* pageForDeletion = discardPage; - discardPage = discardPage->next_; - factory_->returnPage(pageForDeletion); - } - - // reset - currentReadPage_ = currentWritePage_ = headPage_; - currentReadOffset_ = currentWriteOffset_ = 0; -} - -/** - * Returns number of bytes already read from buffer - */ -inline uint32_t TMemPagedTransport::getReadBytes() const { - uint32_t ret = 0; - FixedSizeMemoryPage* page = headPage_; - while (page) { - if (page == currentReadPage_) { - ret += currentReadOffset_; - break; - } else { - ret += pageSize_; - } - page = page->next_; - } - // return result - return ret; -} - -/** - * Returns current bytes written in buffer - */ -inline uint32_t TMemPagedTransport::getWrittenBytes() const { - uint32_t ret = 0; - FixedSizeMemoryPage* page = headPage_; - while (page) { - if (page == currentWritePage_) { - ret += currentWriteOffset_; - break; - } else { - ret += pageSize_; - } - page = page->next_; - } - // return result - return ret; -} - -/** - * Implementations of the base functions - */ -inline uint32_t TMemPagedTransport::read(uint8_t* buf, uint32_t len) { - if (!buf) { - throw TTransportException(TTransportException::BAD_ARGS); - } - return get(buf, len); -} - -inline void TMemPagedTransport::write(const uint8_t* buf, uint32_t len) { - if (!buf) { - throw TTransportException(TTransportException::BAD_ARGS); - } - set(buf, len); -} - -/** - * interface extension, not part of the TTrasport - * similar to consume but for the write - */ -inline void TMemPagedTransport::skip(uint32_t len) { - set(NULL, len); -} - -inline const uint8_t* TMemPagedTransport::borrow(uint8_t* buf, uint32_t* len) { - // - possible scenarios - // - buf is NULL - // -- available bytes for current page >= len - (return internal pointer) - // -- available bytes for current page < len - return NULL, set len 0 - // - buf is not NULL - // -- available bytes for current page >= len - (return internal pointer) - // -- available bytes for current page < len - copy to the external buffer - FixedSizeMemoryPage* page = currentReadPage_; - uint32_t readOffset = currentReadOffset_; - if (!page) { // no memory available - *len = 0; - return NULL; - } - - uint32_t capacity = *len; // requested capacity - uint32_t available = 0; - if (page == currentWritePage_) { - available = currentWriteOffset_ - readOffset; - } else { - available = pageSize_ - readOffset; - } - - if (available >= capacity) { // enough available bytes - *len = available; // assign available bytes - return page->buffer_ + readOffset; // return readable memory pointer - } - // not enough available bytes on the current page - if (!buf) { // buffer is not provided - *len = 0; - return NULL; - } - // buffer is provided, make memory copy from current page if any - available = std::min(available, capacity); - if (available) { - std::memcpy(buf + *len - capacity, - page->buffer_ + readOffset, - available); - // adjust capacity - capacity -= available; - // adjust offset - readOffset += available; - } - // copy the rest if available - while (capacity) { // read until all buffer filled - if (page == currentWritePage_ && - readOffset == currentWriteOffset_) { - *len = 0; - return NULL; // no more available bytes for read - } else { - // if read and write on the same page - if (page == currentWritePage_) { - available = currentWriteOffset_ - readOffset; - } else if (!(available = pageSize_ - readOffset)) { - // move to next page - page = page->next_; - assert(page); - readOffset = 0; - continue; - } - } - // how many bytes we can read - available = std::min(capacity, available); - // memory copy - std::memcpy(buf + *len - capacity, - page->buffer_ + readOffset, - available); - // adjust capacity - capacity -= available; - // adjust page read offset - readOffset += available; - // move to the next page if end is reached - // and more pages for read available - if (readOffset == pageSize_ && - page != currentWritePage_) { - page = page->next_; - assert(page); - // reset offset - readOffset = 0; - } - } - // return result, leave len as it is - return buf; -} - -/** - * interface extension, not part of the TTrasport - * make sure there are some bytes for write at the same page available - */ -inline uint8_t* TMemPagedTransport::reserve(uint32_t* len, bool throwOnError) { - if (!currentWritePage_ || pageSize_ == currentWriteOffset_) { - FixedSizeMemoryPage* newPage = factory_->getPage(throwOnError); - if (!newPage) { // no memory - return NULL; - } - if (currentWritePage_) { - currentWritePage_->next_ = newPage; - } else { - headPage_ = currentReadPage_ = newPage; - } - currentWritePage_ = newPage; - // reset write offset - currentWriteOffset_ = 0; - } - if (len) { // it can be a call just to reserve a new page - *len = pageSize_ - currentWriteOffset_; - } - - return currentWritePage_->buffer_ + currentWriteOffset_; -} - -inline void TMemPagedTransport::consume(uint32_t len) { - get(NULL, len); -} - -inline uint32_t TMemPagedTransport::readAll(uint8_t* buf, uint32_t len) { - // try to read requested bytes - uint32_t res = read(buf, len); - if (res != len) { // not all bytes can be read - // interface description requires throwing exception - throw TTransportException(TTransportException::END_OF_FILE); - } - return res; -} - - -/** - * helper function - * write or skip bytes - */ -inline void TMemPagedTransport::set(const uint8_t* buf, uint32_t len) { - uint32_t capacity = len; // requested capacity - // prepare for rollback in case of out of memory - FixedSizeMemoryPage* saveWritePage = currentWritePage_; - uint32_t saveWriteOffset = currentWriteOffset_; - while (capacity) { // write until all buffer bytes get sent - uint32_t available = 0; - if (!reserve(&available, false)) { // reserve page if any - // rollback - currentWriteOffset_ = saveWriteOffset; - if ((currentWritePage_ = saveWritePage) != NULL) { // there were pages - // remove extra allocated pages if any - // even we remove previously existed pages it won't hurt - FixedSizeMemoryPage* pageForDelete = saveWritePage->next_; - currentWritePage_->next_ = NULL; // cut the tail - while (pageForDelete) { - saveWritePage = pageForDelete; - pageForDelete = pageForDelete->next_; - factory_->returnPage(saveWritePage); - } - } else { - // remove all pages - resetForWrite(true); - } - // throw - throw TTransportException(TTransportException::INTERNAL_ERROR); - } - // how many bytes we can write - available = std::min(capacity, available); - if (buf) { - // memory copy if any - std::memcpy(currentWritePage_->buffer_ + currentWriteOffset_, - buf + len - capacity, - available); - } - // adjust capacity - capacity -= available; - // adjust page write iterator - currentWriteOffset_ += available; - } // while -} - -/** - * Implementations of the base functions - */ -inline uint32_t TMemPagedTransport::get(uint8_t* buf, uint32_t len) { - uint32_t capacity = len; // requested memory - uint32_t available = 0; - if (!currentReadPage_) { - return 0; // nothing to read, did not reset or write bytes - } - while (capacity) { // read until all buffer filled - if (currentReadPage_ == currentWritePage_) { - // if read and write on the same page - if (!(available = currentWriteOffset_ - currentReadOffset_)) { - break; // no more available bytes for read - } - } else if (!(available = pageSize_ - currentReadOffset_)) { - // not the last page - // move to next page - currentReadPage_ = currentReadPage_->next_; - assert(currentReadPage_); - currentReadOffset_ = 0; - available = pageSize_ - currentReadOffset_; - } - // how many bytes we can read - available = std::min(capacity, available); - // memory copy if any - if (buf) { - std::memcpy(buf + len - capacity, - currentReadPage_->buffer_ + currentReadOffset_, - available); - } - // adjust capacity - capacity -= available; - // adjust page read iterator - currentReadOffset_ += available; - // move to the next page if end is reached - // and more pages for read available - if (currentReadOffset_ == pageSize_ && - currentReadPage_ != currentWritePage_) { - currentReadPage_ = currentReadPage_->next_; - assert(currentReadPage_); - // reset offset - currentReadOffset_ = 0; - } - } - // return result - return len - capacity; -} - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TMEMPAGEDTRANSPORT_HPP_ diff --git a/thrift/lib/cpp/transport/TRpcTransport.h b/thrift/lib/cpp/transport/TRpcTransport.h deleted file mode 100644 index b24e5db93f..0000000000 --- a/thrift/lib/cpp/transport/TRpcTransport.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TRANSPORT_TRPCTRANSPORT_H_ -#define THRIFT_TRANSPORT_TRPCTRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TTransport.h" - -namespace apache { namespace thrift { namespace transport { - -class TSocketAddress; - -/** - * A TRpcTransport adds a getPeerAddress() method to the base TTransport - * interface. - */ -class TRpcTransport : public TTransport { - public: - /** - * Get the address of the peer to which this transport is connected. - * - * @return Returns a pointer to a TSocketAddress. This struct is owned by - * the TRpcTransport and is guaranteed to remain valid for the - * lifetime of the TRpcTransport. It is guaranteed to return - * non-NULL. (On error, a TTransportException will be raised.) - */ - virtual const TSocketAddress* getPeerAddress() = 0; -}; - -}}} // apache::thrift::transport - -#endif // THRIFT_TRANSPORT_TRPCTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TSSLServerSocket.h b/thrift/lib/cpp/transport/TSSLServerSocket.h deleted file mode 100644 index 178b362fe9..0000000000 --- a/thrift/lib/cpp/transport/TSSLServerSocket.h +++ /dev/null @@ -1,46 +0,0 @@ -// Copyright (c) 2009- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TRANSPORT_TSSLSERVERSOCKET_H_ -#define _THRIFT_TRANSPORT_TSSLSERVERSOCKET_H_ 1 - -#include -#include "thrift/lib/cpp/transport/TServerSocket.h" - -namespace apache { namespace thrift { namespace transport { - -class TSSLSocketFactory; - -/** - * Server socket that accepts SSL connections. - */ -class TSSLServerSocket: public TServerSocket { - public: - /** - * Constructor. - * - * @param port Listening port - * @param factory SSL socket factory implementation - */ - TSSLServerSocket(int port, boost::shared_ptr factory); - /** - * Constructor. - * - * @param port Listening port - * @param sendTimeout Socket send timeout - * @param recvTimeout Socket receive timeout - * @param factory SSL socket factory implementation - */ - TSSLServerSocket(int port, int sendTimeout, int recvTimeout, - boost::shared_ptr factory); - protected: - boost::shared_ptr createSocket(int socket); - boost::shared_ptr factory_; -}; - -}}} - -#endif diff --git a/thrift/lib/cpp/transport/TSSLSocket.h b/thrift/lib/cpp/transport/TSSLSocket.h deleted file mode 100644 index 66131b87b7..0000000000 --- a/thrift/lib/cpp/transport/TSSLSocket.h +++ /dev/null @@ -1,365 +0,0 @@ -// Copyright (c) 2009- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef THRIFT_TRANSPORT_TSSLSOCKET_H_ -#define THRIFT_TRANSPORT_TSSLSOCKET_H_ 1 - -#include -#include -#include -#include "thrift/lib/cpp/concurrency/Mutex.h" -#include "thrift/lib/cpp/transport/TSocket.h" - -namespace apache { namespace thrift { namespace transport { - -class PasswordCollector; -class SSLContext; -class TSocketAddress; - -/** - * OpenSSL implementation for SSL socket interface. - */ -class TSSLSocket: public TVirtualTransport { - public: - /** - * Constructor. - */ - explicit TSSLSocket(const boost::shared_ptr& ctx); - /** - * Constructor, create an instance of TSSLSocket given an existing socket. - * - * @param socket An existing socket - */ - TSSLSocket(const boost::shared_ptr& ctx, int socket); - /** - * Constructor. - * - * @param host Remote host name - * @param port Remote port number - */ - TSSLSocket(const boost::shared_ptr& ctx, - const std::string& host, - int port); - /** - * Constructor. - */ - TSSLSocket(const boost::shared_ptr& ctx, - const TSocketAddress& address); - /** - * Destructor. - */ - ~TSSLSocket(); - - /** - * TTransport interface. - */ - bool isOpen(); - bool peek(); - void open(); - void close(); - uint32_t read(uint8_t* buf, uint32_t len); - void write(const uint8_t* buf, uint32_t len); - void flush(); - - /** - * Set whether to use client or server side SSL handshake protocol. - * - * @param flag Use server side handshake protocol if true. - */ - void server(bool flag) { server_ = flag; } - /** - * Determine whether the SSL socket is server or client mode. - */ - bool server() const { return server_; } - -protected: - /** - * Verify peer certificate after SSL handshake completes. - */ - virtual void verifyCertificate(); - - /** - * Initiate SSL handshake if not already initiated. - */ - void checkHandshake(); - - bool server_; - SSL* ssl_; - boost::shared_ptr ctx_; -}; - -/** - * SSL socket factory. SSL sockets should be created via SSL factory. - */ -class TSSLSocketFactory { - public: - /** - * Constructor/Destructor - */ - explicit TSSLSocketFactory(const boost::shared_ptr& context); - virtual ~TSSLSocketFactory(); - - /** - * Create an instance of TSSLSocket with a fresh new socket. - */ - virtual boost::shared_ptr createSocket(); - /** - * Create an instance of TSSLSocket with the given socket. - * - * @param socket An existing socket. - */ - virtual boost::shared_ptr createSocket(int socket); - /** - * Create an instance of TSSLSocket. - * - * @param host Remote host to be connected to - * @param port Remote port to be connected to - */ - virtual boost::shared_ptr createSocket(const std::string& host, - int port); - /** - * Set/Unset server mode. - * - * @param flag Server mode if true - */ - virtual void server(bool flag) { server_ = flag; } - /** - * Determine whether the socket is in server or client mode. - * - * @return true, if server mode, or, false, if client mode - */ - virtual bool server() const { return server_; } - - private: - boost::shared_ptr ctx_; - bool server_; -}; - -/** - * SSL exception. - */ -class TSSLException: public TTransportException { - public: - explicit TSSLException(const std::string& message): - TTransportException(TTransportException::INTERNAL_ERROR, message) {} - - virtual const char* what() const throw() { - if (message_.empty()) { - return "TSSLException"; - } else { - return message_.c_str(); - } - } -}; - -/** - * Wrap OpenSSL SSL_CTX into a class. - */ -class SSLContext { - public: - - enum SSLVersion { - SSLv2, - SSLv3, - TLSv1 - }; - - /** - * Constructor. - * - * @param version The lowest or oldest SSL version to support. - */ - explicit SSLContext(SSLVersion version = TLSv1); - virtual ~SSLContext(); - - /** - * Set ciphers to be used in SSL handshake process. - * - * @param ciphers A list of ciphers - */ - virtual void ciphers(const std::string& enable); - /** - * Enable/Disable authentication. Peer name validation can only be done - * if checkPeerCert is true. - * - * @param checkPeerCert If true, require peer to present valid certificate - * @param checkPeerName If true, validate that the certificate common name - * or alternate name(s) of peer matches the hostname - * used to connect. - * @param peerName If non-empty, validate that the certificate common - * name of peer matches the given string (altername - * name(s) are not used in this case). - */ - virtual void authenticate(bool checkPeerCert, bool checkPeerName, - const std::string& peerName = std::string()); - /** - * Load server certificate. - * - * @param path Path to the certificate file - * @param format Certificate file format - */ - virtual void loadCertificate(const char* path, const char* format = "PEM"); - /** - * Load private key. - * - * @param path Path to the private key file - * @param format Private key file format - */ - virtual void loadPrivateKey(const char* path, const char* format = "PEM"); - /** - * Load trusted certificates from specified file. - * - * @param path Path to trusted certificate file - */ - virtual void loadTrustedCertificates(const char* path); - /** - * Load trusted certificates from specified X509 certificate store. - * - * @param store X509 certificate store. - */ - virtual void loadTrustedCertificates(X509_STORE* store); - /** - * Default randomize method. - */ - virtual void randomize(); - /** - * Override default OpenSSL password collector. - * - * @param collector Instance of user defined password collector - */ - virtual void passwordCollector(boost::shared_ptr collector); - /** - * Obtain password collector. - * - * @return User defined password collector - */ - virtual boost::shared_ptr passwordCollector() { - return collector_; - } - - /** - * Create an SSL object from this context. - */ - SSL* createSSL() const; - - /** - * Possibly validate the peer's certificate name, depending on how this - * SSLContext was configured by authenticate(). - * - * @return True if the peer's name is acceptable, false otherwise - */ - bool validatePeerName(TSSLSocket* sock, SSL* ssl) const; - - /** - * Set the options on the SSL_CTX object. - */ - void setOptions(long options); - -#ifdef OPENSSL_NPN_NEGOTIATED - /** - * Set the list of protocols that a TLS server should advertise for - * Next Protocol Negotiation (NPN). - * - * @param protocols List of protocol names, or NULL to disable NPN. - * Note: if non-null, this method makes a copy, so - * the caller needn't keep the list in scope after - * the call completes. - */ - void setAdvertisedNextProtocols(const std::list* protocols); -#endif // OPENSSL_NPN_NEGOTIATED - - /** - * Gets the underlying SSL_CTX for advanced usage - */ - SSL_CTX *getSSLCtx() const { - return ctx_; - } - - enum SSLLockType { - LOCK_MUTEX, - LOCK_SPINLOCK, - LOCK_NONE - }; - - /** - * Set preferences for how to treat locks in OpenSSL. This must be - * called before the instantiation of any SSLContext objects, otherwise - * the defaults will be used. - * - * OpenSSL has a lock for each module rather than for each object or - * data that needs locking. Some locks protect only refcounts, and - * might be better as spinlocks rather than mutexes. Other locks - * may be totally unnecessary if the objects being protected are not - * shared between threads in the application. - * - * By default, all locks are initialized as mutexes. OpenSSL's lock usage - * may change from version to version and you should know what you are doing - * before disabling any locks entirely. - * - * Example: if you don't share SSL sessions between threads in your - * application, you may be able to do this - * - * setSSLLockTypes({{CRYPTO_LOCK_SSL_SESSION, SSLContext::LOCK_NONE}}) - */ - static void setSSLLockTypes(std::map lockTypes); - - protected: - SSL_CTX* ctx_; - - private: - bool checkPeerName_; - std::string peerFixedName_; - boost::shared_ptr collector_; - - static concurrency::Mutex mutex_; - static uint64_t count_; - -#ifdef OPENSSL_NPN_NEGOTIATED - /** - * Wire-format list of advertised protocols for use in NPN. - */ - unsigned char* advertisedNextProtocols_; - unsigned advertisedNextProtocolsLength_; - - static int advertisedNextProtocolCallback(SSL* ssl, - const unsigned char** out, unsigned int* outlen, void* data); -#endif // OPENSSL_NPN_NEGOTIATED - - static int passwordCallback(char* password, int size, int, void* data); - - static void initializeOpenSSL(); - static void cleanupOpenSSL(); - - /** - * Helper to match a hostname versus a pattern. - */ - static bool matchName(const char* host, const char* pattern, int size); -}; - -typedef boost::shared_ptr SSLContextPtr; - -/** - * Override the default password collector. - */ -class PasswordCollector { - public: - virtual ~PasswordCollector() {} - /** - * Interface for customizing how to collect private key password. - * - * By default, OpenSSL prints a prompt on screen and request for password - * while loading private key. To implement a custom password collector, - * implement this interface and register it with TSSLSocketFactory. - * - * @param password Pass collected password back to OpenSSL - * @param size Maximum length of password including NULL character - */ - virtual void getPassword(std::string& password, int size) = 0; -}; - -}}} - -#endif diff --git a/thrift/lib/cpp/transport/TServerSocket.h b/thrift/lib/cpp/transport/TServerSocket.h deleted file mode 100644 index 992b92d459..0000000000 --- a/thrift/lib/cpp/transport/TServerSocket.h +++ /dev/null @@ -1,84 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TSERVERSOCKET_H_ -#define _THRIFT_TRANSPORT_TSERVERSOCKET_H_ 1 - -#include "thrift/lib/cpp/transport/TServerTransport.h" -#include - -namespace apache { namespace thrift { namespace transport { - -class TSocket; - -/** - * Server socket implementation of TServerTransport. Wrapper around a unix - * socket listen and accept calls. - * - */ -class TServerSocket : public TServerTransport { - public: - TServerSocket(int port); - TServerSocket(int port, int sendTimeout, int recvTimeout); - - ~TServerSocket(); - - int getPort() const { return port_; } - - void setSendTimeout(int sendTimeout); - void setRecvTimeout(int recvTimeout); - - void setAcceptTimeout(int accTimeout); - - void setRetryLimit(int retryLimit); - void setRetryDelay(int retryDelay); - - void setTcpSendBuffer(int tcpSendBuffer); - void setTcpRecvBuffer(int tcpRecvBuffer); - - void listen(); - void close(); - - void interrupt(); - - void getAddress(TSocketAddress* address); - - protected: - boost::shared_ptr acceptImpl(); - virtual boost::shared_ptr createSocket(int client); - - private: - int port_; - int serverSocket_; - int acceptBacklog_; - int sendTimeout_; - int recvTimeout_; - int accTimeout_; - int retryLimit_; - int retryDelay_; - int tcpSendBuffer_; - int tcpRecvBuffer_; - - int intSock1_; - int intSock2_; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TSERVERSOCKET_H_ diff --git a/thrift/lib/cpp/transport/TServerTransport.h b/thrift/lib/cpp/transport/TServerTransport.h deleted file mode 100644 index cf275a86be..0000000000 --- a/thrift/lib/cpp/transport/TServerTransport.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TSERVERTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TSERVERTRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TRpcTransport.h" -#include "thrift/lib/cpp/transport/TTransportException.h" -#include - -namespace apache { namespace thrift { namespace transport { - -/** - * Server transport framework. A server needs to have some facility for - * creating base transports to read/write from. - * - */ -class TServerTransport { - public: - virtual ~TServerTransport() {} - - /** - * Starts the server transport listening for new connections. Prior to this - * call most transports will not return anything when accept is called. - * - * @throws TTransportException if we were unable to listen - */ - virtual void listen() {} - - /** - * Gets a new dynamically allocated transport object and passes it to the - * caller. Note that it is the explicit duty of the caller to free the - * allocated object. The returned TRpcTransport object must always be in the - * opened state. NULL should never be returned, instead an Exception should - * always be thrown. - * - * @return A new TRpcTransport object - * @throws TTransportException if there is an error - */ - boost::shared_ptr accept() { - boost::shared_ptr result = acceptImpl(); - if (result == NULL) { - throw TTransportException("accept() may not return NULL"); - } - return result; - } - - /** - * For "smart" TServerTransport implementations that work in a multi - * threaded context this can be used to break out of an accept() call. - * It is expected that the transport will throw a TTransportException - * with the interrupted error code. - */ - virtual void interrupt() {} - - /** - * Closes this transport such that future calls to accept will do nothing. - */ - virtual void close() = 0; - - /** - * Get the address on which this transport is listening. - * - * Should only be called after calling listen(). May raise - * TTransportException on error. - * - * @param address The server's address will be stored in the TSocketAddress - * pointed to by this argument. - */ - virtual void getAddress(TSocketAddress* address) = 0; - - protected: - TServerTransport() {} - - /** - * Subclasses should implement this function for accept. - * - * @return A newly allocated TRpcTransport object - * @throw TTransportException If an error occurs - */ - virtual boost::shared_ptr acceptImpl() = 0; - -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TSERVERTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TShortReadTransport.h b/thrift/lib/cpp/transport/TShortReadTransport.h deleted file mode 100644 index cdfc35a0b3..0000000000 --- a/thrift/lib/cpp/transport/TShortReadTransport.h +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_ 1 - -#include - -#include "thrift/lib/cpp/transport/TTransport.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" - -namespace apache { namespace thrift { namespace transport { namespace test { - -/** - * This class is only meant for testing. It wraps another transport. - * Calls to read are passed through with some probability. Otherwise, - * the read amount is randomly reduced before being passed through. - * - */ -class TShortReadTransport : public TVirtualTransport { - public: - TShortReadTransport(boost::shared_ptr transport, double full_prob) - : transport_(transport) - , fullProb_(full_prob) - {} - - bool isOpen() { - return transport_->isOpen(); - } - - bool peek() { - return transport_->peek(); - } - - void open() { - transport_->open(); - } - - void close() { - transport_->close(); - } - - uint32_t read(uint8_t* buf, uint32_t len) { - if (len == 0) { - return 0; - } - - if (rand()/(double)RAND_MAX >= fullProb_) { - len = 1 + rand()%len; - } - return transport_->read(buf, len); - } - - void write(const uint8_t* buf, uint32_t len) { - transport_->write(buf, len); - } - - void flush() { - transport_->flush(); - } - - const uint8_t* borrow(uint8_t* buf, uint32_t* len) { - return transport_->borrow(buf, len); - } - - void consume(uint32_t len) { - return transport_->consume(len); - } - - boost::shared_ptr getUnderlyingTransport() { - return transport_; - } - - protected: - boost::shared_ptr transport_; - double fullProb_; -}; - -}}}} // apache::thrift::transport::test - -#endif // #ifndef _THRIFT_TRANSPORT_TSHORTREADTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TSimpleFileTransport.h b/thrift/lib/cpp/transport/TSimpleFileTransport.h deleted file mode 100644 index 6bfb879ae8..0000000000 --- a/thrift/lib/cpp/transport/TSimpleFileTransport.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TSIMPLEFILETRANSPORT_H_ -#define _THRIFT_TRANSPORT_TSIMPLEFILETRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TFDTransport.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * Dead-simple wrapper around a file. - * - * @param path file name and path - * @param read whether to open file for reading - * @param write whether to open file for writing(using O_APPEND) - * - * @author David Braginsky - */ -class TSimpleFileTransport : public TFDTransport { - public: - TSimpleFileTransport(const std::string& path, - bool read = true, - bool write = false); -}; - -}}} // apache::thrift::transport - -#endif // _THRIFT_TRANSPORT_TSIMPLEFILETRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TSocket.h b/thrift/lib/cpp/transport/TSocket.h deleted file mode 100644 index 62bad5aab6..0000000000 --- a/thrift/lib/cpp/transport/TSocket.h +++ /dev/null @@ -1,382 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TSOCKET_H_ -#define _THRIFT_TRANSPORT_TSOCKET_H_ 1 - -#include -#include - -#include "thrift/lib/cpp/transport/TRpcTransport.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" -#include "thrift/lib/cpp/transport/TServerSocket.h" -#include "thrift/lib/cpp/transport/TSocketAddress.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * TCP Socket implementation of the TTransport interface. - * - */ -class TSocket : public TVirtualTransport< TSocket, - TTransportDefaults > { - -public: - /** - * Struct that contains socket options related stuff - */ - struct Options { - - Options(): - connTimeout(0), - sendTimeout(0), - recvTimeout(0), - sendBufSize(0), - recvBufSize(0), - lingerOn(false), - lingerVal(0), - noDelay(true), - reuseAddr(false) { - } - - /** Connect timeout in ms */ - int connTimeout; - - /** Send timeout in ms */ - int sendTimeout; - - /** Recv timeout in ms */ - int recvTimeout; - - /** Send Buffer Size in Bytes */ - size_t sendBufSize; - - /** Recv Buffer Size in Bytes */ - size_t recvBufSize; - - /** Linger on */ - bool lingerOn; - - /** Linger val */ - int lingerVal; - - /** Nodelay */ - bool noDelay; - - /** SO_REUSEADDR **/ - bool reuseAddr; - }; - - /** - * Constructs a new socket. Note that this does NOT actually connect the - * socket. - * - */ - TSocket(); - - /** - * Constructs a new socket. Note that this does NOT actually connect the - * socket. - * - * If a hostname is provided, and it resolves to multiple IPs, connect() will - * attempt to connect to each one in sequence, until one connection succeeds. - * - * @param host An IP address or hostname to connect to - * @param port The port to connect on - */ - TSocket(std::string host, int port); - - /** - * Constructs a new socket. Note that this does NOT actually connect the - * socket. - * - * @param adddress The address to connect to - */ - explicit TSocket(const TSocketAddress* address); - - /** - * Constructs a new socket. Note that this does NOT actually connect the - * socket. - * - * @param adddress The address to connect to - */ - explicit TSocket(const TSocketAddress& address); - - /** - * Constructor to create socket from raw UNIX handle. - * - * This is used by the TServerSocket class to create a TSocket from file - * descriptors returned by accept(). - */ - explicit TSocket(int socket); - - - /** - * Destroyes the socket object, closing it if necessary. - */ - virtual ~TSocket(); - - /** - * Whether the socket is alive. - * - * @return Is the socket alive? - */ - bool isOpen(); - - /** - * Calls select on the socket to see if there is more data available. - */ - bool peek(); - - /** - * Creates and opens the UNIX socket. - * - * @throws TTransportException If the socket could not connect - */ - virtual void open(); - - /** - * Shuts down communications on the socket. - */ - virtual void close(); - - /** - * Reads from the underlying socket. - */ - uint32_t read(uint8_t* buf, uint32_t len); - - /** - * Writes to the underlying socket. Loops until done or fail. - */ - void write(const uint8_t* buf, uint32_t len); - - /** - * Writes to the underlying socket. Does single send() and returns result. - */ - uint32_t write_partial(const uint8_t* buf, uint32_t len); - - /** - * Get the host that the socket is connected to - * - * @return string host identifier - */ - std::string getHost(); - - /** - * Get the port that the socket is connected to - * - * @return int port number - */ - int getPort(); - - /** - * Set the host that socket will connect to - * - * @param host host identifier - */ - void setHost(std::string host); - - /** - * Set the port that socket will connect to - * - * @param port port number - */ - void setPort(int port); - - - /** - * Sets the socket options enabled in the - * TSocket::Options object options_; - * Note you can try to individually set any option - * using the methods provided below e.g. setSendBufSize - */ - void setSocketOptions(const Options& oh ); - - /** - * get the options_ object - * - * @return TSocket::Options options_; - */ - TSocket::Options getSocketOptions(); - - /** - * get the currently set socket options - * this function returns the currently set socket options - * using the getsockopt() function rather than trusting - * what is set in the options_ member - * setting socket options via setSocketOption calls can fail - * because of settings in the sysctl - * e.g. trying to set the sendBufSize to some value greater - * than the wmem_max value in sysctl - * - * @return TSocket::Options - */ - TSocket::Options getCurrentSocketOptions(); - - /** - * Controls whether the linger option is set on the socket. - * - * @param on Whether SO_LINGER is on - * @param linger If linger is active, the number of seconds to linger for - */ - void setLinger(bool on, int linger); - - /** - * Whether to enable/disable Nagle's algorithm. - * - * @param noDelay Whether or not to disable the algorithm. - * @return - */ - void setNoDelay(bool noDelay); - - /** - * Set the connect timeout - */ - void setConnTimeout(int ms); - - /** - * Set the receive timeout - */ - void setRecvTimeout(int ms); - - /** - * Set the send bufsize - */ - void setSendBufSize(size_t bufsize); - - /** - * Set the recv bufsize - */ - void setRecvBufSize(size_t bufsize); - - /** - * Set the send timeout - */ - void setSendTimeout(int ms); - - /** - * Set the max number of recv retries in case of an EAGAIN - * error - */ - void setMaxRecvRetries(int maxRecvRetries); - - /** - * Set the SO_REUSEADDR socket option. - */ - void setReuseAddress(bool reuseAddr); - - /** - * Get socket information formated as a string - */ - std::string getSocketInfo(); - - /* - * Returns the address of the host to which the socket is connected - */ - const TSocketAddress* getPeerAddress(); - - /** - * Returns the DNS name of the host to which the socket is connected - */ - std::string getPeerHost(); - - /** - * Returns a string representation of the IP address to which the - * socket is connected - */ - std::string getPeerAddressStr(); - - /** - * Returns the port of the host to which the socket is connected - **/ - uint16_t getPeerPort(); - - /** - * Returns the underlying socket file descriptor. - */ - int getSocketFD() { - return socket_; - } - - /** - * (Re-)initialize a TSocket for the supplied descriptor. This is only - * intended for use by TNonblockingServer -- other use may result in - * unfortunate surprises. - * - * @param fd the descriptor for an already-connected socket - */ - void setSocketFD(int fd); - - /** - * Sets whether to use a low minimum TCP retransmission timeout. - */ - static void setUseLowMinRto(bool useLowMinRto); - - /** - * Gets whether to use a low minimum TCP retransmission timeout. - */ - static bool getUseLowMinRto(); - - /** - * Set a cache of the peer address (used when trivially available: e.g. - * accept() or connect()). Only caches IPV4 and IPV6; unset for others. - */ - void setCachedAddress(const sockaddr* addr, socklen_t len); - - protected: - /** connect, called by open */ - void openConnection(struct addrinfo *res); - - /** Host to connect to */ - std::string host_; - - /** Peer hostname */ - std::string peerHost_; - - /** Peer address */ - std::string peerAddressStr_; - - /** Port number to connect on */ - int port_; - - /** Underlying UNIX socket handle */ - int socket_; - - /** Socket Options Helper */ - Options options_; - - /** Recv EGAIN retries */ - int maxRecvRetries_; - - /** Cached peer address */ - TSocketAddress cachedPeerAddr_; - - /** Connection start time */ - timespec startTime_; - - /** Whether to use low minimum TCP retransmission timeout */ - static bool useLowMinRto_; -}; - -std::ostream& operator<<(std::ostream& os, const TSocket::Options& o); - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TSOCKET_H_ - diff --git a/thrift/lib/cpp/transport/TSocketAddress.h b/thrift/lib/cpp/transport/TSocketAddress.h deleted file mode 100644 index a1ad514cc1..0000000000 --- a/thrift/lib/cpp/transport/TSocketAddress.h +++ /dev/null @@ -1,646 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_TRANSPORT_TSOCKETADDRESS_H_ -#define THRIFT_TRANSPORT_TSOCKETADDRESS_H_ 1 - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace apache { namespace thrift { namespace transport { - -class TSocketAddress { - public: - TSocketAddress() { - storage_.addr.sa_family = AF_UNSPEC; - } - - /** - * Construct a TSocketAddress from a hostname and port. - * - * Note: If the host parameter is not a numeric IP address, hostname - * resolution will be performed, which can be quite slow. - * - * Raises TTransportException on error. - * - * @param host The IP address (or hostname, if allowNameLookup is true) - * @param port The port (in host byte order) - * @pram allowNameLookup If true, attempt to perform hostname lookup - * if the hostname does not appear to be a numeric IP address. - * This is potentially a very slow operation, so is disabled by - * default. - */ - TSocketAddress(const char* host, uint16_t port, - bool allowNameLookup = false) { - // Initialize the address family first, - // since setFromHostPort() and setFromIpPort() will check it. - storage_.addr.sa_family = AF_UNSPEC; - - if (allowNameLookup) { - setFromHostPort(host, port); - } else { - setFromIpPort(host, port); - } - } - - TSocketAddress(const std::string& host, uint16_t port, - bool allowNameLookup = false) { - // Initialize the address family first, - // since setFromHostPort() and setFromIpPort() will check it. - storage_.addr.sa_family = AF_UNSPEC; - - if (allowNameLookup) { - setFromHostPort(host.c_str(), port); - } else { - setFromIpPort(host.c_str(), port); - } - } - - TSocketAddress(const TSocketAddress& addr) { - storage_ = addr.storage_; - if (addr.getFamily() == AF_UNIX) { - storage_.un.init(addr.storage_.un); - } - } - - TSocketAddress& operator=(const TSocketAddress& addr) { - if (getFamily() != AF_UNIX) { - if (addr.getFamily() != AF_UNIX) { - storage_ = addr.storage_; - } else { - storage_ = addr.storage_; - storage_.un.init(addr.storage_.un); - } - } else { - if (addr.getFamily() == AF_UNIX) { - storage_.un.copy(addr.storage_.un); - } else { - storage_.un.free(); - storage_ = addr.storage_; - } - } - return *this; - } - -#if __GXX_EXPERIMENTAL_CXX0X__ - TSocketAddress(TSocketAddress&& addr) { - storage_ = addr.storage_; - addr.storage_.addr.sa_family = AF_UNSPEC; - } - -#if __GNUC_PREREQ(4, 5) - TSocketAddress& operator=(TSocketAddress&& addr) { - std::swap(storage_, addr.storage_); - return *this; - } -#endif -#endif - - ~TSocketAddress() { - if (storage_.addr.sa_family == AF_UNIX) { - storage_.un.free(); - } - } - - bool isInitialized() const { - return (storage_.addr.sa_family != AF_UNSPEC); - } - - /** - * Return whether this address is within private network. - * - * According to RFC1918, the 10/8 prefix, 172.16/12 prefix, and 192.168/16 - * prefix are reserved for private networks. - * fc00::/7 is the IPv6 version, defined in RFC4139. IPv6 link-local - * addresses (fe80::/10) are also considered private addresses. - * - * The loopback addresses 127/8 and ::1 are also regarded as private networks - * for the purpose of this function. - * - * Returns true if this is a private network address, and false otherwise. - */ - bool isPrivateAddress() const; - - /** - * Return whether this address is a loopback address. - */ - bool isLoopbackAddress() const; - - void reset() { - prepFamilyChange(AF_UNSPEC); - storage_.addr.sa_family = AF_UNSPEC; - } - - /** - * Initialize this TSocketAddress from a hostname and port. - * - * Note: If the host parameter is not a numeric IP address, hostname - * resolution will be performed, which can be quite slow. - * - * If the hostname resolves to multiple addresses, only the first will be - * returned. - * - * Raises TTransportException on error. - * - * @param host The hostname or IP address - * @param port The port (in host byte order) - */ - void setFromHostPort(const char* host, uint16_t port); - - void setFromHostPort(const std::string& host, uint16_t port) { - setFromHostPort(host.c_str(), port); - } - - /** - * Initialize this TSocketAddress from an IP address and port. - * - * This is similar to setFromHostPort(), but only accepts numeric IP - * addresses. If the IP string does not look like an IP address, it throws a - * TTransportException rather than trying to perform a hostname resolution. - * - * Raises TTransportException on error. - * - * @param ip The IP address, as a human-readable string. - * @param port The port (in host byte order) - */ - void setFromIpPort(const char* ip, uint16_t port); - - void setFromIpPort(const std::string& ip, uint16_t port) { - setFromIpPort(ip.c_str(), port); - } - - /** - * Initialize this TSocketAddress from a local port number. - * - * This is intended to be used by server code to determine the address to - * listen on. - * - * If the current machine has any IPv6 addresses configured, an IPv6 address - * will be returned (since connections from IPv4 clients can be mapped to the - * IPv6 address). If the machine does not have any IPv6 addresses, an IPv4 - * address will be returned. - */ - void setFromLocalPort(uint16_t port); - - /** - * Initialize this TSocketAddress from a local port number. - * - * This version of setFromLocalPort() accepts the port as a string. A - * TTransportException will be raised if the string does not refer to a port - * number. Non-numeric service port names are not accepted. - */ - void setFromLocalPort(const char* port); - void setFromLocalPort(const std::string& port) { - return setFromLocalPort(port.c_str()); - } - - /** - * Initialize this TSocketAddress from a local port number and optional IP - * address. - * - * The addressAndPort string may be specified either as ":", or - * just as "". If the IP is not specified, the address will be - * initialized to 0, so that a server socket bound to this address will - * accept connections on all local IP addresses. - * - * Both the IP address and port number must be numeric. DNS host names and - * non-numeric service port names are not accepted. - */ - void setFromLocalIpPort(const char* addressAndPort); - void setFromLocalIpPort(const std::string& addressAndPort) { - return setFromLocalIpPort(addressAndPort.c_str()); - } - - /** - * Initialize this TSocketAddress from an IP address and port number. - * - * The addressAndPort string must be of the form ":". E.g., - * "10.0.0.1:1234". - * - * Both the IP address and port number must be numeric. DNS host names and - * non-numeric service port names are not accepted. - */ - void setFromIpPort(const char* addressAndPort); - void setFromIpPort(const std::string& addressAndPort) { - return setFromIpPort(addressAndPort.c_str()); - } - - /** - * Initialize this TSocketAddress from a host name and port number. - * - * The addressAndPort string must be of the form ":". E.g., - * "www.facebook.com:443". - * - * If the host name is not a numeric IP address, a DNS lookup will be - * performed. Beware that the DNS lookup may be very slow. The port number - * must be numeric; non-numeric service port names are not accepted. - */ - void setFromHostPort(const char* hostAndPort); - void setFromHostPort(const std::string& hostAndPort) { - return setFromHostPort(hostAndPort.c_str()); - } - - /** - * Initialize this TSocketAddress from a local unix path. - * - * Raises TTransportException on error. - */ - void setFromPath(const char* path) { - setFromPath(path, strlen(path)); - } - - void setFromPath(const std::string& path) { - setFromPath(path.data(), path.length()); - } - - void setFromPath(const char* path, size_t length); - - /** - * Initialize this TSocketAddress from a socket's peer address. - * - * Raises TTransportException on error. - */ - void setFromPeerAddress(int socket); - - /** - * Initialize this TSocketAddress from a socket's local address. - * - * Raises TTransportException on error. - */ - void setFromLocalAddress(int socket); - - /** - * Initialize this TSocketAddress from a struct sockaddr. - * - * Raises TTransportException on error. - * - * This method is not supported for AF_UNIX addresses. For unix addresses, - * the address length must be explicitly specified. - * - * @param address A struct sockaddr. The size of the address is implied - * from address->sa_family. - */ - void setFromSockaddr(const struct sockaddr* address); - - /** - * Initialize this TSocketAddress from a struct sockaddr. - * - * Raises TTransportException on error. - * - * @param address A struct sockaddr. - * @param addrlen The length of address data available. This must be long - * enough for the full address type required by - * address->sa_family. - */ - void setFromSockaddr(const struct sockaddr* address, - socklen_t addrlen); - - /** - * Initialize this TSocketAddress from a struct sockaddr_in. - */ - void setFromSockaddr(const struct sockaddr_in* address); - - /** - * Initialize this TSocketAddress from a struct sockaddr_in6. - */ - void setFromSockaddr(const struct sockaddr_in6* address); - - /** - * Initialize this TSocketAddress from a struct sockaddr_un. - * - * Note that the addrlen parameter is necessary to properly detect anonymous - * addresses, which have 0 valid path bytes, and may not even have a NUL - * character at the start of the path. - * - * @param address A struct sockaddr_un. - * @param addrlen The length of address data. This should include all of - * the valid bytes of sun_path, not including any NUL - * terminator. - */ - void setFromSockaddr(const struct sockaddr_un* address, - socklen_t addrlen); - - /** - * Get a pointer to the struct sockaddr data that can be used for manually - * modifying the data. - * - * addressUpdated() must be called after you finish modifying the socket data - * before you perform any other operations on the TSocketAddress. - * - * For example, to use this to store the address returned by an accept() - * call: - * - * socklen_t addrlen; - * struct sockaddr *storage = addr.getMutableAddress(AF_INET, &addrlen); - * int newSock = accept(sock, storage, &addrlen); - * if (newSock < 0) { - * // error handling - * } - * addr.addressUpdated(AF_INET, addrlen); - * - * @param family The type of address data you plan to put in the - * sockaddr. This is necessary since some address families - * require more storage than others. - * @param sizeReturn The length of the returned sockaddr will be returned via - * this argument. - */ - struct sockaddr* getMutableAddress(sa_family_t family, - socklen_t *sizeReturn); - - /** - * Indicate that the address data was updated after a call to - * getMutableAddress(). - * - * @param expectedFamily This must be the same value that you passed to - * the getMutableAddress() call. This is used to - * verify that the address data written into the - * sockaddr is actually of the same type that you - * specified when you called getMutableAddress(). - * @param addrlen The length of the new address data written into the - * sockaddr. - */ - void addressUpdated(sa_family_t expectedFamily, socklen_t addrlen) { - if (getFamily() != expectedFamily) { - // This should pretty much never happen. - addressUpdateFailure(expectedFamily); - } - if (getFamily() == AF_UNIX) { - updateUnixAddressLength(addrlen); - } - } - - const struct sockaddr* getAddress() const { - if (getFamily() != AF_UNIX) { - return &storage_.addr; - } else { - return reinterpret_cast(storage_.un.addr); - } - } - - /** - * Return the total number of bytes available for address storage. - */ - socklen_t getStorageSize() const { - if (getFamily() != AF_UNIX) { - return sizeof(storage_); - } else { - return sizeof(*storage_.un.addr); - } - } - - /** - * Return the number of bytes actually used for this address. - * - * For an uninitialized socket, this returns sizeof(struct sockaddr), - * even though some of those bytes may not be initialized. - */ - socklen_t getActualSize() const; - - sa_family_t getFamily() const { - return storage_.addr.sa_family; - } - - /** - * Get a string representation of the IPv4 or IPv6 address. - * - * Raises TTransportException if an error occurs (for example, if the address - * is not an IPv4 or IPv6 address). - */ - std::string getAddressStr() const; - - /** - * Get a string representation of the IPv4 or IPv6 address. - * - * Raises TTransportException if an error occurs (for example, if the address - * is not an IPv4 or IPv6 address). - */ - void getAddressStr(char* buf, size_t buflen) const; - - /** - * Get the IPv4 or IPv6 port for this address. - * - * Raises TTransportException if this is not an IPv4 or IPv6 address. - * - * @return Returns the port, in host byte order. - */ - uint16_t getPort() const; - - /** - * Set the IPv4 or IPv6 port for this address. - * - * Raises TTransportException if this is not an IPv4 or IPv6 address. - */ - void setPort(uint16_t port); - - /** - * Return true if this is an IPv4-mapped IPv6 address. - */ - bool isIPv4Mapped() const { - return (storage_.addr.sa_family == AF_INET6 && - IN6_IS_ADDR_V4MAPPED(&storage_.ipv6.sin6_addr)); - } - - /** - * Convert an IPv4-mapped IPv6 address to an IPv4 address. - * - * Raises TTransportException if this is not an IPv4-mapped IPv6 address. - */ - void convertToIPv4(); - - /** - * Try to convert an address to IPv4. - * - * This attempts to convert an address to an IPv4 address if possible. - * If the address is an IPv4-mapped IPv6 address, it is converted to an IPv4 - * address and true is returned. Otherwise nothing is done, and false is - * returned. - */ - bool tryConvertToIPv4(); - - /** - * Get string representation of the host name (or IP address if the host name - * cannot be resolved). - * - * Warning: Using this method is strongly discouraged. It performs a - * DNS lookup, which may block for many seconds. - * - * Raises TTransportException if an error occurs. - */ - std::string getHostStr() const; - - /** - * Get the path name for a Unix domain socket. - * - * Returns a std::string containing the path. For anonymous sockets, an - * empty string is returned. - * - * For addresses in the abstract namespace (Linux-specific), a std::string - * containing binary data is returned. In this case the first character will - * always be a NUL character. - * - * Raises TTransportException if called on a non-Unix domain socket. - */ - std::string getPath() const; - - /** - * Get human-readable string representation of the address. - * - * This prints a string representation of the address, for human consumption. - * For IP addresses, the string is of the form ":". - */ - std::string describe() const; - - bool operator==(const TSocketAddress& other) const; - bool operator!=(const TSocketAddress& other) const { - return !(*this == other); - } - - /** - * Check whether the first N bits of this address match the first N - * bits of another address. - * @note returns false if the addresses are not from the same - * address family or if the family is neither IPv4 nor IPv6 - */ - bool prefixMatch(const TSocketAddress& other, unsigned prefixLength) const; - - /** - * Use this operator for storing maps based on TSocketAddress. - */ - bool operator<(const TSocketAddress& other) const; - - /** - * Compuate a hash of a TSocketAddress. - */ - size_t hash() const; - - private: - /** - * Unix socket addresses require more storage than IPv4 and IPv6 addresses, - * and are comparatively little-used. - * - * Therefore TSocketAddress' internal storage_ member variable doesn't - * contain room for a full unix address, to avoid wasting space in the common - * case. When we do need to store a Unix socket address, we use this - * ExternalUnixAddr structure to allocate a struct sockaddr_un separately on - * the heap. - */ - struct ExternalUnixAddr { - sa_family_t family; - struct sockaddr_un *addr; - socklen_t len; - - socklen_t pathLength() const { - return len - offsetof(struct sockaddr_un, sun_path); - } - - void init() { - family = AF_UNIX; - addr = new sockaddr_un; - addr->sun_family = AF_UNIX; - len = 0; - } - void init(const ExternalUnixAddr &other) { - family = AF_UNIX; - addr = new sockaddr_un; - len = other.len; - memcpy(addr, other.addr, len); - // Fill the rest with 0s, just for safety - memset(reinterpret_cast(addr) + len, 0, - sizeof(struct sockaddr_un) - len); - } - void copy(const ExternalUnixAddr &other) { - len = other.len; - memcpy(addr, other.addr, len); - } - void free() { - family = AF_UNSPEC; - delete addr; - } - }; - - struct addrinfo* getAddrInfo(const char* host, uint16_t port, int flags); - struct addrinfo* getAddrInfo(const char* host, const char* port, int flags); - void setFromAddrInfo(const struct addrinfo* results); - void setFromLocalAddr(const struct addrinfo* results); - int setFromSocket(int socket, int (*fn)(int, struct sockaddr*, socklen_t*)); - std::string getIpString(int flags) const; - void getIpString(char *buf, size_t buflen, int flags) const; - - void addressUpdateFailure(sa_family_t expectedFamily); - void updateUnixAddressLength(socklen_t addrlen); - - void prepFamilyChange(sa_family_t newFamily) { - if (newFamily != AF_UNIX) { - if (getFamily() == AF_UNIX) { - storage_.un.free(); - } - } else { - if (getFamily() != AF_UNIX) { - storage_.un.init(); - } - } - } - - /* - * storage_ contains room for a full IPv4 or IPv6 address, so they can be - * stored inline without a separate allocation on the heap. - * - * If we need to store a Unix socket address, ExternalUnixAddr is a shim to - * track a struct sockaddr_un allocated separately on the heap. - */ - union { - sockaddr addr; - sockaddr_in ipv4; - sockaddr_in6 ipv6; - ExternalUnixAddr un; - } storage_; -}; - -/** - * Hash a TSocketAddress object. - * - * boost::hash uses hash_value(), so this allows boost::hash to automatically - * work for TSocketAddress. - */ -size_t hash_value(const TSocketAddress& address); - -std::ostream& operator<<(std::ostream& os, const TSocketAddress& addr); - -}}} // apache::thrift::transport - -namespace std { - -// Provide an implementation for std::hash -template<> -struct hash { - size_t operator()( - const apache::thrift::transport::TSocketAddress& addr) const { - return addr.hash(); - } -}; - -} - -#endif // THRIFT_TRANSPORT_TSOCKETADDRESS_H_ diff --git a/thrift/lib/cpp/transport/TSocketPool.h b/thrift/lib/cpp/transport/TSocketPool.h deleted file mode 100644 index b2f9ee79f7..0000000000 --- a/thrift/lib/cpp/transport/TSocketPool.h +++ /dev/null @@ -1,218 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_TSOCKETPOOL_H_ -#define THRIFT_TRANSPORT_TSOCKETPOOL_H_ 1 - -#include -#include -#include "thrift/lib/cpp/transport/TSocket.h" - -namespace apache { namespace thrift { namespace transport { - - /** - * Class to hold server information for TSocketPool - * - */ -class TSocketPoolServer { - - public: - /** - * Default constructor for server info - */ - TSocketPoolServer(); - - /** - * Constructor for TSocketPool server - */ - TSocketPoolServer(const std::string &host, int port); - - // Host name - std::string host_; - - // Port to connect on - int port_; - - // Socket for the server - int socket_; - - // Last time connecting to this server failed - int lastFailTime_; - - // Number of consecutive times connecting to this server failed - int consecutiveFailures_; -}; - -/** - * TCP Socket implementation of the TTransport interface. - * - */ -class TSocketPool : public TSocket { - - public: - - /** - * Socket pool constructor - */ - TSocketPool(); - - /** - * Socket pool constructor - * - * @param hosts list of host names - * @param ports list of port names - */ - TSocketPool(const std::vector &hosts, - const std::vector &ports); - - /** - * Socket pool constructor - * - * @param servers list of pairs of host name and port - */ - /* implicit */ - TSocketPool(const std::vector >& servers); - - /** - * Socket pool constructor - * - * @param servers list of TSocketPoolServers - */ - /* implicit */ - TSocketPool(const - std::vector< boost::shared_ptr >& servers); - - /** - * Socket pool constructor - * - * @param host single host - * @param port single port - */ - TSocketPool(const std::string& host, int port); - - /** - * Destroys the socket object, closing it if necessary. - */ - virtual ~TSocketPool(); - - /** - * Add a server to the pool - */ - void addServer(const std::string& host, int port); - - /** - * Add a server to the pool - */ - void addServer(boost::shared_ptr &server); - - /** - * Set list of servers in this pool - */ - void setServers(const std::vector< boost::shared_ptr >& servers); - - /** - * Get list of servers in this pool - */ - void getServers(std::vector< boost::shared_ptr >& servers); - - /** - * Get port of the current server - */ - int getCurrentServerPort(); - - /** - * Get host of the current server - */ - std::string getCurrentServerHost(); - - /** - * Sets how many times to keep retrying a host in the connect function. - */ - void setNumRetries(int numRetries); - - /** - * Sets how long to wait until retrying a host if it was marked down - */ - void setRetryInterval(int retryInterval); - - /** - * Sets how many times to keep retrying a host before marking it as down. - */ - void setMaxConsecutiveFailures(int maxConsecutiveFailures); - - /** - * Turns randomization in connect order on or off. - */ - void setRandomize(bool randomize); - - /** - * Whether to always try the last server. - */ - void setAlwaysTryLast(bool alwaysTryLast); - - /** - * Sets the max number of servers to try in open - */ - void setMaxServersToTry(unsigned int maxServersToTry); - - /** - * Creates and opens the UNIX socket. - */ - void open(); - - /* - * Closes the UNIX socket - */ - void close(); - - protected: - - void setCurrentServer(const boost::shared_ptr &server); - - /** List of servers to connect to */ - std::vector< boost::shared_ptr > servers_; - - /** Current server */ - boost::shared_ptr currentServer_; - - /** How many times to retry each host in connect */ - int numRetries_; - - /** Retry interval in seconds, how long to not try a host if it has been - * marked as down. - */ - int retryInterval_; - - /** Max consecutive failures before marking a host down. */ - int maxConsecutiveFailures_; - - /** Try hosts in order? or Randomized? */ - bool randomize_; - - /** Always try last host, even if marked down? */ - bool alwaysTryLast_; - - /** Number of servers to try in open(), default is UINT_MAX */ - unsigned int maxServersToTry_; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TSOCKETPOOL_H_ - diff --git a/thrift/lib/cpp/transport/TTransport.h b/thrift/lib/cpp/transport/TTransport.h deleted file mode 100644 index 5dadfda263..0000000000 --- a/thrift/lib/cpp/transport/TTransport.h +++ /dev/null @@ -1,353 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_TRANSPORT_TTRANSPORT_H -#define THRIFT_TRANSPORT_TTRANSPORT_H 1 - -#include "thrift/lib/cpp/Thrift.h" -#include -#include "thrift/lib/cpp/transport/TTransportException.h" -#include - -namespace apache { namespace thrift { namespace transport { - -/** - * Helper template to hoist readAll implementation out of TTransport - */ -template -uint32_t readAll(Transport_ &trans, uint8_t* buf, uint32_t len) { - uint32_t have = 0; - uint32_t get = 0; - - while (have < len) { - get = trans.read(buf+have, len-have); - if (get <= 0) { - throw TTransportException(TTransportException::END_OF_FILE, - "No more data to read."); - } - have += get; - } - - return have; -} - - -/** - * Generic interface for a method of transporting data. A TTransport may be - * capable of either reading or writing, but not necessarily both. - * - */ -class TTransport { - public: - /** - * Virtual deconstructor. - */ - virtual ~TTransport() {} - - /** - * Whether this transport is open. - */ - virtual bool isOpen() { - return false; - } - - /** - * Tests whether there is more data to read or if the remote side is - * still open. By default this is true whenever the transport is open, - * but implementations should add logic to test for this condition where - * possible (i.e. on a socket). - * This is used by a server to check if it should listen for another - * request. - */ - virtual bool peek() { - return isOpen(); - } - - /** - * Opens the transport for communications. - * - * @return bool Whether the transport was successfully opened - * @throws TTransportException if opening failed - */ - virtual void open() { - throw TTransportException(TTransportException::NOT_OPEN, "Cannot open base TTransport."); - } - - /** - * Closes the transport. - */ - virtual void close() { - throw TTransportException(TTransportException::NOT_OPEN, "Cannot close base TTransport."); - } - - /** - * Attempt to read up to the specified number of bytes into the string. - * - * @param buf Reference to the location to write the data - * @param len How many bytes to read - * @return How many bytes were actually read - * @throws TTransportException If an error occurs - */ - uint32_t read(uint8_t* buf, uint32_t len) { - T_VIRTUAL_CALL(); - return read_virt(buf, len); - } - virtual uint32_t read_virt(uint8_t* /* buf */, uint32_t /* len */) { - throw TTransportException(TTransportException::NOT_OPEN, - "Base TTransport cannot read."); - } - - /** - * Reads the given amount of data in its entirety no matter what. - * - * @param s Reference to location for read data - * @param len How many bytes to read - * @return How many bytes read, which must be equal to size - * @throws TTransportException If insufficient data was read - */ - uint32_t readAll(uint8_t* buf, uint32_t len) { - T_VIRTUAL_CALL(); - return readAll_virt(buf, len); - } - virtual uint32_t readAll_virt(uint8_t* buf, uint32_t len) { - return apache::thrift::transport::readAll(*this, buf, len); - } - - /** - * Called when read is completed. - * This can be over-ridden to perform a transport-specific action - * e.g. logging the request to a file - * - * @return number of bytes read if available, 0 otherwise. - */ - virtual uint32_t readEnd() { - // default behavior is to do nothing - return 0; - } - - /** - * Writes the string in its entirety to the buffer. - * - * Note: You must call flush() to ensure the data is actually written, - * and available to be read back in the future. Destroying a TTransport - * object does not automatically flush pending data--if you destroy a - * TTransport object with written but unflushed data, that data may be - * discarded. - * - * @param buf The data to write out - * @throws TTransportException if an error occurs - */ - void write(const uint8_t* buf, uint32_t len) { - T_VIRTUAL_CALL(); - write_virt(buf, len); - } - virtual void write_virt(const uint8_t* /* buf */, uint32_t /* len */) { - throw TTransportException(TTransportException::NOT_OPEN, - "Base TTransport cannot write."); - } - - /** - * Called when write is completed. - * This can be over-ridden to perform a transport-specific action - * at the end of a request. - * - * @return number of bytes written if available, 0 otherwise - */ - virtual uint32_t writeEnd() { - // default behaviour is to do nothing - return 0; - } - - /** - * Flushes any pending data to be written. Typically used with buffered - * transport mechanisms. - * - * @throws TTransportException if an error occurs - */ - virtual void flush() { - // default behaviour is to do nothing - } - - /** - * Attempts to return a pointer to \c len bytes, possibly copied into \c buf. - * Does not consume the bytes read (i.e.: a later read will return the same - * data). This method is meant to support protocols that need to read - * variable-length fields. They can attempt to borrow the maximum amount of - * data that they will need, then consume (see next method) what they - * actually use. Some transports will not support this method and others - * will fail occasionally, so protocols must be prepared to use read if - * borrow fails. - * - * @oaram buf A buffer where the data can be stored if needed. - * If borrow doesn't return buf, then the contents of - * buf after the call are undefined. This parameter may be - * NULL to indicate that the caller is not supplying storage, - * but would like a pointer into an internal buffer, if - * available. - * @param len *len should initially contain the number of bytes to borrow. - * If borrow succeeds, *len will contain the number of bytes - * available in the returned pointer. This will be at least - * what was requested, but may be more if borrow returns - * a pointer to an internal buffer, rather than buf. - * If borrow fails, the contents of *len are undefined. - * @return If the borrow succeeds, return a pointer to the borrowed data. - * This might be equal to \c buf, or it might be a pointer into - * the transport's internal buffers. - * @throws TTransportException if an error occurs - */ - const uint8_t* borrow(uint8_t* buf, uint32_t* len) { - T_VIRTUAL_CALL(); - return borrow_virt(buf, len); - } - virtual const uint8_t* borrow_virt(uint8_t* /* buf */, uint32_t* /* len */) { - return NULL; - } - - /** - * Remove len bytes from the transport. This should always follow a borrow - * of at least len bytes, and should always succeed. - * TODO(dreiss): Is there any transport that could borrow but fail to - * consume, or that would require a buffer to dump the consumed data? - * - * @param len How many bytes to consume - * @throws TTransportException If an error occurs - */ - void consume(uint32_t len) { - T_VIRTUAL_CALL(); - consume_virt(len); - } - virtual void consume_virt(uint32_t /* len */) { - throw TTransportException(TTransportException::NOT_OPEN, - "Base TTransport cannot consume."); - } - - protected: - /** - * Simple constructor. - */ - TTransport() {} -}; - -/** - * Generic factory class to make an input and output transport out of a - * source transport. Commonly used inside servers to make input and output - * streams out of raw clients. - * - */ -class TTransportFactory { - public: - TTransportFactory() {} - - virtual ~TTransportFactory() {} - - /** - * Default implementation does nothing, just returns the transport given. - */ - virtual boost::shared_ptr getTransport(boost::shared_ptr trans) { - return trans; - } - -}; - -/** - * A duplex transport factory used to make input and output transports in a - * single call. This can be used to ensure the input and output transports - * are the pointers to the same object, for example. - * - * TTransportPair.first = Input Transport - * TTransportPair.second = Output Transport - */ -typedef std::pair, - boost::shared_ptr > TTransportPair; - -class TDuplexTransportFactory { - public: - TDuplexTransportFactory() {} - - virtual ~TDuplexTransportFactory() {} - - virtual TTransportPair getTransport(boost::shared_ptr trans) { - return std::make_pair(trans, trans); - } - - virtual TTransportPair getTransport(TTransportPair transports) { - return std::make_pair(transports.first, transports.second); - } - -}; - -/** - * Adapts a TTransportFactory to a TDuplexTransportFactory that returns - * a new transport object for both input and output - */ -template -class TSingleTransportFactory : public TDuplexTransportFactory { - public: - TSingleTransportFactory() { - factory_.reset(new Factory_()); - } - - explicit TSingleTransportFactory( - boost::shared_ptr factory) : - factory_(factory) {} - - virtual TTransportPair getTransport(boost::shared_ptr trans) { - return std::make_pair(factory_->getTransport(trans), - factory_->getTransport(trans)); - } - - virtual TTransportPair getTransport(TTransportPair transports) { - return std::make_pair(factory_->getTransport(transports.first), - factory_->getTransport(transports.second)); - } - private: - - boost::shared_ptr factory_; -}; - -/** - * Use TDualTransportFactory to construct input and output transports from - * different factories. - */ -class TDualTransportFactory : public TDuplexTransportFactory { - public: - TDualTransportFactory( - boost::shared_ptr inputFactory, - boost::shared_ptr outputFactory) : - inputFactory_(inputFactory), - outputFactory_(outputFactory) {} - - virtual TTransportPair getTransport(boost::shared_ptr trans) { - return std::make_pair(inputFactory_->getTransport(trans), - outputFactory_->getTransport(trans)); - } - - virtual TTransportPair getTransport(TTransportPair transports) { - return std::make_pair(inputFactory_->getTransport(transports.first), - outputFactory_->getTransport(transports.second)); - } - private: - - boost::shared_ptr inputFactory_; - boost::shared_ptr outputFactory_; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef THRIFT_TRANSPORT_TTRANSPORT_H diff --git a/thrift/lib/cpp/transport/TTransportException.h b/thrift/lib/cpp/transport/TTransportException.h deleted file mode 100644 index 28f5d19534..0000000000 --- a/thrift/lib/cpp/transport/TTransportException.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ -#define _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ 1 - -#include -#include "thrift/lib/cpp/Thrift.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * Class to encapsulate all the possible types of transport errors that may - * occur in various transport systems. This provides a sort of generic - * wrapper around the shitty UNIX E_ error codes that lets a common code - * base of error handling to be used for various types of transports, i.e. - * pipes etc. - * - */ -class TTransportException : public apache::thrift::TLibraryException { - public: - /** - * Error codes for the various types of exceptions. - */ - enum TTransportExceptionType - { UNKNOWN = 0 - , NOT_OPEN = 1 - , ALREADY_OPEN = 2 - , TIMED_OUT = 3 - , END_OF_FILE = 4 - , INTERRUPTED = 5 - , BAD_ARGS = 6 - , CORRUPTED_DATA = 7 - , INTERNAL_ERROR = 8 - , NOT_SUPPORTED = 9 - , INVALID_STATE = 10 - , INVALID_FRAME_SIZE = 11 - , SSL_ERROR = 12 - }; - - TTransportException() : - apache::thrift::TLibraryException(), - type_(UNKNOWN), errno_(0) {} - - TTransportException(TTransportExceptionType type) : - apache::thrift::TLibraryException(), - type_(type), errno_(0) {} - - TTransportException(const std::string& message) : - apache::thrift::TLibraryException(message), - type_(UNKNOWN), errno_(0) {} - - TTransportException(TTransportExceptionType type, const std::string& message) : - apache::thrift::TLibraryException(message), - type_(type), errno_(0) {} - - TTransportException(TTransportExceptionType type, - const std::string& message, - int errno_copy) : - apache::thrift::TLibraryException(getMessage(message, errno_copy)), - type_(type), errno_(errno_copy) {} - - virtual ~TTransportException() throw() {} - - /** - * Returns an error code that provides information about the type of error - * that has occurred. - * - * @return Error code - */ - TTransportExceptionType getType() const throw() { - return type_; - } - - virtual const char* what() const throw() { - if (message_.empty()) { - switch (type_) { - case UNKNOWN : return "TTransportException: Unknown transport exception"; - case NOT_OPEN : return "TTransportException: Transport not open"; - case ALREADY_OPEN : return "TTransportException: Transport already open"; - case TIMED_OUT : return "TTransportException: Timed out"; - case END_OF_FILE : return "TTransportException: End of file"; - case INTERRUPTED : return "TTransportException: Interrupted"; - case BAD_ARGS : return "TTransportException: Invalid arguments"; - case CORRUPTED_DATA : return "TTransportException: Corrupted Data"; - case INTERNAL_ERROR : return "TTransportException: Internal error"; - case NOT_SUPPORTED : return "TTransportException: Not supported"; - case INVALID_STATE : return "TTransportException: Invalid state"; - case INVALID_FRAME_SIZE: - return "TTransportException: Invalid frame size"; - case SSL_ERROR : return "TTransportException: SSL error"; - default : return "TTransportException: (Invalid exception type)"; - } - } else { - return message_.c_str(); - } - } - - int getErrno() const { return errno_; } - - protected: - /** Just like strerror_r but returns a C++ string object. */ - std::string strerror_s(int errno_copy); - - /** Return a message based on the input. */ - static std::string getMessage(const std::string &message, - int errno_copy) { - if (errno_copy != 0) { - return message + ": " + TOutput::strerror_s(errno_copy); - } else { - return message; - } - } - - /** Error code */ - TTransportExceptionType type_; - - /** A copy of the errno. */ - int errno_; -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TTRANSPORTEXCEPTION_H_ diff --git a/thrift/lib/cpp/transport/TTransportUtils.h b/thrift/lib/cpp/transport/TTransportUtils.h deleted file mode 100644 index 8dfa4919f1..0000000000 --- a/thrift/lib/cpp/transport/TTransportUtils.h +++ /dev/null @@ -1,330 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TTRANSPORTUTILS_H_ -#define _THRIFT_TRANSPORT_TTRANSPORTUTILS_H_ 1 - -#include -#include -#include -#include -#include "thrift/lib/cpp/transport/TTransport.h" -// Include the buffered transports that used to be defined here. -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/transport/TFileTransport.h" - -namespace apache { namespace thrift { namespace transport { - -/** - * The null transport is a dummy transport that doesn't actually do anything. - * It's sort of an analogy to /dev/null, you can never read anything from it - * and it will let you write anything you want to it, though it won't actually - * go anywhere. - * - */ -class TNullTransport : public TVirtualTransport { - public: - TNullTransport() {} - - ~TNullTransport() {} - - bool isOpen() { - return true; - } - - void open() {} - - void write(const uint8_t* /* buf */, uint32_t /* len */) { - return; - } - -}; - - -/** - * TPipedTransport. This transport allows piping of a request from one - * transport to another either when readEnd() or writeEnd(). The typical - * use case for this is to log a request or a reply to disk. - * The underlying buffer expands to a keep a copy of the entire - * request/response. - * - */ -class TPipedTransport : virtual public TTransport { - public: - TPipedTransport(boost::shared_ptr srcTrans, - boost::shared_ptr dstTrans) : - srcTrans_(srcTrans), - dstTrans_(dstTrans), - rBufSize_(512), rPos_(0), rLen_(0), - wBufSize_(512), wLen_(0) { - - // default is to to pipe the request when readEnd() is called - pipeOnRead_ = true; - pipeOnWrite_ = false; - - rBuf_ = (uint8_t*) std::malloc(sizeof(uint8_t) * rBufSize_); - if (rBuf_ == NULL) { - throw std::bad_alloc(); - } - wBuf_ = (uint8_t*) std::malloc(sizeof(uint8_t) * wBufSize_); - if (wBuf_ == NULL) { - throw std::bad_alloc(); - } - } - - TPipedTransport(boost::shared_ptr srcTrans, - boost::shared_ptr dstTrans, - uint32_t sz) : - srcTrans_(srcTrans), - dstTrans_(dstTrans), - rBufSize_(512), rPos_(0), rLen_(0), - wBufSize_(sz), wLen_(0) { - - rBuf_ = (uint8_t*) std::malloc(sizeof(uint8_t) * rBufSize_); - if (rBuf_ == NULL) { - throw std::bad_alloc(); - } - wBuf_ = (uint8_t*) std::malloc(sizeof(uint8_t) * wBufSize_); - if (wBuf_ == NULL) { - throw std::bad_alloc(); - } - } - - ~TPipedTransport() { - std::free(rBuf_); - std::free(wBuf_); - } - - bool isOpen() { - return srcTrans_->isOpen(); - } - - bool peek() { - if (rPos_ >= rLen_) { - // Double the size of the underlying buffer if it is full - if (rLen_ == rBufSize_) { - rBufSize_ *=2; - rBuf_ = (uint8_t *)std::realloc(rBuf_, sizeof(uint8_t) * rBufSize_); - } - - // try to fill up the buffer - rLen_ += srcTrans_->read(rBuf_+rPos_, rBufSize_ - rPos_); - } - return (rLen_ > rPos_); - } - - - void open() { - srcTrans_->open(); - } - - void close() { - srcTrans_->close(); - } - - void setPipeOnRead(bool pipeVal) { - pipeOnRead_ = pipeVal; - } - - void setPipeOnWrite(bool pipeVal) { - pipeOnWrite_ = pipeVal; - } - - uint32_t read(uint8_t* buf, uint32_t len); - - uint32_t readEnd() { - - if (pipeOnRead_) { - dstTrans_->write(rBuf_, rPos_); - dstTrans_->flush(); - } - - srcTrans_->readEnd(); - - // If requests are being pipelined, copy down our read-ahead data, - // then reset our state. - int read_ahead = rLen_ - rPos_; - uint32_t bytes = rPos_; - memcpy(rBuf_, rBuf_ + rPos_, read_ahead); - rPos_ = 0; - rLen_ = read_ahead; - - return bytes; - } - - void write(const uint8_t* buf, uint32_t len); - - uint32_t writeEnd() { - if (pipeOnWrite_) { - dstTrans_->write(wBuf_, wLen_); - dstTrans_->flush(); - } - return wLen_; - } - - void flush(); - - boost::shared_ptr getTargetTransport() { - return dstTrans_; - } - - /* - * Override TTransport *_virt() functions to invoke our implementations. - * We cannot use TVirtualTransport to provide these, since we need to inherit - * virtually from TTransport. - */ - virtual uint32_t read_virt(uint8_t* buf, uint32_t len) { - return this->read(buf, len); - } - virtual void write_virt(const uint8_t* buf, uint32_t len) { - this->write(buf, len); - } - - protected: - boost::shared_ptr srcTrans_; - boost::shared_ptr dstTrans_; - - uint8_t* rBuf_; - uint32_t rBufSize_; - uint32_t rPos_; - uint32_t rLen_; - - uint8_t* wBuf_; - uint32_t wBufSize_; - uint32_t wLen_; - - bool pipeOnRead_; - bool pipeOnWrite_; -}; - - -/** - * Wraps a transport into a pipedTransport instance. - * - */ -class TPipedTransportFactory : public TTransportFactory { - public: - TPipedTransportFactory() {} - TPipedTransportFactory(boost::shared_ptr dstTrans) { - initializeTargetTransport(dstTrans); - } - virtual ~TPipedTransportFactory() {} - - /** - * Wraps the base transport into a piped transport. - */ - virtual boost::shared_ptr getTransport(boost::shared_ptr srcTrans) { - return boost::shared_ptr(new TPipedTransport(srcTrans, dstTrans_)); - } - - virtual void initializeTargetTransport(boost::shared_ptr dstTrans) { - if (dstTrans_.get() == NULL) { - dstTrans_ = dstTrans; - } else { - throw TLibraryException("Target transport already initialized"); - } - } - - protected: - boost::shared_ptr dstTrans_; -}; - -/** - * TPipedFileTransport. This is just like a TTransport, except that - * it is a templatized class, so that clients who rely on a specific - * TTransport can still access the original transport. - * - */ -class TPipedFileReaderTransport : public TPipedTransport, - public TFileReaderTransport { - public: - TPipedFileReaderTransport(boost::shared_ptr srcTrans, boost::shared_ptr dstTrans); - - ~TPipedFileReaderTransport(); - - // TTransport functions - bool isOpen(); - bool peek(); - void open(); - void close(); - uint32_t read(uint8_t* buf, uint32_t len); - uint32_t readAll(uint8_t* buf, uint32_t len); - uint32_t readEnd(); - void write(const uint8_t* buf, uint32_t len); - uint32_t writeEnd(); - void flush(); - - // TFileReaderTransport functions - int32_t getReadTimeout(); - void setReadTimeout(int32_t readTimeout); - uint32_t getNumChunks(); - uint32_t getCurChunk(); - void seekToChunk(int32_t chunk); - void seekToEnd(); - - /* - * Override TTransport *_virt() functions to invoke our implementations. - * We cannot use TVirtualTransport to provide these, since we need to inherit - * virtually from TTransport. - */ - virtual uint32_t read_virt(uint8_t* buf, uint32_t len) { - return this->read(buf, len); - } - virtual uint32_t readAll_virt(uint8_t* buf, uint32_t len) { - return this->readAll(buf, len); - } - virtual void write_virt(const uint8_t* buf, uint32_t len) { - this->write(buf, len); - } - - protected: - // shouldn't be used - TPipedFileReaderTransport(); - boost::shared_ptr srcTrans_; -}; - -/** - * Creates a TPipedFileReaderTransport from a filepath and a destination transport - * - */ -class TPipedFileReaderTransportFactory : public TPipedTransportFactory { - public: - TPipedFileReaderTransportFactory() {} - TPipedFileReaderTransportFactory(boost::shared_ptr dstTrans) - : TPipedTransportFactory(dstTrans) - {} - virtual ~TPipedFileReaderTransportFactory() {} - - boost::shared_ptr getTransport(boost::shared_ptr srcTrans) { - boost::shared_ptr pFileReaderTransport = boost::dynamic_pointer_cast(srcTrans); - if (pFileReaderTransport.get() != NULL) { - return getFileReaderTransport(pFileReaderTransport); - } else { - return boost::shared_ptr(); - } - } - - boost::shared_ptr getFileReaderTransport(boost::shared_ptr srcTrans) { - return boost::shared_ptr(new TPipedFileReaderTransport(srcTrans, dstTrans_)); - } -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TTRANSPORTUTILS_H_ diff --git a/thrift/lib/cpp/transport/TVirtualTransport.h b/thrift/lib/cpp/transport/TVirtualTransport.h deleted file mode 100644 index 26ab13a8b5..0000000000 --- a/thrift/lib/cpp/transport/TVirtualTransport.h +++ /dev/null @@ -1,134 +0,0 @@ -// Copyright (c) 2006- Facebook -// Distributed under the Thrift Software License -// -// See accompanying file LICENSE or visit the Thrift site at: -// http://developers.facebook.com/thrift/ - -#ifndef _THRIFT_TRANSPORT_TVIRTUALTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TVIRTUALTRANSPORT_H_ 1 - -#include "thrift/lib/cpp/transport/TTransport.h" - -namespace apache { namespace thrift { namespace transport { - - -/** - * Helper class that provides default implementations of TTransport methods. - * - * This class provides default implementations of read(), readAll(), write(), - * borrow() and consume(). - * - * In the TTransport base class, each of these methods simply invokes its - * virtual counterpart. This class overrides them to always perform the - * default behavior, without a virtual function call. - * - * The primary purpose of this class is to serve as a base class for - * TVirtualTransport, and prevent infinite recursion if one of its subclasses - * does not override the TTransport implementation of these methods. (Since - * TVirtualTransport::read_virt() calls read(), and TTransport::read() calls - * read_virt().) - */ -template -class TTransportDefaults : public Super_ { - public: - /* - * TTransport *_virt() methods provide reasonable default implementations. - * Invoke them non-virtually. - */ - uint32_t read(uint8_t* buf, uint32_t len) { - return this->TTransport::read_virt(buf, len); - } - uint32_t readAll(uint8_t* buf, uint32_t len) { - return this->TTransport::readAll_virt(buf, len); - } - void write(const uint8_t* buf, uint32_t len) { - this->TTransport::write_virt(buf, len); - } - const uint8_t* borrow(uint8_t* buf, uint32_t* len) { - return this->TTransport::borrow_virt(buf, len); - } - void consume(uint32_t len) { - this->TTransport::consume_virt(len); - } - - protected: - TTransportDefaults() {} -}; - -/** - * Helper class to provide polymorphism for subclasses of TTransport. - * - * This class implements *_virt() methods of TTransport, to call the - * non-virtual versions of these functions in the proper subclass. - * - * To define your own transport class using TVirtualTransport: - * 1) Derive your subclass from TVirtualTransport - * e.g: class MyTransport : public TVirtualTransport { - * 2) Provide your own implementations of read(), readAll(), etc. - * These methods should be non-virtual. - * - * Transport implementations that need to use virtual inheritance when - * inheriting from TTransport cannot use TVirtualTransport. - * - * @author Chad Walters - */ -template < class Transport_, class Super_=TTransportDefaults > -class TVirtualTransport : public Super_ { - public: - /* - * Implementations of the *_virt() functions, to call the subclass's - * non-virtual implementation function. - */ - virtual uint32_t read_virt(uint8_t* buf, uint32_t len) { - return static_cast(this)->read(buf, len); - } - - virtual uint32_t readAll_virt(uint8_t* buf, uint32_t len) { - return static_cast(this)->readAll(buf, len); - } - - virtual void write_virt(const uint8_t* buf, uint32_t len) { - static_cast(this)->write(buf, len); - } - - virtual const uint8_t* borrow_virt(uint8_t* buf, uint32_t* len) { - return static_cast(this)->borrow(buf, len); - } - - virtual void consume_virt(uint32_t len) { - static_cast(this)->consume(len); - } - - /* - * Provide a default readAll() implementation that invokes - * read() non-virtually. - * - * Note: subclasses that use TVirtualTransport to derive from another - * transport implementation (i.e., not TTransportDefaults) should beware that - * this may override any non-default readAll() implementation provided by - * the parent transport class. They may need to redefine readAll() to call - * the correct parent implementation, if desired. - */ - uint32_t readAll(uint8_t* buf, uint32_t len) { - Transport_* trans = static_cast(this); - return ::apache::thrift::transport::readAll(*trans, buf, len); - } - - protected: - TVirtualTransport() {} - - /* - * Templatized constructors, to allow arguments to be passed to the Super_ - * constructor. Currently we only support 0, 1, or 2 arguments, but - * additional versions can be added as needed. - */ - template - TVirtualTransport(Arg_ const& arg) : Super_(arg) { } - - template - TVirtualTransport(Arg1_ const& a1, Arg2_ const& a2) : Super_(a1, a2) { } -}; - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TVIRTUALTRANSPORT_H_ diff --git a/thrift/lib/cpp/transport/TZlibTransport.h b/thrift/lib/cpp/transport/TZlibTransport.h deleted file mode 100644 index 01cfb38bfb..0000000000 --- a/thrift/lib/cpp/transport/TZlibTransport.h +++ /dev/null @@ -1,292 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef _THRIFT_TRANSPORT_TZLIBTRANSPORT_H_ -#define _THRIFT_TRANSPORT_TZLIBTRANSPORT_H_ 1 - -#include -#include "thrift/lib/cpp/transport/TBufferTransports.h" -#include "thrift/lib/cpp/transport/TVirtualTransport.h" - -struct z_stream_s; - -namespace apache { namespace thrift { namespace transport { - -class TZlibTransportException : public TTransportException { - public: - TZlibTransportException(int status, const char* msg) : - TTransportException(TTransportException::INTERNAL_ERROR, - errorMessage(status, msg)), - zlib_status_(status), - zlib_msg_(msg == NULL ? "(null)" : msg) {} - - virtual ~TZlibTransportException() throw() {} - - int getZlibStatus() { return zlib_status_; } - std::string getZlibMessage() { return zlib_msg_; } - - static std::string errorMessage(int status, const char* msg) { - std::string rv = "zlib error: "; - if (msg) { - rv += msg; - } else { - rv += "(no message)"; - } - rv += " (status = "; - rv += boost::lexical_cast(status); - rv += ")"; - return rv; - } - - int zlib_status_; - std::string zlib_msg_; -}; - -/** - * This transport uses zlib's compressed format on the "far" side. - * - * There are two kinds of TZlibTransport objects: - * - Standalone objects are used to encode self-contained chunks of data - * (like structures). They include checksums. - * - Non-standalone transports are used for RPC. They are not implemented yet. - * - * TODO(dreiss): Don't do an extra copy of the compressed data if - * the underlying transport is TBuffered or TMemory. - * - */ -class TZlibTransport : public TVirtualTransport { - public: - - /** - * @param transport The transport to read compressed data from - * and write compressed data to. - * @param urbuf_size Uncompressed buffer size for reading. - * @param crbuf_size Compressed buffer size for reading. - * @param uwbuf_size Uncompressed buffer size for writing. - * @param cwbuf_size Compressed buffer size for writing. - * - * TODO(dreiss): Write a constructor that isn't a pain. - */ - TZlibTransport(boost::shared_ptr transport, - int urbuf_size = DEFAULT_URBUF_SIZE, - int crbuf_size = DEFAULT_CRBUF_SIZE, - int uwbuf_size = DEFAULT_UWBUF_SIZE, - int cwbuf_size = DEFAULT_CWBUF_SIZE) : - transport_(transport), - urpos_(0), - uwpos_(0), - input_ended_(false), - output_finished_(false), - urbuf_size_(urbuf_size), - crbuf_size_(crbuf_size), - uwbuf_size_(uwbuf_size), - cwbuf_size_(cwbuf_size), - urbuf_(NULL), - crbuf_(NULL), - uwbuf_(NULL), - cwbuf_(NULL), - rstream_(NULL), - wstream_(NULL) - { - if (uwbuf_size_ < MIN_DIRECT_DEFLATE_SIZE) { - // Have to copy this into a local because of a linking issue. - int minimum = MIN_DIRECT_DEFLATE_SIZE; - throw TTransportException( - TTransportException::BAD_ARGS, - "TZLibTransport: uncompressed write buffer must be at least" - + boost::lexical_cast(minimum) + "."); - } - - try { - urbuf_ = new uint8_t[urbuf_size]; - crbuf_ = new uint8_t[crbuf_size]; - uwbuf_ = new uint8_t[uwbuf_size]; - cwbuf_ = new uint8_t[cwbuf_size]; - - // Don't call this outside of the constructor. - initZlib(); - - } catch (...) { - delete[] urbuf_; - delete[] crbuf_; - delete[] uwbuf_; - delete[] cwbuf_; - throw; - } - } - - // Don't call this outside of the constructor. - void initZlib(); - - /** - * TZlibTransport destructor. - * - * Warning: Destroying a TZlibTransport object may discard any written but - * unflushed data. You must explicitly call flush() or finish() to ensure - * that data is actually written and flushed to the underlying transport. - */ - ~TZlibTransport(); - - bool isOpen(); - bool peek(); - - void open() { - transport_->open(); - } - - void close() { - transport_->close(); - } - - uint32_t read(uint8_t* buf, uint32_t len); - - void write(const uint8_t* buf, uint32_t len); - - void flush(); - - /** - * Finalize the zlib stream. - * - * This causes zlib to flush any pending write data and write end-of-stream - * information, including the checksum. Once finish() has been called, no - * new data can be written to the stream. - */ - void finish(); - - const uint8_t* borrow(uint8_t* buf, uint32_t* len); - - void consume(uint32_t len); - - /** - * Verify the checksum at the end of the zlib stream. - * - * This may only be called after all data has been read. - * It verifies the checksum that was written by the finish() call. - */ - void verifyChecksum(); - - /** - * TODO(someone_smart): Choose smart defaults. - */ - static const int DEFAULT_URBUF_SIZE = 128; - static const int DEFAULT_CRBUF_SIZE = 1024; - static const int DEFAULT_UWBUF_SIZE = 128; - static const int DEFAULT_CWBUF_SIZE = 1024; - - protected: - - inline void checkZlibRv(int status, const char* msg); - inline void checkZlibRvNothrow(int status, const char* msg); - inline int readAvail(); - void flushToTransport(int flush); - void flushToZlib(const uint8_t* buf, int len, int flush); - bool readFromZlib(); - - private: - // Deprecated constructor signature. - // - // This used to be the constructor signature. If you are getting a compile - // error because you are trying to use this constructor, you need to update - // your code as follows: - // - Remove the use_for_rpc argument in the constructur. - // There is no longer any distinction between RPC and standalone zlib - // transports. (Previously, only standalone was allowed, anyway.) - // - Replace TZlibTransport::flush() calls with TZlibTransport::finish() - // in your code. Previously, flush() used to finish the zlib stream. - // Now flush() only flushes out pending data, so more writes can be - // performed after a flush(). The finish() method can be used to finalize - // the zlib stream. - // - // If we don't declare this constructor, old code written as - // TZlibTransport(trans, false) still compiles but behaves incorrectly. - // The second bool argument is converted to an integer and used as the - // urbuf_size. - TZlibTransport(boost::shared_ptr transport, - bool use_for_rpc, - int urbuf_size = DEFAULT_URBUF_SIZE, - int crbuf_size = DEFAULT_CRBUF_SIZE, - int uwbuf_size = DEFAULT_UWBUF_SIZE, - int cwbuf_size = DEFAULT_CWBUF_SIZE); - - protected: - // Writes smaller than this are buffered up. - // Larger (or equal) writes are dumped straight to zlib. - static const int MIN_DIRECT_DEFLATE_SIZE = 32; - - boost::shared_ptr transport_; - - int urpos_; - int uwpos_; - - /// True iff zlib has reached the end of the input stream. - bool input_ended_; - /// True iff we have finished the output stream. - bool output_finished_; - - int urbuf_size_; - int crbuf_size_; - int uwbuf_size_; - int cwbuf_size_; - - uint8_t* urbuf_; - uint8_t* crbuf_; - uint8_t* uwbuf_; - uint8_t* cwbuf_; - - struct z_stream_s* rstream_; - struct z_stream_s* wstream_; -}; - - -/** - * Wraps a transport into a zlibbed one. - * - */ -class TZlibTransportFactory : public TTransportFactory { - public: - TZlibTransportFactory() {} - - virtual ~TZlibTransportFactory() {} - - virtual boost::shared_ptr getTransport( - boost::shared_ptr trans) { - return boost::shared_ptr(new TZlibTransport(trans)); - } -}; - -/** - * Wraps a transport into a framed, zlibbed one. - */ -class TFramedZlibTransportFactory : public TTransportFactory { - public: - TFramedZlibTransportFactory() {} - - virtual ~TFramedZlibTransportFactory() {} - - virtual boost::shared_ptr getTransport( - boost::shared_ptr trans) { - boost::shared_ptr framedTransport(new TFramedTransport(trans)); - return boost::shared_ptr(new TZlibTransport(framedTransport)); - } -}; - - -}}} // apache::thrift::transport - -#endif // #ifndef _THRIFT_TRANSPORT_TZLIBTRANSPORT_H_ diff --git a/thrift/lib/cpp/util/AsyncClientUtil.h b/thrift/lib/cpp/util/AsyncClientUtil.h deleted file mode 100644 index 9cd68bb72e..0000000000 --- a/thrift/lib/cpp/util/AsyncClientUtil.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_ASYNCCLIENTUTIL_H_ -#define THRIFT_UTIL_ASYNCCLIENTUTIL_H_ 1 - -#include "thrift/lib/cpp/async/TAsyncSocket.h" -#include "thrift/lib/cpp/async/TFramedAsyncChannel.h" -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" -#include "thrift/lib/cpp/transport/TBufferTransports.h" - -namespace apache { namespace thrift { namespace util { - -/* - * Create an async client from a TSocketAddress - */ -template, - typename ChannelT = async::TFramedAsyncChannel> -ClientT* createClient(async::TEventBase* eventBase, - const transport::TSocketAddress& address) { - boost::shared_ptr transport( - async::TAsyncSocket::newSocket(eventBase, address)); - boost::shared_ptr channel( - ChannelT::newChannel(transport)); - - ProtocolFactoryT protocolFactory; - return new ClientT(channel, &protocolFactory); -} - -/* - * Create an async client from an IP and port - */ -template, - typename ChannelT = async::TFramedAsyncChannel> -ClientT* createClient(async::TEventBase* eventBase, - const std::string& ip, uint16_t port) { - // Note that we intentionally use setFromIpPort() and not setFromHostPort() - // here. If users want asynchronous operation they almost certainly don't - // want us to perform a blocking DNS lookup operation that may take a long - // time. - transport::TSocketAddress address; - address.setFromIpPort(ip, port); - return createClient( - eventBase, address); -} - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_ASYNCCLIENTUTIL_H_ diff --git a/thrift/lib/cpp/util/BitwiseCast.h b/thrift/lib/cpp/util/BitwiseCast.h deleted file mode 100644 index 0c9461fc38..0000000000 --- a/thrift/lib/cpp/util/BitwiseCast.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -#ifndef THRIFT_UTIL_BITWISECAST_H_ -#define THRIFT_UTIL_BITWISECAST_H_ - -#include - -// Use this to get around strict aliasing rules. -// For example, uint64_t i = bitwise_cast(returns_double()); -// The most obvious implementation is to just cast a pointer, -// but that doesn't work. -// For a pretty in-depth explanation of the problem, see -// http://cellperformance.beyond3d.com/articles/2006/06/ (...) -// understanding-strict-aliasing.html -template -static inline To bitwise_cast(From from) { - BOOST_STATIC_ASSERT(sizeof(From) == sizeof(To)); - - // BAD!!! These are all broken with -O2. - //return *reinterpret_cast(&from); // BAD!!! - //return *static_cast(static_cast(&from)); // BAD!!! - //return *(To*)(void*)&from; // BAD!!! - - // Super clean and partially blessed by section 3.9 of the standard. - //unsigned char c[sizeof(from)]; - //memcpy(c, &from, sizeof(from)); - //To to; - //memcpy(&to, c, sizeof(c)); - //return to; - - // Slightly more questionable. - // Same code emitted by GCC. - //To to; - //memcpy(&to, &from, sizeof(from)); - //return to; - - // Technically undefined, but almost universally supported, - // and the most efficient implementation. - union { - From f; - To t; - } u; - u.f = from; - return u.t; -} - -#endif diff --git a/thrift/lib/cpp/util/EnumUtils.h b/thrift/lib/cpp/util/EnumUtils.h deleted file mode 100644 index 0bf43afb05..0000000000 --- a/thrift/lib/cpp/util/EnumUtils.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_ENUMUTILS_H_ -#define THRIFT_UTIL_ENUMUTILS_H_ 1 - -namespace apache { namespace thrift { - -namespace util { - -/** - * Parses an enum name to the enum type - */ -template -bool tryParseEnum(const String& name, EnumType* out) { - return TEnumTraits::findValue(name.c_str(), out); -}; - -template -bool tryParseEnum(const char* name, EnumType* out) { - return TEnumTraits::findValue(name, out); -}; - -/** - * Returns the human-readable name for an Enum type. - */ -template -const char* enumName(EnumType value, - const char* defaultName = nullptr) { - const char* name = TEnumTraits::findName(value); - if (name) { - return name; - } else { - return defaultName; - } -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_ENUMUTILS_H_ 1 diff --git a/thrift/lib/cpp/util/ScopedServerThread.h b/thrift/lib/cpp/util/ScopedServerThread.h deleted file mode 100644 index fe537bd360..0000000000 --- a/thrift/lib/cpp/util/ScopedServerThread.h +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_SCOPEDSERVERTHREAD_H_ -#define THRIFT_UTIL_SCOPEDSERVERTHREAD_H_ 1 - -#include -#include - -namespace apache { namespace thrift { - -namespace concurrency { -class Thread; -} -namespace server { -class TServer; -} -namespace transport { -class TSocketAddress; -} - -namespace util { - -class ServerCreator; - -/** - * ScopedServerThread spawns a thrift server in a new thread. - * - * The server is stopped automatically when the ScopedServerThread is - * destroyed. - */ -class ScopedServerThread : public boost::noncopyable { - public: - /** - * Create a new, unstarted ScopedServerThread object. - */ - ScopedServerThread(); - - /** - * Create a ScopedServerThread object and automatically start it. - */ - ScopedServerThread(ServerCreator* serverCreator); - - /** - * Create a ScopedServerThread object and automatically start it. - */ - ScopedServerThread(const boost::shared_ptr& server); - - virtual ~ScopedServerThread(); - - /** - * Start the server thread. - * - * This method does not return until the server has successfully started. - * - * @param serverCreator The ServerCreator object to use to create the server. - */ - void start(ServerCreator* serverCreator); - - /** - * Start the server thread. - * - * This method does not return until the server has successfully started. - * - * @param server The server to run in the new thread. - */ - void start(const boost::shared_ptr& server); - - /** - * Stop the server thread. - */ - void stop(); - - /** - * Get the address on which the server is listening. - */ - const transport::TSocketAddress* getAddress() const; - - private: - class Helper; - - boost::shared_ptr helper_; - boost::shared_ptr thread_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_SCOPEDSERVERTHREAD_H_ diff --git a/thrift/lib/cpp/util/ServerCreator.h b/thrift/lib/cpp/util/ServerCreator.h deleted file mode 100644 index b573f084ec..0000000000 --- a/thrift/lib/cpp/util/ServerCreator.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_SERVERCREATOR_H_ -#define THRIFT_UTIL_SERVERCREATOR_H_ 1 - -#include - -namespace apache { namespace thrift { - -namespace server { -class TServer; -} - -namespace util { - -/** - * ServerCreator is an abstract class for creating a thrift server. - */ -class ServerCreator { - public: - virtual ~ServerCreator() {} - - /** - * Create a new server. - */ - virtual boost::shared_ptr createServer() = 0; - - protected: - ServerCreator() {} -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_SERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/ServerCreatorBase.h b/thrift/lib/cpp/util/ServerCreatorBase.h deleted file mode 100644 index 98f0fb4b6f..0000000000 --- a/thrift/lib/cpp/util/ServerCreatorBase.h +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_SERVERCREATORBASE_H_ -#define THRIFT_UTIL_SERVERCREATORBASE_H_ 1 - -#include "thrift/lib/cpp/util/ServerCreator.h" - -namespace apache { namespace thrift { - -namespace protocol { -class TProtocolFactory; -class TDuplexProtocolFactory; -} -namespace server { -class TServerEventHandler; -} - -namespace util { - -/** - * ServerCreatorBase is a helper class for subclass that wish to implement the - * ServerCreator interface. - * - * ServerCreatorBase provides functionality that pretty much all ServerCreators - * need. It provides default protocol settings, and also - * setServerEventHandler(). - */ -class ServerCreatorBase : public ServerCreator { - public: - /** - * Use strict read by default. - * - * We should always use strict read and strict write for all new code. - * Only legacy services should allow requests without a thrift ID. - */ - static const bool DEFAULT_STRICT_READ = true; - - /** - * Use strict write by default. - */ - static const bool DEFAULT_STRICT_WRITE = true; - - /** - * Default string limit. Set a reasonably small value so that servers won't - * fall over when sent garbage data. - */ - static const int32_t DEFAULT_STRING_LIMIT = 256*1024*1024; - - /** - * Default container limit. Set a reasonably small value so that servers - * won't fall over when sent garbage data. - */ - static const int32_t DEFAULT_CONTAINER_LIMIT = 256*1024*1024; - - /** - * Set the TServerEventHandler to use with the new server. - * - * This event handler will be set on servers created by this ServerCreator. - */ - void setServerEventHandler( - const boost::shared_ptr& eventHandler) { - serverEventHandler_ = eventHandler; - } - - /** - * Set whether or not TBinaryProtocol should include an identifier field. - * - * This field helps verify that incoming data is a valid thrift request, - * rather than random garbage data. - * - * This setting is ignored if you explicitly specify a TProtocolFactory to - * use. It is only honored if you let the ServerCreator create a new - * TBinaryProtocol for you. - * - * If unspecified, it defaults to true for both strictRead and strictWrite. - * - * @param strictRead Reject incoming requests that don't include a thrift - * identifier. - * @param strictWrite Send a thrift identifier in outgoing responses. - */ - void setStrictProtocol(bool strictRead, bool strictWrite); - - /** - * Set the maximum string size allowed by TBinaryProtocol. - * - * This setting helps prevent TBinaryProtocol from trying to allocate an - * extremely large buffer if a request contains a bogus string length field. - * - * This setting is ignored if you explicitly specify a TProtocolFactory to - * use. It is only honored if you let the ServerCreator create a new - * TBinaryProtocol for you. - * - * If unspecified, it defaults to 256MB. - */ - void setStringSizeLimit(int32_t stringLimit); - - /** - * Set the maximum container size allowed by TBinaryProtocol. - * - * This setting helps prevent TBinaryProtocol from trying to allocate an - * extremely large buffer if a request contains a bogus container length - * field. (e.g., for list, map, and set fields.) - * - * This setting is ignored if you explicitly specify a TProtocolFactory to - * use. It is only honored if you let the ServerCreator create a new - * TBinaryProtocol for you. - * - * If unspecified, it defaults to 256MB. - */ - void setContainerSizeLimit(int32_t containerLimit); - - /** - * Set the protocol factory to use. - * - * This causes the ServerCreator to use the specified protocol factory. - * This overrides the TBinaryProtocol-related settings that would normally be - * used by the ServerCreator. - */ - void setProtocolFactory(const boost::shared_ptr&); - - /** - * Set the protocol factory to use. - * - * This causes the ServerCreator to use the specified protocol factory - * to construct custom input and output protocols. This overrides the - * TBinaryProtocol-related settings that would normally be used by the - * ServerCreator. - */ - void setDuplexProtocolFactory( - const boost::shared_ptr&); - - /** - * Create a new server. - */ - virtual boost::shared_ptr createServer() = 0; - - protected: - ServerCreatorBase(); - - /** - * Configure the TServer as desired. - * - * Subclasses should call this method in createServer(). - */ - virtual void configureServer(const boost::shared_ptr& srv); - - /** - * Get the TProtocolFactory to use for the server. - * - * Subclasses should call this method in createServer(). - */ - virtual boost::shared_ptr getProtocolFactory(); - - virtual boost::shared_ptr - getDuplexProtocolFactory(); - - bool strictRead_; - bool strictWrite_; - int32_t stringLimit_; - int32_t containerLimit_; - boost::shared_ptr serverEventHandler_; - boost::shared_ptr protocolFactory_; - boost::shared_ptr duplexProtocolFactory_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_SERVERCREATORBASE_H_ diff --git a/thrift/lib/cpp/util/SyncServerCreator.h b/thrift/lib/cpp/util/SyncServerCreator.h deleted file mode 100644 index bf988017ff..0000000000 --- a/thrift/lib/cpp/util/SyncServerCreator.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_SYNCSERVERCREATOR_H_ -#define THRIFT_UTIL_SYNCSERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/ServerCreatorBase.h" - -#include - -namespace apache { namespace thrift { - -class TProcessor; - -namespace transport { -class TTransportFactory; -class TDuplexTransportFactory; -class TServerSocket; -} - -namespace util { - -/** - * Helper class for the standard synchronous server types (TSimpleServer, - * TThreadedServer, TThreadPoolServer) - */ -class SyncServerCreator : public ServerCreatorBase { - public: - /** - * Default to a 30 second receive timeout. - * - * Almost everyone should use a receive timeout, to avoid tracking connection - * state indefinitely if a client drops of the network without closing the - * connection. - */ - static const int DEFAULT_RECEIVE_TIMEOUT = 30000; - - /** - * Default to a 5 second send timeout. - * - * This is still a fairly large value. Some users may want to decrease this. - */ - static const int DEFAULT_SEND_TIMEOUT = 5000; - - /** - * Don't use an accept timeout by default. - * - * Almost everyone wants this. With a timeout, serve() will raise an - * exception if a new connection doesn't arrive within the timeout interval. - */ - static const int DEFAULT_ACCEPT_TIMEOUT = -1; - - /** - * By default, don't mess with the kernel's default TCP send buffer size. - */ - static const int DEFAULT_TCP_SEND_BUFFER = -1; - - /** - * By default, don't mess with the kernel's default TCP receive buffer size. - */ - static const int DEFAULT_TCP_RECEIVE_BUFFER = -1; - - /** - * Create a new SyncServerCreator - */ - SyncServerCreator(const boost::shared_ptr& processor, - uint16_t port, bool framed = true); - - /** - * Create a new SyncServerCreator - */ - SyncServerCreator(const boost::shared_ptr& processor, - uint16_t port, - boost::shared_ptr& tf, - boost::shared_ptr& pf); - - /** - * Set the send timeout. - * - * Connections will be dropped if no progress is made sending a response - * for this many milliseconds. - */ - void setSendTimeout(int milliseconds); - - /** - * Set the receive timeout. - * - * Connections will be dropped if there are no requests for this many - * milliseconds. - */ - void setRecvTimeout(int milliseconds); - - /** - * Set the accept timeout. - * - * serve() will raise an exception if no new connections are received for - * this many milliseconds. - */ - void setAcceptTimeout(int milliseconds); - - /** - * Set the TCP send buffer size. - */ - void setTcpSendBuffer(int tcpSendBuffer); - - /** - * Set the TCP receive buffer size. - */ - void setTcpRecvBuffer(int tcpRecvBuffer); - - /** - * Set the transport factory - */ - void setTransportFactory( - const boost::shared_ptr& tf) { - transportFactory_ = tf; - } - - /** - * Set the duplex transport factory. This overrides the base - * transportFactory_ if one was specified - */ - void setDuplexTransportFactory( - const boost::shared_ptr& tf) { - duplexTransportFactory_ = tf; - } - - /** - * Get the duplex transport factory, instantiating one from the base - * transportFactory_ if needed - */ - boost::shared_ptr getDuplexTransportFactory(); - /** - * Create a new server. - */ - virtual boost::shared_ptr createServer() = 0; - - protected: - void init(const boost::shared_ptr& processor, uint16_t port); - - boost::shared_ptr createServerSocket(); - - uint16_t port_; - int sendTimeout_; - int recvTimeout_; - int acceptTimeout_; - int tcpSendBuffer_; - int tcpRecvBuffer_; - boost::shared_ptr processor_; - boost::shared_ptr transportFactory_; - boost::shared_ptr duplexTransportFactory_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_SYNCSERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/TEventServerCreator.h b/thrift/lib/cpp/util/TEventServerCreator.h deleted file mode 100644 index d8c32d8b7c..0000000000 --- a/thrift/lib/cpp/util/TEventServerCreator.h +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_TEVENTSERVERCREATOR_H_ -#define THRIFT_UTIL_TEVENTSERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/ServerCreatorBase.h" - -#include - -namespace apache { namespace thrift { - -class TProcessor; - -namespace concurrency { -class ThreadManager; -} - -namespace async { -class TAsyncProcessor; -class TEventServer; -} - -namespace util { - -class TEventServerCreator : public ServerCreatorBase { - public: - typedef async::TEventServer ServerType; - - /// Use 8 IO worker threads by default. - static const size_t DEFAULT_NUM_IO_THREADS = 8; - - /// Use 8 task worker threads by default. - static const size_t DEFAULT_NUM_TASK_THREADS = 8; - - /// Default limit on the size of each worker's idle connection pool - static const uint32_t DEFAULT_CONN_POOL_SIZE = 64; - - /// By default, close connections after they have are idle for 60 seconds - static const int DEFAULT_RECV_TIMEOUT = 60000; - - /** - * By default, reject requests over 64MB. - * - * This avoids allocating giant buffers if a client sends a bogus frame - * length. - */ - static const size_t DEFAULT_MAX_FRAME_SIZE = 64 * 1024 * 1024; - - /** - * Start dropping connections to reduce load if a worker's event loop begins - * taking longer than 2 seconds to process a single event loop. - */ - static const int64_t DEFAULT_WORKER_LATENCY = 2000; - - /// Default size of each connection's write buffer - static const size_t DEFAULT_WRITE_BUFFER_SIZE = 1024; - - /// Default size of each connection's read buffer - static const size_t DEFAULT_READ_BUFFER_SIZE = 1024; - - /// Maximum size of read buffer allocated to each idle connection - static const size_t DEFAULT_IDLE_READ_BUF_LIMIT = 8192; - - /// Maximum size of write buffer allocated to each idle connection - static const size_t DEFAULT_IDLE_WRITE_BUF_LIMIT = 8192; - - /** - * By check to see if we should shrink oversized read/write buffers after - * every 64 calls on connection. - */ - static const int DEFAULT_RESIZE_EVERY_N = 64; - - /** - * Create a new TEventServerCreator to be used for building a native-mode - * TEventServer. - */ - TEventServerCreator( - const boost::shared_ptr& asyncProcessor, - uint16_t port, - size_t numIoThreads = DEFAULT_NUM_IO_THREADS); - - /** - * Create a new TEventServerCreator to be used for building a queuing-mode - * TEventServer. - */ - TEventServerCreator( - const boost::shared_ptr& syncProcessor, - uint16_t port, - size_t numIoThreads = DEFAULT_NUM_IO_THREADS, - size_t numTaskThreads = DEFAULT_NUM_TASK_THREADS); - - /** - * Set the number of IO threads to use. - */ - void setNumIoThreads(size_t numIoThreads) { - numIoThreads_ = numIoThreads; - } - - /** - * Set the number of task threads to use. - */ - void setNumTaskThreads(size_t numTaskThreads) { - numTaskThreads_ = numTaskThreads; - } - - /** - * Set the thread manager to use for task queue threads. - */ - void setTaskQueueThreadManager( - const boost::shared_ptr& threadManager) { - taskQueueThreadManager_ = threadManager; - } - - /** - * Set the maximum number of TEventConnection objects to cache in each worker - * thread. - * - * By default, when a connection is closed the worker thread caches the - * TEventConnection object and re-uses it when a new connection comes in, - * instead of deleting it and allocating a new one for the next connection. - * This value caps the number of unused TEventConnection objects that will be - * cached. - */ - void setMaxConnectionPoolSize(uint32_t size) { - maxConnPoolSize_ = size; - } - - /** - * Set the maximum amount of time a connection may be idle before it is - * closed. - */ - void setRecvTimeout(int milliseconds) { - recvTimeout_ = milliseconds; - } - - /// Set the maximum allowed request frame size. - void setMaxFrameSize(uint32_t maxFrameSize) { - maxFrameSize_ = maxFrameSize; - } - - /// Set the default write buffer size for new connections - void setReadBufferDefaultSize(size_t size) { - defaultReadBufferSize_ = size; - } - - /// Set the default write buffer size for new connections - void setWriteBufferDefaultSize(size_t size) { - defaultWriteBufferSize_ = size; - } - - /** - * Set the maximum read buffer size for idle connections. - * - * This value is checked when the connection is closed, and also every N - * connections if setResizeBufferEveryN() has been set. If the read buffer - * is larger than the allowed limit, free it. - * - * This prevents a single large request on a connection from continuing to - * taking up a lot of buffer space. - */ - void setIdleReadBufferLimit(size_t limit) { - idleReadBufferLimit_ = limit; - } - - /** - * Set the maximum write buffer size for idle connections. - * - * This value is checked when the connection is closed, and also every N - * connections if setResizeBufferEveryN() has been set. If the write buffer - * is larger than the allowed limit, free it. - * - * This prevents a single large response on a connection from continuing to - * taking up a lot of buffer space. - */ - void setIdleWriteBufferLimit(size_t limit) { - idleWriteBufferLimit_ = limit; - } - - /// Check a connection's buffer size limits every count requests. - void setResizeBufferEveryN(int32_t count) { - resizeBufferEveryN_ = count; - } - - /** - * Set the worker latency limit. - * - * Begin taking overload actions when it takes longer than this amount of - * time to process a single iteration of the event loop. - */ - void setWorkerLatencyLimit(int64_t milliseconds) { - workerLatencyLimit_ = milliseconds; - } - - virtual boost::shared_ptr createServer(); - - boost::shared_ptr createEventServer(); - - private: - boost::shared_ptr syncProcessor_; - boost::shared_ptr asyncProcessor_; - boost::shared_ptr taskQueueThreadManager_; - uint16_t port_; - size_t numIoThreads_; - size_t numTaskThreads_; - uint32_t maxConnPoolSize_; - int recvTimeout_; - uint32_t maxFrameSize_; - size_t defaultReadBufferSize_; - size_t defaultWriteBufferSize_; - size_t idleReadBufferLimit_; - size_t idleWriteBufferLimit_; - int32_t resizeBufferEveryN_; - int32_t workerLatencyLimit_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_TEVENTSERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/THttpParser.h b/thrift/lib/cpp/util/THttpParser.h deleted file mode 100644 index de953f5118..0000000000 --- a/thrift/lib/cpp/util/THttpParser.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef THRIFT_TRANSPORT_THTTPPARSER_H_ -#define THRIFT_TRANSPORT_THTTPPARSER_H_ 1 - -#include - -namespace apache { namespace thrift { namespace util { - -class THttpParser { - protected: - enum HttpParseState { - HTTP_PARSE_START = 0, - HTTP_PARSE_HEADER, - HTTP_PARSE_CHUNK, - HTTP_PARSE_CONTENT, - HTTP_PARSE_CHUNKFOOTER, - HTTP_PARSE_TRAILING - }; - - enum HttpParseResult { - HTTP_PARSE_RESULT_CONTINUE, - HTTP_PARSE_RESULT_BLOCK - }; - - public: - THttpParser(); - ~THttpParser(); - - void getReadBuffer(void** bufReturn, size_t* lenReturn); - bool readDataAvailable(size_t len); - void setDataBuffer(apache::thrift::transport::TMemoryBuffer* buffer) { - dataBuf_ = buffer; - } - void unsetDataBuffer() { - dataBuf_ = NULL; - } - void setMaxSize(uint32_t size) { - maxSize_ = size; - } - uint32_t getMaxSize() { - return maxSize_; - } - bool hasReadAheadData() { - return (state_ == HTTP_PARSE_START) && (httpBufLen_ > httpPos_); - } - bool hasPartialMessage() { - return partialMessageSize_ > 0; - } - virtual int constructHeader(iovec* ops, - int opsLen, - int contentLength, - char* contentLengthBuf) = 0; - - protected: - HttpParseResult parseStart(); - HttpParseResult parseHeader(); - HttpParseResult parseContent(); - HttpParseResult parseChunk(); - HttpParseResult parseChunkFooter(); - HttpParseResult parseTrailing(); - - virtual bool parseStatusLine(const char* status) = 0; - virtual void parseHeaderLine(const char* header) = 0; - - void shift(); - char* readLine(); - void checkMessageSize(uint32_t more, bool added); - - char* httpBuf_; - uint32_t httpPos_; - uint32_t httpBufLen_; - uint32_t httpBufSize_; - - HttpParseState state_; - - // for read header - bool statusLine_; - bool finished_; - bool chunked_; - - size_t contentLength_; - - // max http message size - uint32_t maxSize_; - uint32_t partialMessageSize_; - - apache::thrift::transport::TMemoryBuffer* dataBuf_; - - static const char* CRLF; - static const int CRLF_LEN; -}; - -class THttpClientParser : public THttpParser { - public: - THttpClientParser(std::string host, std::string path) { - host_ = host; - path_ = path; - userAgent_ = "C++/THttpClient"; - } - void setHost(const std::string& host) { host_ = host; } - void setPath(const std::string& path) { path_ = path; } - void resetConnectClosedByServer(); - bool isConnectClosedByServer(); - void setUserAgent(std::string userAgent) { - userAgent_ = userAgent; - } - virtual int constructHeader(iovec* ops, - int opsLen, - int contentLength, - char* contentLengthBuf); - - protected: - virtual void parseHeaderLine(const char* header); - virtual bool parseStatusLine(const char* status); - void setiovec(iovec* ops, const char* data, int size) { - ops->iov_base = (void*)data; - ops->iov_len = size; - } - - private: - bool connectionClosedByServer_; - std::string host_; - std::string path_; - std::string userAgent_; -}; - - -}}} // apache::thrift::util - -#endif // #ifndef THRIFT_TRANSPORT_THTTPPARSER_H_ - diff --git a/thrift/lib/cpp/util/TNonblockingServerCreator.h b/thrift/lib/cpp/util/TNonblockingServerCreator.h deleted file mode 100644 index 4bd962855b..0000000000 --- a/thrift/lib/cpp/util/TNonblockingServerCreator.h +++ /dev/null @@ -1,275 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_TNONBLOCKINGSERVERCREATOR_H_ -#define THRIFT_UTIL_TNONBLOCKINGSERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/ServerCreatorBase.h" - -#include "thrift/lib/cpp/server/TNonblockingServer.h" -#include "thrift/lib/cpp/transport/TSocket.h" - -namespace apache { namespace thrift { - -class TProcessor; - -namespace util { - -class TNonblockingServerCreator : public ServerCreatorBase { - public: - typedef server::TNonblockingServer ServerType; - - /// Use 8 task threads by default. - static const size_t DEFAULT_NUM_TASK_THREADS = 8; - - /// Use 1 I/O thread by default. - static const size_t DEFAULT_NUM_IO_THREADS = 1; - - /** - * By default, just run the I/O threads with the same priority as other - * threads. - */ - static const bool DEFAULT_HI_PRI_IO_THREADS = false; - - /// Default limit on the size of the idle connection pool - static const size_t DEFAULT_CONN_STACK_LIMIT = 1024; - - /// Default limit on the total number of connected sockets - static const size_t DEFAULT_MAX_CONNECTIONS = INT_MAX; - - /// Default limit on the number of outstanding requests - static const size_t DEFAULT_MAX_ACTIVE_PROCESSORS = INT_MAX; - - /** - * By default, reject requests over 256MB. - * - * This avoids allocating giant buffers if a client sends a bogus frame - * length. - */ - static const size_t DEFAULT_MAX_FRAME_SIZE = 256 * 1024 * 1024; - - /// Default overload hysteresis fraction - static const double DEFAULT_HYSTERESIS_FRACTION; - - /** - * Default overload action. - * - * TODO: None of the TNonblockingServer OverloadAction behaviors seem like - * reasonable defaults. If the overload is occurring because we hit the - * maxConnections limit, it seems like the best behavior is to try and close - * idle connections. If the overload is occurring due to the - * maxActiveProcessors limit, it seems like the best behavior may be to stop - * calling accept() and stop reading on sockets until the # of active - * processors drops to a reasonable limit. - */ - static const server::TOverloadAction DEFAULT_OVERLOAD_ACTION = - server::T_OVERLOAD_NO_ACTION; - - /** - * By default, give up on a request if we can't find a thread to process it - * within 30 seconds. - */ - static const int64_t DEFAULT_TASK_EXPIRE_TIME = 30000; - - /// Default size of write buffer - static const size_t DEFAULT_WRITE_BUFFER_SIZE = 1024; - - /// Maximum size of read buffer allocated to each idle connection - static const size_t DEFAULT_IDLE_READ_BUF_LIMIT = 8192; - - /// Maximum size of write buffer allocated to each idle connection - static const size_t DEFAULT_IDLE_WRITE_BUF_LIMIT = 8192; - - /** - * By check to see if we should shrink oversized read/write buffers after - * every 64 calls on connection. - */ - static const int DEFAULT_RESIZE_EVERY_N = 64; - - /// listen backlog - static const size_t DEFAULT_LISTEN_BACKLOG = 1024; - - /** - * Create a new TNonblockingServerCreator. - */ - TNonblockingServerCreator(const boost::shared_ptr& processor, - uint16_t port, - size_t numTaskThreads = DEFAULT_NUM_TASK_THREADS); - - /** - * Set the number of threads to use for processing requests. - * - * Setting this to 0 causes all requests to be processed in the I/O - * thread(s). You should only set this to 0 if the handler responds to all - * requests immediately, without ever blocking. - */ - void setNumTaskThreads(size_t numThreads) { - numTaskThreads_ = numThreads; - } - - /** - * Set the ThreadFactory to use for creating the task threads. - */ - void setTaskThreadFactory( - const boost::shared_ptr& threadFactory) { - taskThreadFactory_ = threadFactory; - } - - /** - * Set the number of threads to use for performing I/O. - */ - void setNumIOThreads(size_t numThreads) { - numIOThreads_ = numThreads; - } - - /** - * Set whether or not the I/O threads should be given a higher scheduling - * priority. - */ - void setUseHighPriorityIOThreads(bool useHiPri) { - useHiPriIOThreads_ = useHiPri; - } - - /** - * Set the maximum number of TConnection objects to cache. - * - * By default, when a connection is closed TNonblockingServer caches the - * TConnection object and re-uses it when a new connection comes in, instead - * of deleting it and allocating a new one for the next connection. This - * value caps the number of unused TConnection objects that will be cached. - */ - void setConnectionStackLimit(size_t limit) { - connectionStackLimit_ = limit; - } - - /// Set the maximum number of open connections - void setMaxConnections(size_t maxConnections) { - maxConnections_ = maxConnections; - } - - /// Set the maximum number of active requests - void setMaxActiveProcessors(size_t maxActiveProcessors) { - maxActiveProcessors_ = maxActiveProcessors; - } - - /// Set the maximum allowed request frame size. - void setMaxFrameSize(size_t maxFrameSize) { - maxFrameSize_ = maxFrameSize; - } - - /// Set the overload hysteresis fraction - void setOverloadHysteresis(double hysteresisFraction) { - hysteresisFraction_ = hysteresisFraction; - } - - /// Set the overload action - void setOverloadAction(server::TOverloadAction action) { - overloadAction_ = action; - } - - /** - * Set the task expiration time. - * - * If no task thread is available to process a request within taskExpireTime - * milliseconds, close the connection rather than continuing to wait for a - * thread. If the server is overloaded, this prevents it from processing - * old requests that the client has already given up on. - */ - void setTaskExpireTime(int64_t taskExpireTime) { - taskExpireTime_ = taskExpireTime; - } - - /** - * Set the socket options to use for accepted connections - */ - void setSocketOptions(const transport::TSocket::Options& options) { - socketOptions_ = options; - } - - /// Set the default write buffer size for new connections - void setWriteBufferDefaultSize(size_t size) { - defaultWriteBufferSize_ = size; - } - - /** - * Set the maximum read buffer size for idle connections. - * - * This value is checked when the connection is closed, and also every N - * connections if setResizeBufferEveryN() has been set. If the read buffer - * is larger than the allowed limit, free it. - * - * This prevents a single large request on a connection from continuing to - * taking up a lot of buffer space. - */ - void setIdleReadBufferLimit(size_t limit) { - idleReadBufferLimit_ = limit; - } - - /** - * Set the maximum write buffer size for idle connections. - * - * This value is checked when the connection is closed, and also every N - * connections if setResizeBufferEveryN() has been set. If the write buffer - * is larger than the allowed limit, free it. - * - * This prevents a single large response on a connection from continuing to - * taking up a lot of buffer space. - */ - void setIdleWriteBufferLimit(size_t limit) { - idleWriteBufferLimit_ = limit; - } - - /// Check a connection's buffer size limits every count requests. - void setResizeBufferEveryN(int32_t count) { - resizeBufferEveryN_ = count; - } - - /// listen backlog - void setListenBacklog(int32_t listenBacklog) { - listenBacklog_ = listenBacklog; - } - - virtual boost::shared_ptr createServer(); - - boost::shared_ptr createNonblockingServer(); - - private: - boost::shared_ptr processor_; - uint16_t port_; - size_t numTaskThreads_; - size_t numIOThreads_; - bool useHiPriIOThreads_; - size_t connectionStackLimit_; - size_t maxConnections_; - size_t maxActiveProcessors_; - size_t maxFrameSize_; - double hysteresisFraction_; - server::TOverloadAction overloadAction_; - int64_t taskExpireTime_; - size_t defaultWriteBufferSize_; - size_t idleReadBufferLimit_; - size_t idleWriteBufferLimit_; - int32_t resizeBufferEveryN_; - int32_t listenBacklog_; - transport::TSocket::Options socketOptions_; - boost::shared_ptr taskThreadFactory_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_TNONBLOCKINGSERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/TSimpleServerCreator.h b/thrift/lib/cpp/util/TSimpleServerCreator.h deleted file mode 100644 index 8204eecf86..0000000000 --- a/thrift/lib/cpp/util/TSimpleServerCreator.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_TSIMPLESERVERCREATOR_H_ -#define THRIFT_UTIL_TSIMPLESERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/SyncServerCreator.h" - -namespace apache { namespace thrift { - -namespace server { -class TSimpleServer; -} - -namespace util { - -class TSimpleServerCreator : public SyncServerCreator { - public: - typedef server::TSimpleServer ServerType; - - /** - * Create a new TSimpleServerCreator. - */ - TSimpleServerCreator(const boost::shared_ptr& processor, - uint16_t port, - bool framed = true) - : SyncServerCreator(processor, port, framed) {} - - /** - * Create a new TSimpleServerCreator. - */ - TSimpleServerCreator(const boost::shared_ptr& processor, - uint16_t port, - boost::shared_ptr& tf, - boost::shared_ptr& pf) - : SyncServerCreator(processor, port, tf, pf) {} - - virtual boost::shared_ptr createServer(); - - boost::shared_ptr createSimpleServer(); -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_TSIMPLESERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/TThreadPoolServerCreator.h b/thrift/lib/cpp/util/TThreadPoolServerCreator.h deleted file mode 100644 index 9732e3b672..0000000000 --- a/thrift/lib/cpp/util/TThreadPoolServerCreator.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_TTHREADPOOLSERVERCREATOR_H_ -#define THRIFT_UTIL_TTHREADPOOLSERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/SyncServerCreator.h" - -namespace apache { namespace thrift { - -namespace concurrency { -class ThreadFactory; -} -namespace server { -class TThreadPoolServer; -} - -namespace util { - -class TThreadPoolServerCreator : public SyncServerCreator { - public: - typedef server::TThreadPoolServer ServerType; - - enum OverloadAction { - OVERLOAD_STOP_ACCEPTING, - OVERLOAD_ACCEPT_AND_CLOSE, - }; - - /** - * By default, stop calling accept() once we reach the maximum number pending - * tasks. - */ - static const OverloadAction DEFAULT_OVERLOAD_ACTION = - OVERLOAD_STOP_ACCEPTING; - - /** - * Use 30 threads by default. - * - * Make sure to set this number large enough for your service. If there are - * more active connections than number of threads, new connections will - * block until one of the existing connections is closed! Typically you - * should also use a small receive timeout with TThreadPoolServer, to - * quickly expire idle connections. - */ - static const size_t DEFAULT_NUM_THREADS = 30; - - /** - * By default, only allow up to 30 pending connections waiting for a thread - * to run. - * - * Once all threads are in use, at most this many additional tasks may be - * queued before the server starts taking the OverloadAction. - */ - static const size_t DEFAULT_MAX_PENDING_TASKS = 30; - - /** - * Create a new TThreadPoolServerCreator. - */ - TThreadPoolServerCreator(const boost::shared_ptr& processor, - uint16_t port, - bool framed = true); - - /** - * Create a new TThreadPoolServerCreator. - */ - TThreadPoolServerCreator(const boost::shared_ptr& processor, - uint16_t port, - int numThreads, - bool framed = true); - - /** - * Create a new TThreadPoolServerCreator. - */ - TThreadPoolServerCreator(const boost::shared_ptr& processor, - uint16_t port, - boost::shared_ptr& tf, - boost::shared_ptr& pf); - - /** - * Set the action to take once all threads are in use and the pending task - * queue is full. - */ - void setOverloadAction(OverloadAction action) { - overloadAction_ = action; - } - - /** - * Set the number of threads to use for the thread pool - */ - void setNumThreads(size_t numThreads) { - numThreads_ = numThreads; - } - - /** - * Set the maximum number of pending tasks. - */ - void setMaxPendingTasks(size_t numTasks) { - maxPendingTasks_ = numTasks; - } - - /** - * Set the thread factory - */ - void setThreadFactory(const boost::shared_ptr&); - - virtual boost::shared_ptr createServer(); - - boost::shared_ptr createThreadPoolServer(); - - private: - OverloadAction overloadAction_; - size_t numThreads_; - size_t maxPendingTasks_; - boost::shared_ptr threadFactory_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_TTHREADPOOLSERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/TThreadedServerCreator.h b/thrift/lib/cpp/util/TThreadedServerCreator.h deleted file mode 100644 index 6155a23ba4..0000000000 --- a/thrift/lib/cpp/util/TThreadedServerCreator.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_TTHREADEDSERVERCREATOR_H_ -#define THRIFT_UTIL_TTHREADEDSERVERCREATOR_H_ 1 - -#include "thrift/lib/cpp/util/SyncServerCreator.h" - -namespace apache { namespace thrift { - -namespace concurrency { -class ThreadFactory; -} -namespace server { -class TThreadedServer; -} - -namespace util { - -class TThreadedServerCreator : public SyncServerCreator { - public: - typedef server::TThreadedServer ServerType; - - /** - * Create a new TThreadedServerCreator. - */ - TThreadedServerCreator(const boost::shared_ptr& processor, - uint16_t port, - bool framed = true) - : SyncServerCreator(processor, port, framed) {} - - /** - * Create a new TThreadedServerCreator. - */ - TThreadedServerCreator(const boost::shared_ptr& processor, - uint16_t port, - boost::shared_ptr& tf, - boost::shared_ptr& pf) - : SyncServerCreator(processor, port, tf, pf) {} - - /** - * Set the thread factory - */ - void setThreadFactory(const boost::shared_ptr&); - - virtual boost::shared_ptr createServer(); - - boost::shared_ptr createThreadedServer(); - - private: - boost::shared_ptr threadFactory_; -}; - -}}} // apache::thrift::util - -#endif // THRIFT_UTIL_TTHREADEDSERVERCREATOR_H_ diff --git a/thrift/lib/cpp/util/ThriftSerializer-inl.h b/thrift/lib/cpp/util/ThriftSerializer-inl.h deleted file mode 100644 index fac416d3a0..0000000000 --- a/thrift/lib/cpp/util/ThriftSerializer-inl.h +++ /dev/null @@ -1,191 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -// @author Karl Voskuil (karl@facebook.com) -// @author Mark Rabkin (mrabkin@facebook.com) -// - -#ifndef COMMON_STRINGS_THRIFT_SERIALIZER_INL_H -#define COMMON_STRINGS_THRIFT_SERIALIZER_INL_H - -#include -#include -#include "common/logging/logging.h" -#include "thrift/lib/cpp/util/ThriftSerializer.h" - -namespace apache { namespace thrift { namespace util { - -template -template -void -ThriftSerializer::serialize(const T& fields, String* serialized) -{ - // prepare or reset buffer - // - // note: Three cases: - // - // 1) The buffer has never been prepared. Call prepare(). - // - // 2) The buffer was last used for a deserialize() call. In this - // case, the buffer is pointing to a now-invalid constant - // string, and the buffer should be reallocated. - // - // 3) The buffer was last used for a serialize() call. In this - // case, the buffer is still pointing to a valid buffer, but it - // contains the serialization from the last serialize(), and - // the buffer just needs to be reset. - // - // This would be a little simpler if we allocated separate buffers - // and protocols for serialization and deserialization, but it - // seemed to me that this fit the common use cases better. The case - // that performs poorly (20% slower) is doing many alternating - // serializations and deserializations. - if (!prepared_ || lastDeserialized_) { - prepare(); - } else { - buffer_->resetBuffer(); - } - lastDeserialized_ = false; - - // serialize fields into buffer - fields.write(protocol_.get()); - - // assign buffer to string - uint8_t *byteBuffer; - uint32_t byteBufferSize; - buffer_->getBuffer(&byteBuffer, &byteBufferSize); - serialized->assign((const char*)byteBuffer, byteBufferSize); -} - -template -void -ThriftSerializer::serialize(const T& fields, - const uint8_t** serializedBuffer, - size_t* serializedLen) { - CHECK(serializedBuffer); - CHECK(serializedLen); - - // prepare or reset buffer - if (!prepared_ || lastDeserialized_) { - prepare(); - } else { - buffer_->resetBuffer(); - } - lastDeserialized_ = false; - - // serialize fields into buffer - fields.write(protocol_.get()); - - // assign buffer to string - uint8_t *byteBuffer; - uint32_t byteBufferSize; - buffer_->getBuffer(&byteBuffer, &byteBufferSize); - *serializedBuffer = byteBuffer; - *serializedLen = byteBufferSize; -} - - -// Deserializes a thrift object, but assumes that the object passed in the -// fields argument is "clean". If your thrift class contains optional fields, -// you should use deserialize() instead (see below), otherwise optional fields -// that were previously set by other calls to this function won't get reset, -// and will appear to have been desearialized along with the other fields. -template -template -uint32_t -ThriftSerializer::deserializeClean(const String& serialized, T* fields) -{ - // prepare buffer if necessary - if (!prepared_) { - prepare(); - } - lastDeserialized_ = true; - - // reset buffer transport to passed string - buffer_->resetBuffer((uint8_t*)serialized.data(), serialized.size()); - - // deserialize buffer into fields - return fields->read(protocol_.get()); -} - -template -uint32_t -ThriftSerializer::deserialize(const uint8_t* serializedBuffer, - size_t length, - T* fields) -{ - // prepare buffer if necessary - if (!prepared_) { - prepare(); - } - lastDeserialized_ = true; - - // reset buffer transport to passed string - buffer_->resetBuffer((uint8_t*)serializedBuffer, length); - - // need to clean the existing structure, as fields->read() will not overwrite - // the optional fields that were not set in the serialized object. - T emptyFields; - swap(emptyFields, *fields); - - // deserialize buffer into fields - return fields->read(protocol_.get()); -} - -template -void -ThriftSerializer::setVersion(int8_t version) -{ - version_ = version; - setVersion_ = true; -} - -template -void -ThriftSerializer::prepare() -{ - // create memory buffer to use as transport - // - // note: TMemoryBuffer won't write to the buffer unless it is the - // owner of it, which means that we can't pass in our own local - // buffer. Either must malloc a buffer which TMemoryBuffer will - // free, or else just let it malloc its own. This has the added - // benefit that TMemoryBuffer will grow the buffer size as - // necessary. - // - // The initial allocation of the memory buffer might seem - // unnecessary in case of parsing (since the memory buffer will be - // reset to point to the string passed to parseSerializer()), but - // it's apparently necessary for some protocols. - buffer_.reset(new TMemoryBuffer()); - - // create a protocol for the memory buffer transport - protocol_.reset(new Protocol(buffer_)); - if (setVersion_) { - protocol_->setVersion(version_); - } - - prepared_ = true; -} - - -}}} // namespace apache::thrift::util - - -#endif diff --git a/thrift/lib/cpp/util/ThriftSerializer.h b/thrift/lib/cpp/util/ThriftSerializer.h deleted file mode 100644 index 80099b9a16..0000000000 --- a/thrift/lib/cpp/util/ThriftSerializer.h +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ - -// @author Karl Voskuil (karl@facebook.com) -// @author Mark Rabkin (mrabkin@facebook.com) -// - -#ifndef COMMON_STRINGS_THRIFT_SERIALIZER_H -#define COMMON_STRINGS_THRIFT_SERIALIZER_H - -#include -#include - -#include "thrift/lib/cpp/protocol/TBinaryProtocol.h" // for serialization -#include "thrift/lib/cpp/protocol/TCompactProtocol.h" // for serialization -#include "thrift/lib/cpp/protocol/TJSONProtocol.h" // for serialization -#include "thrift/lib/cpp/protocol/TSimpleJSONProtocol.h" // for serialization -#include "thrift/lib/cpp/transport/TTransportUtils.h" // for serialization - -namespace apache { namespace thrift { namespace util { - -using apache::thrift::protocol::TBinaryProtocolT; -using apache::thrift::protocol::TCompactProtocolT; -using apache::thrift::protocol::TCompactProtocol; -using apache::thrift::protocol::TSimpleJSONProtocol; -using apache::thrift::protocol::TJSONProtocol; -using apache::thrift::transport::TBufferBase; -using apache::thrift::transport::TTransport; -using apache::thrift::transport::TMemoryBuffer; -using boost::shared_ptr; - -/** - * Encapsulates methods to serialize or deserialize a code-gen-ed - * Thrift class to and from a string. For example: - * - * extern StatsMcValue data; - * - * ThriftSerializerBinary serializer; - * string serialized; - * serializer.serialize(data, &serizalied); - * - * StatsMcValue result; - * try { - * if (serializer.deserialize(serialized, &result) != - * serialized.length()) { - * // Handle deserialization error, not all data consumed. - * } - * } catch (TProtocolException& tpe) { - * // Handle deserialization error, underlying protocol threw. - * } - * // Use deserialized thrift object. - * ... - * - * @author Karl Voskuil - */ - -template -class ThriftSerializer { - public: - ThriftSerializer() - : prepared_(false) - , lastDeserialized_(false) - , setVersion_(false) {} - - /** - * Serializes the passed type into the passed string. - * - * @author Karl Voskuil - */ - template - void serialize(const T& fields, String* serialized); - - /** - * Serializes the passed type into the internal buffer - * and returns a pointer to the internal buffer and its size. - * - * @author Yuri Putivsky - */ - void serialize(const T& fields, const uint8_t** serializedBuffer, - size_t* serializedLen); - - /** - * Deserializes the passed string into the passed type, returns the number of - * bytes that have been consumed from the passed string. - * - * The return value can be used to verify if the deserialization is successful - * or not. When a type is serialized then deserialized back, the number of - * consumed bytes must equal to the size of serialized string. But please - * note, equality of these two values doesn't guarantee the serialized string - * isn't corrupt. It's up to the underlying implementation of the type and - * thrift protocol to detect and handle invalid serialized string, they may - * throw exception or just ignore the unrecognized data. - * @author Karl Voskuil - */ - template - uint32_t deserialize(const String& serialized, T* fields) - { - return deserialize((const uint8_t*)serialized.data(), - serialized.size(), - fields); - } - - /** - * Deserializes the passed char array into the passed type, returns the number - * of bytes that have been consumed from the passed string. - * - * See notes on return value for: - * deserilize(const String* serialized, T* fields) - */ - uint32_t deserialize(const uint8_t* serializedBuffer, - size_t length, - T* fields); - - /** - * Same as deserialize() above, but won't touch/reset any optional fields - * that are not present in 'serialized'. So, if T has any optional fields, - * the caller is responsible for resetting those (or somehow handling the - * potentially dirty data.) - * - * Use this method if: - * 1) your thrift class doesn't contain any optional fields, and - * 2) you are trying to avoid memory allocations/fragmentation during - * deserialization of thift objects - * - * @author Rafael Sagula - */ - template - uint32_t deserializeClean(const String& serialized, T* fields); - - /** - * Set version of protocol data to read/write. This is only necessary - * for data that will be saved to disk between protocol versions! - * You probably don't need to use this unless you know what you are doing - * - * @author davejwatson - */ - void setVersion(int8_t version); - - private: - void prepare(); - - private: - typedef P Protocol; - - bool prepared_; - bool lastDeserialized_; - shared_ptr buffer_; - shared_ptr protocol_; - int8_t version_; - bool setVersion_; -}; - -template -struct ThriftSerializerBinary - : public ThriftSerializer > -{ }; - -template -struct ThriftSerializerCompact - : public ThriftSerializer > -{ }; - -/** - * This version is deprecated. Please do not use it anymore, - * unless you have data already serialized to disk in this format. - * Doubles are not serialized in correct network order, so making RPC - * calls with this data will not work. - */ -template -struct ThriftSerializerCompactDeprecated - : public ThriftSerializer > -{ - public: - ThriftSerializerCompactDeprecated() { - this->setVersion(TCompactProtocol::VERSION_LOW); - } -}; - -template -struct ThriftSerializerJson - : public ThriftSerializer -{ }; - -template -struct ThriftSerializerSimpleJson - : public ThriftSerializer -{ }; - -}}} // namespace apache::thrift:util - -namespace apache { namespace thrift { - -template - std::string ThriftJSONString(const ThriftStruct& ts) { - using namespace apache::thrift::protocol; - using namespace apache::thrift::util; - ThriftSerializer serializer; - std::string serialized; - serializer.serialize(ts, &serialized); - return serialized; -} - -}} // apache::thrift - - -#include "thrift/lib/cpp/util/ThriftSerializer-inl.h" - -#endif diff --git a/thrift/lib/cpp/util/ThriftSerializerTest.thrift b/thrift/lib/cpp/util/ThriftSerializerTest.thrift deleted file mode 100644 index 0f7d11d3ec..0000000000 --- a/thrift/lib/cpp/util/ThriftSerializerTest.thrift +++ /dev/null @@ -1,29 +0,0 @@ -struct TestValue { - 1: i64 legalClicks, - 2: i64 rawImpressions, - 3: i64 lastLegalClickTime, - 4: i64 lastLegalImpressionTime, - 5: i64 socialClicks, - 6: i64 socialImpressions, - 7: double throttle, - 8: i64 pageOtherImpressions, - 9: i64 pageCanvasImpressions, - 10: i64 pageProfileImpressions, - 11: i64 pageSearchImpressions, - 12: i64 pageEventImpressions, - 13: i64 pageGroupImpressions, - 14: i64 pagePhotoImpressions, - 15: i64 pageHomeImpressions, - 16: i64 position1Impressions, - 17: i64 position2Impressions, - 18: i64 position3Impressions, - 19: i64 feedbackLegalLikes, - 20: i64 feedbackLegalDislikes, - 21: list rollingWindowLegalClicks, - 22: list rollingWindowRawImpressions, - 23: list rollingWindowFeedbackLegalLikes, - 24: list rollingWindowFeedbackLegalDislikes, - 25: i64 pageAlbumImpressions, - 26: i64 pageAdBoardImpressions, - 27: string text, -} diff --git a/thrift/lib/cpp/util/VarintUtils.h b/thrift/lib/cpp/util/VarintUtils.h deleted file mode 100644 index a12b8fc0fa..0000000000 --- a/thrift/lib/cpp/util/VarintUtils.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_VARINTUTILS_H_ -#define THRIFT_UTIL_VARINTUTILS_H_ 1 - -#include - -namespace apache { namespace thrift { - -namespace util { - -/** - * Read an i16 from the wire as a varint. The MSB of each byte is set - * if there is another byte to follow. This can read up to 3 bytes. - */ -uint32_t readVarint16(uint8_t const* ptr, int16_t* i16, - uint8_t const* boundary); - -/** - * Read an i32 from the wire as a varint. The MSB of each byte is set - * if there is another byte to follow. This can read up to 5 bytes. - */ -uint32_t readVarint32(uint8_t const* ptr, int32_t* i32, - uint8_t const* boundary); - -/** - * Read an i64 from the wire as a proper varint. The MSB of each byte is set - * if there is another byte to follow. This can read up to 10 bytes. - * Caller is responsible for advancing ptr after call. - */ -uint32_t readVarint64(uint8_t const* ptr, int64_t* i64, - uint8_t const* boundary); - -/** - * Write an i32 as a varint. Results in 1-5 bytes on the wire. - */ -uint32_t writeVarint32(uint32_t n, uint8_t* pkt); - -/** - * Write an i16 as a varint. Results in 1-3 bytes on the wire. - */ -uint32_t writeVarint16(uint16_t n, uint8_t* pkt); - -}}} // apache::thrift::util - -#include "VarintUtils.tcc" - -#endif // THRIFT_UTIL_VARINTUTILS_H_ diff --git a/thrift/lib/cpp/util/VarintUtils.tcc b/thrift/lib/cpp/util/VarintUtils.tcc deleted file mode 100644 index c4d9217b2a..0000000000 --- a/thrift/lib/cpp/util/VarintUtils.tcc +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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 "folly/experimental/io/Cursor.h" - -namespace apache { namespace thrift { - -namespace util { - -template ::value, - bool>::type = false> -T readVarint(CursorT& c) { - T retVal = 0; - uint8_t shift = 0; - uint8_t rsize = 0; - while (true) { - uint8_t byte; - c.pull(&byte, sizeof(byte)); - rsize++; - retVal |= (uint64_t)(byte & 0x7f) << shift; - shift += 7; - if (!(byte & 0x80)) { - return retVal; - } - if (rsize > sizeof(T)) { - // Too big for return type - throw std::out_of_range("invalid varint read"); - } - } -} - -template -void writeVarint(folly::io::RWPrivateCursor& c, T value) { - while (true) { - if ((value & ~0x7F) == 0) { - c.write((int8_t)value); - break; - } else { - c.write((int8_t)((value & 0x7F) | 0x80)); - value = (unsigned)value >> 7; - } - } -} - -}}} // apache::thrift::util diff --git a/thrift/lib/cpp/util/shared_ptr_util.h b/thrift/lib/cpp/util/shared_ptr_util.h deleted file mode 100644 index 282deb0a66..0000000000 --- a/thrift/lib/cpp/util/shared_ptr_util.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. - */ -#ifndef THRIFT_UTIL_SHARED_PTR_UTIL_H_ -#define THRIFT_UTIL_SHARED_PTR_UTIL_H_ 1 - -#include -#include -#include - -/** - * Helper macros to allow function overloading even when using - * boost::shared_ptr. - * - * shared_ptr makes overloading really annoying, since shared_ptr defines - * constructor methods to allow one shared_ptr type to be constructed from any - * other shared_ptr type. (Even if it would be a compile error to actually try - * to instantiate the constructor.) These macros add an extra argument to the - * function to cause it to only be instantiated if a pointer of type T is - * convertible to a pointer of type U. - * - * THRIFT_OVERLOAD_IF should be used in function declarations. - * THRIFT_OVERLOAD_IF_DEFN should be used in the function definition, if it is - * defined separately from where it is declared. - */ -#define THRIFT_OVERLOAD_IF_DEFN(T, Y) \ - typename ::boost::enable_if::type, \ - void*>::type - -#define THRIFT_OVERLOAD_IF(T, Y) \ - THRIFT_OVERLOAD_IF_DEFN(T, Y) = NULL - -namespace apache { namespace thrift { - -/** - * A helper functor that can be used as a shared_ptr destructor, but that does - * nothing at all. - * - * This can be used to create a shared_ptr to an object that shouldn't really - * be destroyed when the last shared_ptr to it goes away. This is useful in - * some situations to call thrift APIs that require a shared_ptr argument when - * you have an object on the stack or otherwise owned by some other part of the - * code. - * - * WARNING: If at all possible, please avoid using this class to create - * shared_ptr. Attempting to use shared_ptrs with manually managed objects is - * generally a bad idea. This class should only be used in a few rare cases - * where a temporary shared_ptr is needed, and you can guarantee that all - * shared_ptrs to the object will be destroyed before the object itself is - * destroyed. - */ -template -class NoopPtrDestructor { - public: - void operator()(T* obj) {}; -}; - -}} // apache::thrift - -#endif // THRIFT_UTIL_SHARED_PTR_UTIL_H_ diff --git a/thrift/libs/libasync.a b/thrift/libs/libasync.a deleted file mode 100644 index 9685e47a90..0000000000 Binary files a/thrift/libs/libasync.a and /dev/null differ diff --git a/thrift/libs/libasync_base.a b/thrift/libs/libasync_base.a deleted file mode 100644 index 60f21db90f..0000000000 Binary files a/thrift/libs/libasync_base.a and /dev/null differ diff --git a/thrift/libs/libasync_ssl.a b/thrift/libs/libasync_ssl.a deleted file mode 100644 index 0a9798ced3..0000000000 Binary files a/thrift/libs/libasync_ssl.a and /dev/null differ diff --git a/thrift/libs/libconcurrency.a b/thrift/libs/libconcurrency.a deleted file mode 100644 index 13b727193e..0000000000 Binary files a/thrift/libs/libconcurrency.a and /dev/null differ diff --git a/thrift/libs/libexample.a b/thrift/libs/libexample.a deleted file mode 100644 index b63d888985..0000000000 Binary files a/thrift/libs/libexample.a and /dev/null differ diff --git a/thrift/libs/libheader.a b/thrift/libs/libheader.a deleted file mode 100644 index 1a06dfc278..0000000000 Binary files a/thrift/libs/libheader.a and /dev/null differ diff --git a/thrift/libs/libhttpparser.a b/thrift/libs/libhttpparser.a deleted file mode 100644 index 497f40f4ce..0000000000 Binary files a/thrift/libs/libhttpparser.a and /dev/null differ diff --git a/thrift/libs/libinternal_util.a b/thrift/libs/libinternal_util.a deleted file mode 100644 index 8b48f3a0e7..0000000000 Binary files a/thrift/libs/libinternal_util.a and /dev/null differ diff --git a/thrift/libs/libprocessor.a b/thrift/libs/libprocessor.a deleted file mode 100644 index 10abbe568c..0000000000 Binary files a/thrift/libs/libprocessor.a and /dev/null differ diff --git a/thrift/libs/libprotocol.a b/thrift/libs/libprotocol.a deleted file mode 100644 index e7f47ce63b..0000000000 Binary files a/thrift/libs/libprotocol.a and /dev/null differ diff --git a/thrift/libs/libreflection.a b/thrift/libs/libreflection.a deleted file mode 100644 index 8b277f0dd5..0000000000 --- a/thrift/libs/libreflection.a +++ /dev/null @@ -1 +0,0 @@ -! diff --git a/thrift/libs/libserver.a b/thrift/libs/libserver.a deleted file mode 100644 index b2770bbd5b..0000000000 Binary files a/thrift/libs/libserver.a and /dev/null differ diff --git a/thrift/libs/libthrift.a b/thrift/libs/libthrift.a deleted file mode 100644 index a3ba64e7f9..0000000000 Binary files a/thrift/libs/libthrift.a and /dev/null differ diff --git a/thrift/libs/libthrift_base.a b/thrift/libs/libthrift_base.a deleted file mode 100644 index 0983d02ef7..0000000000 Binary files a/thrift/libs/libthrift_base.a and /dev/null differ diff --git a/thrift/libs/libthrift_exception.a b/thrift/libs/libthrift_exception.a deleted file mode 100644 index da9b990cd3..0000000000 Binary files a/thrift/libs/libthrift_exception.a and /dev/null differ diff --git a/thrift/libs/libtransport.a b/thrift/libs/libtransport.a deleted file mode 100644 index 3e2c21e240..0000000000 Binary files a/thrift/libs/libtransport.a and /dev/null differ diff --git a/thrift/libs/libtransport_ssl.a b/thrift/libs/libtransport_ssl.a deleted file mode 100644 index b2167533e4..0000000000 Binary files a/thrift/libs/libtransport_ssl.a and /dev/null differ diff --git a/thrift/libs/libutil.a b/thrift/libs/libutil.a deleted file mode 100644 index 3f081c7b05..0000000000 Binary files a/thrift/libs/libutil.a and /dev/null differ diff --git a/thrift/openhandles.h b/thrift/openhandles.h deleted file mode 100644 index 45583617d0..0000000000 --- a/thrift/openhandles.h +++ /dev/null @@ -1,220 +0,0 @@ -/** - * Thrift server for leveldb - * @author Dhruba Borthakur (dhruba@gmail.com) - * Copyright 2012 Facebook - */ - -#ifndef THRIFT_LEVELDB_SERVER_H_ -#define THRIFT_LEVELDB_SERVER_H_ - -#include -#include -#include "DB.h" -#include -#include -#include -#include -#include - -#include "leveldb/db.h" -#include "util/random.h" - -using boost::shared_ptr; -using std::unordered_map; - -using namespace ::Tleveldb; - -// List of snapshots. Each entry has a unique snapshot id. -struct snapshotEntry { - int64_t snapshotid; - const rocksdb::Snapshot* lsnap; - - snapshotEntry() : snapshotid(-1), lsnap(NULL) { - } - - private: - snapshotEntry(const snapshotEntry&); - snapshotEntry& operator= (const snapshotEntry&); -}; - -// List of iterators. Each entry has a unique iterator id. -struct iteratorEntry { - int64_t iteratorid; - rocksdb::Iterator* liter; - - iteratorEntry() : iteratorid(-1), liter(NULL) { - } - - private: - iteratorEntry(const iteratorEntry&); - iteratorEntry& operator= (const iteratorEntry&); -}; - - -// -// This is the information stored for each open database. Each open instance -// of the database has a list of snapshots and a list of iterators that are -// currenty open -// -struct onehandle { - Text name; - rocksdb::DB* onedb; // locate the localleveldb instance - int refcount; // currently not used - std::atomic currentSnapshotId; // valid snapshotids > 0 - std::atomic currentIteratorId; // valid iterators > 0 - unordered_map snaplist; - // list of snapshots for this database - unordered_map iterlist; - // list of iterators for this database - - onehandle() : onedb(NULL), - refcount(0), currentSnapshotId(1), currentIteratorId(1) { - } - - // stores a new leveldb snapshot and returns an unique id - int64_t addSnapshot(const rocksdb::Snapshot* l) { - struct snapshotEntry* news = new snapshotEntry; - news->snapshotid = currentSnapshotId++; - news->lsnap = l; - snaplist[news->snapshotid] = news; - return news->snapshotid; - } - - // lookup a snapshot from its ids - const rocksdb::Snapshot* lookupSnapshot(int64_t id) { - auto p = snaplist.find(id); - if (p == snaplist.end()) { - fprintf(stderr, "get:No snaphot with id %ld\n", id); - return NULL; - } - return p->second->lsnap; - } - - // remove a snapshot from this database - const rocksdb::Snapshot* removeSnapshot(int64_t id) { - const rocksdb::Snapshot* l = lookupSnapshot(id); - if (l != NULL) { - int numRemoved = snaplist.erase(id); - assert(numRemoved == 1); - return l; - } - return NULL; // not found - } - - // stores a new leveldb iterator and returns an unique id - int64_t addIterator(rocksdb::Iterator* l) { - struct iteratorEntry* news = new iteratorEntry; - news->iteratorid = currentIteratorId++; - news->liter = l; - iterlist[news->iteratorid] = news; - return news->iteratorid; - } - - // lookup a iterator from its ids - rocksdb::Iterator* lookupIterator(int64_t id) { - auto p = iterlist.find(id); - if (p == iterlist.end()) { - fprintf(stderr, "lookupIterator:No iterator with id %ld\n", id); - return NULL; - } - return p->second->liter; - } - - // remove a iterator from this database - rocksdb::Iterator* removeIterator(int64_t id) { - rocksdb::Iterator* i = lookupIterator(id); - if (i != NULL) { - int numRemoved = iterlist.erase(id); - assert(numRemoved == 1); - return i; - } - return NULL; // not found - } - - private: - onehandle(const onehandle&); - onehandle& operator= (const onehandle&); -}; - -class OpenHandles { - public: - - OpenHandles() { - } - - // Inserts a new database into the list. - // If the database is already open, increase refcount. - // If the database is not already open, open and insert into list. - void add(rocksdb::Options& options, Text dbname, std::string dbdir) { - struct onehandle* found = head_[dbname]; - if (found == NULL) { - found = new onehandle; - found->name = dbname; - fprintf(stderr, "openhandle.add: Opening leveldb DB %s\n", - dbname.c_str()); - rocksdb::Status status = rocksdb::DB::Open(options, dbdir, &found->onedb); - if (!status.ok()) { - LeveldbException e; - e.errorCode = Code::kIOError; - e.message = "Unable to open database"; - fprintf(stderr, "openhandle.add: Unable to open database %s\n", - dbname.c_str()); - throw e; - } - assert(found->onedb != NULL); - head_[dbname] = found; - } - found->refcount++; - } - - rocksdb::DB* get(Text dbname, struct onehandle** f) { - auto p = head_.find(dbname); - if (p == head_.end()) { - fprintf(stderr, "get:No db with name\n"); - return NULL; - } - struct onehandle* found = p->second; - if (found->refcount <= 0) { - fprintf(stderr, "get:bad refcount\n."); - return NULL; - } - // returns the onehandle if asked to do so - if (f != NULL) { - *f = found; - } - return found->onedb; - } - - bool remove(Text dbname) { - auto p = head_.find(dbname); - if (p == head_.end()) { - fprintf(stderr, "get:No db with name\n"); - return false; - } - struct onehandle* found = p->second; - if (found->refcount == 1) { - delete found->onedb; // close database - int numRemoved = head_.erase(dbname); - assert (numRemoved == 1); - } else { - found->refcount--; // decrement refcount - } - return true; - } - - private: - unordered_map head_; // all open databases - - struct onehandle* lookup(Text dbname) { - auto p = head_.find(dbname); - if (p == head_.end()) { - fprintf(stderr, "get:No db with name\n"); - return NULL; - } - return p->second; - } -}; - -#endif // THRIFT_LEVELDB_SERVER_H_ - - diff --git a/thrift/server.cpp b/thrift/server.cpp deleted file mode 100644 index 5e590d8ce0..0000000000 --- a/thrift/server.cpp +++ /dev/null @@ -1,47 +0,0 @@ -/** - * Thrift server for leveldb - * @author Dhruba Borthakur (dhruba@gmail.com) - * Copyright 2012 Facebook - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include "openhandles.h" -#include "server_options.h" - -#include "leveldb/db.h" -#include "leveldb/write_batch.h" - -using namespace apache::thrift; -using namespace apache::thrift::protocol; -using namespace apache::thrift::transport; -using namespace apache::thrift::server; -using namespace Tleveldb; -using boost::shared_ptr; - -extern "C" void startServer(int argc, char** argv); -extern "C" void stopServer(int port); -extern ServerOptions server_options; - -void signal_handler(int sig) { - switch (sig) { - case SIGINT: - fprintf(stderr, "Received SIGINT, stopping leveldb server"); - stopServer(server_options.getPort()); - break; - } -} - -int main(int argc, char **argv) { - signal(SIGINT, signal_handler); - startServer(argc, argv); - sleep(100000000L); - return 0; -} - diff --git a/thrift/server_options.h b/thrift/server_options.h deleted file mode 100644 index de604fe0ee..0000000000 --- a/thrift/server_options.h +++ /dev/null @@ -1,214 +0,0 @@ -/** - * Options for the Thrift leveldb server. - * @author Dhruba Borthakur (dhruba@gmail.com) - * Copyright 2012 Facebook - */ - -#ifndef THRIFT_LEVELDB_SERVER_OPTIONS_ -#define THRIFT_LEVELDB_SERVER_OPTIONS_ - -#include -#include - -#include "leveldb/db.h" -#include "leveldb/cache.h" - -// -// These are configuration options for the entire server. -// -class ServerOptions { - private: - int num_threads_; // number of thrift server threads - int cache_numshardbits_; // cache shards - long cache_size_; // cache size in bytes - int port_; // port number - std::string hostname_; // host name of this machine - std::string rootdir_; // root directory of all DBs - rocksdb::Cache* cache_; // the block cache - - // Number of concurrent threads to run. - const static int DEFAULT_threads = 1; - - // Number of bytes to use as a cache of uncompressed data. - // Default setting of 100 MB - const static long DEFAULT_cache_size = 100 * 1024 * 1024; - - // Number of shards for the block cache is 2 ** DEFAULT_cache_numshardbits. - // Negative means use default settings. This is applied only - // if DEFAULT_cache_size is non-negative. - const static int DEFAULT_cache_numshardbits = 6; - - // default port - const static int DEFAULT_PORT = 6666; - -public: - ServerOptions() : num_threads_(DEFAULT_threads), - cache_numshardbits_(DEFAULT_cache_numshardbits), - cache_size_(DEFAULT_cache_size), - port_(DEFAULT_PORT), - cache_(NULL) { - char* buf = new char[HOST_NAME_MAX]; - if (gethostname(buf, HOST_NAME_MAX) == 0) { - hostname_ = buf; - } else { - hostname_ = "unknownhost"; - delete buf; - } - rootdir_ = "/tmp"; // default rootdir - } - - // - // Returns succes if all command line options are parsed successfully, - // otherwise returns false. - bool parseOptions(int argc, char** argv) { - int n; - uint64_t l; - char junk; - for (int i = 1; i < argc; i++) { - if (sscanf(argv[i], "--port=%d%c", &n, &junk) == 1) { - port_ = n; - } else if (sscanf(argv[i], "--threads=%d%c", &n, &junk) == 1) { - num_threads_ = n; - } else if (sscanf(argv[i], "--cache_size=%ld%c", &l, &junk) == 1) { - cache_size_ = l; - } else if (sscanf(argv[i], "--cache_numshardbits=%d%c", &n, &junk) == 1) { - cache_numshardbits_ = n; - } else if (strncmp(argv[i], "--hostname=", 11) == 0) { - hostname_ = argv[i] + 11; - } else if (strncmp(argv[i], "--rootdir=", 10) == 0) { - rootdir_ = argv[i] + 10; - } else { - fprintf(stderr, "Invalid flag '%s'\n", argv[i]); - return false; - } - } - return true; - } - - // Create the directory format on disk. - // Returns true on success, false on failure - bool createDirectories() { - mode_t mode = 0755; - const char* dir = getRootDirectory().c_str(); - if (mkpath(dir, mode) < 0) { - fprintf(stderr, "Unable to create root directory %s\n", dir); - return false; - } - dir = getDataDirectory().c_str();; - if (mkpath(dir, mode) < 0) { - fprintf(stderr, "Unable to create data directory %s\n", dir); - return false; - } - dir = getConfigDirectory().c_str();; - if (mkpath(dir, mode) < 0) { - fprintf(stderr, "Unable to create config directory %s\n", dir); - return false; - } - return true; - } - - // create a cache instance that is shared by all DBs served by this server - void createCache() { - if (cache_numshardbits_ >= 1) { - cache_ = rocksdb::NewLRUCache(cache_size_, cache_numshardbits_); - } else { - cache_ = rocksdb::NewLRUCache(cache_size_); - } - } - - // Returns the base server port - int getPort() { - return port_; - } - - // Returns the assoc server port. Currently, it is one more than the base - // server port. In fiture, the assoc service would be supported on multiple - // ports, each port serving a distinct range of keys. - int getAssocPort() { - return port_ + 1; - } - - // Returns the cache - rocksdb::Cache* getCache() { - return cache_; - } - - // Returns the configured number of server threads - int getNumThreads() { - return num_threads_; - } - - // Returns the root directory where the server is rooted. - // The hostname is appended to the rootdir to arrive at the directory name. - std::string getRootDirectory() { - return rootdir_ + "/" + hostname_; - } - - // Returns the directory where the server stores all users's DBs. - std::string getDataDirectory() { - return getRootDirectory() + "/userdata/"; - } - - // Returns the directory where the server stores all its configurations - std::string getConfigDirectory() { - return getRootDirectory() + "/config/"; - } - - // Returns the data directory for the specified DB - std::string getDataDirectory(const std::string& dbname) { - return getDataDirectory() + dbname; - } - - // Returns true if the DB name is valid, otherwise return false - bool isValidName(const std::string& dbname) { - // The DB name cannot have '/' in the name - if (dbname.find('/') < dbname.size()) { - return false; - } - return true; - } - - private: - static int do_mkdir(const char *path, mode_t mode) { - struct stat st; - int status = 0; - - if (stat(path, &st) != 0) { - if (mkdir(path, mode) != 0) { - status = -1; - } - } else if (!S_ISDIR(st.st_mode)) { - errno = ENOTDIR; - status = -1; - } - return(status); - } - - // mkpath - ensure all directories in path exist - static int mkpath(const char *path, mode_t mode) - { - char *pp; - char *sp; - int status; - char *newpath = strdup(path); - - status = 0; - pp = newpath; - while (status == 0 && (sp = strchr(pp, '/')) != 0) { - if (sp != pp) { - /* Neither root nor double slash in path */ - *sp = '\0'; - status = do_mkdir(newpath, mode); - *sp = '/'; - } - pp = sp + 1; - } - if (status == 0) { - status = do_mkdir(path, mode); - } - free(newpath); - return (status); - } -}; - -#endif // THRIFT_LEVELDB_SERVER_OPTIONS_ diff --git a/thrift/server_utils.cpp b/thrift/server_utils.cpp deleted file mode 100644 index dea566b4dd..0000000000 --- a/thrift/server_utils.cpp +++ /dev/null @@ -1,491 +0,0 @@ -/** - * Thrift server for leveldb - * @author Dhruba Borthakur (dhruba@gmail.com) - * Copyright 2012 Facebook - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "openhandles.h" -#include "server_options.h" -#include "assoc.h" - -#include "leveldb/db.h" -#include "leveldb/write_batch.h" - -using namespace apache::thrift; -using namespace apache::thrift::util; -using namespace apache::thrift::protocol; -using namespace apache::thrift::transport; -using namespace apache::thrift::server; -using namespace apache::thrift::async; -using namespace Tleveldb; -using boost::shared_ptr; - -extern "C" void startServer(int argc, char** argv); -extern "C" void stopServer(int port); - -static boost::shared_ptr baseServer; -static boost::shared_ptr assocServer; - -// The global object that stores the default configuration of the server -ServerOptions server_options; - -class DBHandler : virtual public DBIf { - public: - DBHandler(OpenHandles* oh) { - openHandles = oh; - } - - void Open(DBHandle& _return, const Text& dbname, - const DBOptions& dboptions) { - printf("Open %s\n", dbname.c_str()); - if (!server_options.isValidName(dbname)) { - LeveldbException e; - e.errorCode = Code::kInvalidArgument; - e.message = "Bad DB name"; - fprintf(stderr, "Bad DB name %s\n", dbname.c_str()); - throw e; - } - std::string dbdir = server_options.getDataDirectory(dbname); - rocksdb::Options options; - - // fill up per-server options - options.block_cache = server_options.getCache(); - - // fill up per-DB options - options.create_if_missing = dboptions.create_if_missing; - options.error_if_exists = dboptions.error_if_exists; - options.write_buffer_size = dboptions.write_buffer_size; - options.max_open_files = dboptions.max_open_files; - options.block_size = dboptions.block_size; - options.block_restart_interval = dboptions.block_restart_interval; - if (dboptions.compression == kNoCompression) { - options.compression = rocksdb::kNoCompression; - } else if (dboptions.compression == kSnappyCompression) { - options.compression = rocksdb::kSnappyCompression; - } - if (dboptions.num_levels > 0) - options.num_levels = dboptions.num_levels; - if (dboptions.level0_file_num_compaction_trigger > 0) - options.level0_file_num_compaction_trigger = dboptions.level0_file_num_compaction_trigger; - if (dboptions.level0_slowdown_writes_trigger > 0) - options.level0_slowdown_writes_trigger = dboptions.level0_slowdown_writes_trigger; - if (dboptions.level0_stop_writes_trigger) - options.level0_stop_writes_trigger = dboptions.level0_stop_writes_trigger; - if (dboptions.target_file_size_base > 0) - options.target_file_size_base = dboptions.target_file_size_base; - if (dboptions.target_file_size_multiplier > 0) - options.target_file_size_multiplier = dboptions.target_file_size_multiplier; - if (dboptions.max_bytes_for_level_base) - options.max_bytes_for_level_base = dboptions.max_bytes_for_level_base; - if (dboptions.max_bytes_for_level_multiplier) - options.max_bytes_for_level_multiplier = dboptions.max_bytes_for_level_multiplier; - if (dboptions.max_grandparent_overlap_factor) - options.max_grandparent_overlap_factor = dboptions.max_grandparent_overlap_factor; - if (dboptions.disableDataSync) - options.disableDataSync = dboptions.disableDataSync; - openHandles->add(options, dbname, dbdir); - _return.dbname = dbname; - } - - Code Close(const DBHandle& dbhandle, const Text& dbname) { - // - // We do not close any handles for now, otherwise we have to do - // some locking that will degrade performance in the normal case. - // - return Code::kNotSupported; - } - - Code Put(const DBHandle& dbhandle, const kv& kv, - const WriteOptions& options) { - rocksdb::WriteOptions woptions; - woptions.sync = options.sync; - woptions.disableWAL = options.disableWAL; - rocksdb::Slice key, value; - key.data_ = kv.key.data.data(); - key.size_ = kv.key.size; - value.data_ = kv.value.data.data(); - value.size_ = kv.value.size; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, NULL); - if (db == NULL) { - return Code::kNotFound; - } - rocksdb::Status status = db->Put(woptions, key, value); - if (status.ok()) { - return Code::kOk; - } - return Code::kIOError; - } - - Code Delete(const DBHandle& dbhandle, const Slice& kv, - const WriteOptions& options) { - rocksdb::WriteOptions woptions; - woptions.sync = options.sync; - woptions.disableWAL = options.disableWAL; - rocksdb::Slice key; - key.data_ = kv.data.data(); - key.size_ = kv.size; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, NULL); - if (db == NULL) { - return Code::kNotFound; - } - rocksdb::Status status = db->Delete(woptions, key); - if (status.ok()) { - return Code::kOk; - } - return Code::kIOError; - } - - Code Write(const DBHandle& dbhandle, const std::vector & batch, - const WriteOptions& options) { - rocksdb::WriteOptions woptions; - rocksdb::WriteBatch lbatch; - woptions.sync = options.sync; - woptions.disableWAL = options.disableWAL; - rocksdb::Slice key, value; - for (unsigned int i = 0; i < batch.size(); i++) { - kv one = batch[i]; - key.data_ = one.key.data.data(); - key.size_ = one.key.size; - value.data_ = one.value.data.data(); - value.size_ = one.value.size; - lbatch.Put(key, value); - } - rocksdb::DB* db = openHandles->get(dbhandle.dbname, NULL); - if (db == NULL) { - return Code::kNotFound; - } - rocksdb::Status status = db->Write(woptions, &lbatch); - if (status.ok()) { - return Code::kOk; - } - return Code::kIOError; - } - - void Get(ResultItem& _return, const DBHandle& dbhandle, const Slice& inputkey, - const ReadOptions& options) { - struct onehandle* thishandle; - _return.status = Code::kNotFound; - std::string ret; - rocksdb::Slice ikey; - ikey.data_ = inputkey.data.data(); - ikey.size_ = inputkey.size; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return; - } - assert(thishandle != NULL); - const rocksdb::Snapshot* s = NULL; - if (options.snapshot.snapshotid > 0) { - s = thishandle->lookupSnapshot(options.snapshot.snapshotid); - assert(s != NULL); - if (s == NULL) { - return; - } - } - rocksdb::ReadOptions roptions; - roptions.verify_checksums = options.verify_checksums; - roptions.fill_cache = options.fill_cache; - roptions.snapshot = s; - - rocksdb::Status status = db->Get(roptions, ikey, &ret); - if (status.ok()) { - _return.value.data = ret.data(); - _return.value.size = ret.size(); - _return.status = Code::kOk; - } - } - - void NewIterator(ResultIterator& _return, const DBHandle& dbhandle, - const ReadOptions& options, IteratorType iteratorType, - const Slice& target) { - struct onehandle* thishandle; - _return.status = Code::kNotFound; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return; - } - assert(thishandle != NULL); - - // check to see if snapshot is specified - const rocksdb::Snapshot* s = NULL; - if (options.snapshot.snapshotid > 0) { - s = thishandle->lookupSnapshot(options.snapshot.snapshotid); - assert(s != NULL); - if (s == NULL) { - return; - } - } - - // create leveldb iterator - rocksdb::ReadOptions roptions; - roptions.verify_checksums = options.verify_checksums; - roptions.fill_cache = options.fill_cache; - roptions.snapshot = s; - rocksdb::Iterator* iter = db->NewIterator(roptions); - if (iter == NULL) { - return; - } - - // position iterator at right place - if (iteratorType == IteratorType::seekToFirst) { - iter->SeekToFirst(); - } else if (iteratorType == IteratorType::seekToLast) { - iter->SeekToLast(); - } else if (iteratorType == IteratorType::seekToKey) { - rocksdb::Slice key; - key.data_ = target.data.data(); - key.size_ = target.size; - iter->Seek(key); - } else { - delete iter; - _return.status = Code::kInvalidArgument; - return; - } - - // insert iterator into openhandle list, get unique id - int64_t id = thishandle->addIterator(iter); - _return.iterator.iteratorid = id; - _return.status = kOk; - } - - // Delete existing iterator - Code DeleteIterator(const DBHandle& dbhandle, const Iterator& iterator) { - // find the db - struct onehandle* thishandle; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return kNotFound; - } - assert(thishandle != NULL); - - // find the leveldb iterator for this db - rocksdb::Iterator* it = - thishandle->lookupIterator(iterator.iteratorid); - if (it == NULL) { - // this must have been cleaned up by the last call to GetNext - return kOk; - } - thishandle->removeIterator(iterator.iteratorid); - delete it; // cleanup - return kOk; - } - - // read the next value from the iterator - void GetAnother(ResultPair& _return, const DBHandle& dbhandle, - const Iterator& iterator, const bool doNext) { - - // find the db - struct onehandle* thishandle; - _return.status = Code::kNotFound; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return; - } - assert(thishandle != NULL); - - // find the leveldb iterator for this db - rocksdb::Iterator* it = - thishandle->lookupIterator(iterator.iteratorid); - assert(it != NULL); - if (it == NULL) { - return; - } - - // If the iterator has reached the end close it rightaway. - // There is no need for the application to make another thrift - // call to cleanup the iterator. - if (!it->Valid()) { - thishandle->removeIterator(iterator.iteratorid); - delete it; // cleanup - _return.status = Code::kEnd; // no more elements - return; - } - - // if iterator has encountered any corruption - if (!it->status().ok()) { - thishandle->removeIterator(iterator.iteratorid); - delete it; // cleanup - _return.status = Code::kIOError; // error in data - return; - } - - // find current key-value - rocksdb::Slice key = it->key(); - rocksdb::Slice value = it->value(); - - // pack results back to client - _return.keyvalue.key.data.assign(key.data_, key.size_); - _return.keyvalue.key.size = key.size_; - _return.keyvalue.value.data.assign(value.data_, value.size_); - _return.keyvalue.value.size = value.size_; - _return.status = Code::kOk; // success - - // move to next or previous value - if (doNext) { - it->Next(); - } else { - it->Prev(); - } - } - - // read the next value from the iterator - void GetNext(ResultPair& _return, const DBHandle& dbhandle, - const Iterator& iterator) { - GetAnother(_return, dbhandle, iterator, 1); - } - - // read the prev value from the iterator - void GetPrev(ResultPair& _return, const DBHandle& dbhandle, - const Iterator& iterator) { - GetAnother(_return, dbhandle, iterator, 0); - } - - void GetSnapshot(ResultSnapshot& _return, const DBHandle& dbhandle) { - _return.status = kIOError; - struct onehandle* thishandle; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return; - } - // create leveldb snapshot - const rocksdb::Snapshot* s = db->GetSnapshot(); - - // store snapshot in dbhandle, get unique id. - int64_t id = thishandle->addSnapshot(s); - _return.snapshot.snapshotid = id; - _return.status = kOk; - } - - Code ReleaseSnapshot(const DBHandle& dbhandle, const Snapshot& snapshot) { - struct onehandle* thishandle; - rocksdb::DB* db = openHandles->get(dbhandle.dbname, &thishandle); - if (db == NULL) { - return kNotFound; - } - const rocksdb::Snapshot* s = thishandle->removeSnapshot(snapshot.snapshotid); - if (s == NULL) { - return Code::kNotFound; - } - db->ReleaseSnapshot(s); // release leveldb snapshot - return Code::kOk; - } - - Code CompactRange(const DBHandle& dbhandle, const Slice& begin, - const Slice& end) { - rocksdb::DB* db = openHandles->get(dbhandle.dbname, NULL); - if (db == NULL) { - return Code::kNotFound; - } - rocksdb::Slice k1, *start = &k1; - k1.data_ = begin.data.data(); - k1.size_ = begin.size; - rocksdb::Slice k2, *stop = &k2; - k2.data_ = begin.data.data(); - k2.size_ = begin.size; - - // check special ranges. - if (start->size_ == 0) { - start = NULL; - } - if (stop->size_ == 0) { - stop = NULL; - } - db->CompactRange(start, stop); - return Code::kOk; - } - - private: - OpenHandles* openHandles; -}; - -// -// starts a service -static void* startOneService(void *arg) { - TSimpleServer* t = (TSimpleServer *)arg; - t->serve(); - return NULL; -} - - -// Starts a very simple thrift server -void startServer(int argc, char** argv) { - - // process command line options - if (!server_options.parseOptions(argc, argv)) { - exit(1); - } - - // create directories for server - if (!server_options.createDirectories()) { - exit(1); - } - // create the server's block cache - server_options.createCache(); - - // data structure to record ope databases - OpenHandles* openHandles = new OpenHandles(); - - shared_ptr transportFactory(new TBufferedTransportFactory()); - shared_ptr protocolFactory(new TBinaryProtocolFactory()); - - // create the service to process the normal get/put to leveldb. - int port = server_options.getPort(); - fprintf(stderr, "Server starting on port %d\n", port); - shared_ptr serverTransport(new TServerSocket(port)); - shared_ptr handler(new DBHandler(openHandles)); - shared_ptr processor(new DBProcessor(handler)); - TSimpleServer* baseServer = new TSimpleServer(processor, serverTransport, - transportFactory, protocolFactory); - pthread_t dbServerThread; - int rc = pthread_create(&dbServerThread, NULL, startOneService, - (void *)baseServer); - if (rc != 0) { - fprintf(stderr, "Unable to start DB server on port %d\n.", port); - exit(1); - } - - // create the service to process the assoc get/put to leveldb. - int assocport = server_options.getAssocPort(); - fprintf(stderr, "Assoc Service starting on port %d\n", assocport); - shared_ptr assocTransport(new TServerSocket(assocport)); - shared_ptr assocHandler(new AssocServiceHandler(openHandles)); - shared_ptr assocProcessor(new AssocServiceProcessor(assocHandler)); - TSimpleServer* assocServer = new TSimpleServer(assocProcessor, - assocTransport, transportFactory, protocolFactory); - pthread_t assocServerThread; - rc = pthread_create(&assocServerThread, NULL, startOneService, - (void *)assocServer); - if (rc != 0) { - fprintf(stderr, "Unable to start assoc server on port %d\n.", port); - exit(1); - } -} - -/** -void startEventServer(int port) { - shared_ptr handler(new DBHandler()); - shared_ptr processor(new DBProcessor(handler)); - shared_ptr asyncProcessor(new TSyncToAsyncProcessor(processor)); - TEventServerCreator creator(asyncProcessor, (uint16_t)port, 2); - tServer = creator.createServer(); - tServer.serve(); -} -**/ - -// Stops the thrift server -void stopServer(int port) { - baseServer->stop(); - assocServer->stop(); -} diff --git a/thrift/test/simpletest.cpp b/thrift/test/simpletest.cpp deleted file mode 100644 index daf74edbbe..0000000000 --- a/thrift/test/simpletest.cpp +++ /dev/null @@ -1,356 +0,0 @@ -/** - * Tests for Thrift server for leveldb - * @author Dhruba Borthakur (dhruba@gmail.com) - * Copyright 2012 Facebook - */ -#include -#include -#include -#include -#include -#include -#include -#include "server_options.h" - -using namespace apache::thrift; -using namespace apache::thrift::protocol; -using namespace apache::thrift::transport; -using boost::shared_ptr; -using namespace Tleveldb; - -extern "C" void startServer(int argc, char**argv); -extern "C" void stopServer(int port); -extern ServerOptions server_options; - -static DBHandle dbhandle; -static DBClient* dbclient; -static AssocServiceClient* aclient; -static const Text dbname = "test-dhruba"; -static int ARGC; -static char** ARGV; - -static void cleanupDir(std::string dir) { - // remove old data, if any - char* cleanup = new char[100]; - snprintf(cleanup, 100, "rm -rf %s", dir.c_str()); - system(cleanup); -} - -static void createDatabase() { - DBOptions options; - options.create_if_missing = true; // create - options.error_if_exists = false; // overwrite - options.write_buffer_size = (4<<20); // 4 MB - options.max_open_files = 1000; - options.block_size = 4096; - options.block_restart_interval = 16; - options.compression = kSnappyCompression; - - cleanupDir(server_options.getDataDirectory(dbname)); - - // create the database - dbclient->Open(dbhandle, dbname, options); -} - -static void initialize(int port) { - boost::shared_ptr socket1(new TSocket("localhost", port)); - boost::shared_ptr transport1(new TBufferedTransport(socket1)); - boost::shared_ptr protocol1(new TBinaryProtocol(transport1)); - - // open database - dbclient = new DBClient(protocol1); - transport1->open(); - - boost::shared_ptr socket2(new TSocket("localhost", port+1)); - boost::shared_ptr transport2(new TBufferedTransport(socket2)); - boost::shared_ptr protocol2(new TBinaryProtocol(transport2)); - aclient = new AssocServiceClient(protocol2); - transport2->open(); - - createDatabase(); - printf("Database created.\n"); -} - -// -// Run base leveldb thrift server get/put/iter/scan tests -// -static void testClient() { - WriteOptions writeOptions; - printf("Running base leveldb operations .................\n"); - - // insert record into leveldb - Slice key; - key.data = "Key1"; - key.size = 4; - Slice value; - value.data = "value1"; - value.size = 6; - kv keyvalue; - keyvalue.key = key; - keyvalue.value = value; - int ret = dbclient->Put(dbhandle, keyvalue, writeOptions); - ASSERT_TRUE(ret == Code::kOk); - printf("Put Key1 suceeded.\n"); - - //read it back - ReadOptions readOptions; - ResultItem rValue; - dbclient->Get(rValue, dbhandle, key, readOptions); - ASSERT_TRUE(rValue.status == Code::kOk); - ASSERT_TRUE(value.data.compare(rValue.value.data) == 0); - ASSERT_TRUE(value.size == rValue.value.size); - printf("Get suceeded.\n"); - - // get a snapshot - ResultSnapshot rsnap; - dbclient->GetSnapshot(rsnap, dbhandle); - ASSERT_TRUE(rsnap.status == Code::kOk); - ASSERT_TRUE(rsnap.snapshot.snapshotid > 0); - printf("Snapshot suceeded.\n"); - - // insert a new record into leveldb - Slice key2; - key2.data = "Key2"; - key2.size = 4; - Slice value2; - value2.data = "value2"; - value2.size = 6; - keyvalue.key = key2; - keyvalue.value = value2; - ret = dbclient->Put(dbhandle, keyvalue, writeOptions); - ASSERT_TRUE(ret == Code::kOk); - printf("Put Key2 suceeded.\n"); - - // verify that a get done with a previous snapshot does not find Key2 - readOptions.snapshot = rsnap.snapshot; - dbclient->Get(rValue, dbhandle, key2, readOptions); - ASSERT_TRUE(rValue.status == Code::kNotFound); - printf("Get with snapshot succeeded.\n"); - - // release snapshot - ret = dbclient->ReleaseSnapshot(dbhandle, rsnap.snapshot); - ASSERT_TRUE(ret == Code::kOk); - printf("Snapshot released.\n"); - - // if we try to re-release the same snapshot, it should fail - ret = dbclient->ReleaseSnapshot(dbhandle, rsnap.snapshot); - ASSERT_TRUE(ret == Code::kNotFound); - - // compact whole database - Slice range; - range.size = 0; - ret = dbclient->CompactRange(dbhandle, range, range); - ASSERT_TRUE(ret == Code::kOk); - printf("Compaction trigger suceeded.\n"); - - // create a new iterator to scan all keys from the start - Slice target; - ResultIterator ri; - readOptions.snapshot.snapshotid = 0; - dbclient->NewIterator(ri, dbhandle, readOptions, - IteratorType::seekToFirst, target); - ASSERT_TRUE(ri.status == Code::kOk); - int foundPairs = 0; - while (true) { - ResultPair pair; - dbclient->GetNext(pair, dbhandle, ri.iterator); - if (pair.status == Code::kOk) { - foundPairs++; - } else { - break; - } - } - ASSERT_TRUE(foundPairs == 2); - ret = dbclient->DeleteIterator(dbhandle, ri.iterator); - ASSERT_TRUE(ret == Code::kOk); - printf("Iterator scan-all forward passes.\n"); - - // create a new iterator, position at end and scan backwards - readOptions.snapshot.snapshotid = 0; - dbclient->NewIterator(ri, dbhandle, readOptions, - IteratorType::seekToLast, target); - ASSERT_TRUE(ri.status == Code::kOk); - foundPairs = 0; - while (true) { - ResultPair pair; - dbclient->GetPrev(pair, dbhandle, ri.iterator); - if (pair.status == Code::kOk) { - foundPairs++; - } else { - break; - } - } - ASSERT_TRUE(foundPairs == 2); - ret = dbclient->DeleteIterator(dbhandle, ri.iterator); - ASSERT_TRUE(ret == Code::kOk); - printf("Iterator scan-all backward passes.\n"); - - // create a new iterator, position at middle - readOptions.snapshot.snapshotid = 0; - target = key; - dbclient->NewIterator(ri, dbhandle, readOptions, - IteratorType::seekToKey, target); - ASSERT_TRUE(ri.status == Code::kOk); - foundPairs = 0; - while (true) { - ResultPair pair; - dbclient->GetPrev(pair, dbhandle, ri.iterator); - if (pair.status == Code::kOk) { - foundPairs++; - } else { - break; - } - } - ASSERT_TRUE(foundPairs == 1); - ret = dbclient->DeleteIterator(dbhandle, ri.iterator); - ASSERT_TRUE(ret == Code::kOk); - printf("Iterator scan-selective backward passes.\n"); -} - -// clean up all data that we inserted as part of this test -void clearDatabase() { - WriteOptions writeOptions; - ReadOptions readOptions; - readOptions.snapshot.snapshotid = 0; - printf("Clearing entire database.\n"); - - ResultIterator ri; - Slice dummy; - dbclient->NewIterator(ri, dbhandle, readOptions, - IteratorType::seekToFirst, dummy); - ASSERT_TRUE(ri.status == Code::kOk); - while (true) { - ResultPair pair; - dbclient->GetNext(pair, dbhandle, ri.iterator); - if (pair.status == Code::kOk) { - Slice key = pair.keyvalue.key; - Code code = dbclient->Delete(dbhandle, key, writeOptions); - ASSERT_EQ(code, Code::kOk); - } else { - break; - } - } - // no need to invoke DeleteIterator because we scanned - // till the end using the iterator and ist is auto-deleted - // by the server. -} - -// -// Run assoc tests -// -static void testAssocs() { - WriteOptions writeOptions; - printf("Running assoc leveldb operations ................\n"); - - // insert record into leveldb - int64_t assocType = 100; - int64_t id1 = 1; - int64_t id2 = 2; - int64_t id1Type = 101; - int64_t id2Type = 102; - int64_t ts =3333; - AssocVisibility vis = AssocVisibility::VISIBLE; - bool update_count = true; - int64_t dataVersion = 5; - const Text data = "data......"; - const Text wormhole_comments = "wormhole..."; - int64_t count = aclient->taoAssocPut(dbname, assocType, - id1, id2, id1Type, id2Type, - ts, vis, update_count, - dataVersion, data, wormhole_comments); - ASSERT_GE(count, 0); - printf("AssocPut first record suceeded.\n"); - - // verify assoc counts. - int64_t cnt = aclient->taoAssocCount(dbname, assocType, id1); - ASSERT_EQ(cnt, 1); - printf("AssocCount suceeded.\n"); - - // verify that we can read back what we inserted earlier - std::vector id2list(1); - id2list[0] = id2; - std::vector readback(1); - aclient->taoAssocGet(readback, dbname, - assocType, id1, id2list); - printf("AssocGet suceeded.\n"); - ASSERT_EQ((unsigned int)1, readback.size()); - ASSERT_EQ(id1Type, readback[0].id1Type); - ASSERT_EQ(id2Type, readback[0].id2Type); - ASSERT_EQ(ts, readback[0].time); - ASSERT_EQ(dataVersion, readback[0].dataVersion); - ASSERT_EQ(readback[0].data.compare(data), 0); - - // add one more assoc - const Text data1 = "data1......"; - count = aclient->taoAssocPut(dbname, assocType, - id1, id2+2, id1Type+1, id2Type+1, - ts+1, vis, update_count, - dataVersion+1, data1, wormhole_comments); - ASSERT_EQ(count, 2); - printf("AssocPut second record suceeded.\n"); - - // verify assoc count is 2 - cnt = aclient->taoAssocCount(dbname, assocType, id1); - ASSERT_EQ(cnt, 2); - - // do a range get for id1+type and verify that there - // are two assocs. - readback.clear(); - int64_t offset = 0; - int64_t limit = 1000; - aclient->taoAssocRangeGet(readback, dbname, assocType, - id1, LONG_MAX, 0, - offset, limit); - ASSERT_EQ((unsigned int)2, readback.size()); - - // Delete the most recent assoc - int c = aclient->taoAssocDelete(dbname, assocType, - id1, id2+2, AssocVisibility::HIDDEN, true, ""); - ASSERT_EQ(c, 1); - - // verify assoc falls back to 1. - cnt = aclient->taoAssocCount(dbname, assocType, id1); - ASSERT_EQ(cnt, 1); - printf("AssocCount suceeded.\n"); -} - -// -// close all resources -// -static void close() { - // close database - dbclient->Close(dbhandle, dbname); - // transport->close(); -} - - -int main(int argc, char **argv) { - - ARGC = argc; - ARGV = argv; - - // create a server - startServer(argc, argv); - printf("Server thread created.\n"); - - // give some time to the server to initialize itself - while (server_options.getPort() == 0) { - sleep(1); - } - - // test client - initialize(server_options.getPort()); - - // run all tests - testClient(); - clearDatabase(); - - testAssocs(); - clearDatabase(); - - // done all tests - close(); - - return 0; -} -