From lattner at cs.uiuc.edu Mon Oct 13 00:05:04 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 00:05:04 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/LICM.cpp Message-ID: <200310130504.AAA29635@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: LICM.cpp updated: 1.37 -> 1.38 --- Log message: Wrap code at 80 columns --- Diffs of the changes: (+10 -6) Index: llvm/lib/Transforms/Scalar/LICM.cpp diff -u llvm/lib/Transforms/Scalar/LICM.cpp:1.37 llvm/lib/Transforms/Scalar/LICM.cpp:1.38 --- llvm/lib/Transforms/Scalar/LICM.cpp:1.37 Sun Oct 12 16:52:27 2003 +++ llvm/lib/Transforms/Scalar/LICM.cpp Mon Oct 13 00:04:27 2003 @@ -38,12 +38,14 @@ #include namespace { - cl::opt DisablePromotion("disable-licm-promotion", cl::Hidden, - cl::desc("Disable memory promotion in LICM pass")); + cl::opt + DisablePromotion("disable-licm-promotion", cl::Hidden, + cl::desc("Disable memory promotion in LICM pass")); Statistic<> NumHoisted("licm", "Number of instructions hoisted out of loop"); Statistic<> NumHoistedLoads("licm", "Number of load insts hoisted"); - Statistic<> NumPromoted("licm", "Number of memory locations promoted to registers"); + Statistic<> NumPromoted("licm", + "Number of memory locations promoted to registers"); struct LICM : public FunctionPass, public InstVisitor { virtual bool runOnFunction(Function &F); @@ -98,8 +100,9 @@ /// void hoist(Instruction &I); - /// SafeToHoist - Only hoist an instruction if it is not a trapping instruction - /// or if it is a trapping instruction and is guaranteed to execute + /// SafeToHoist - Only hoist an instruction if it is not a trapping + /// instruction or if it is a trapping instruction and is guaranteed to + /// execute. /// bool SafeToHoist(Instruction &I); @@ -140,7 +143,8 @@ /// friend class InstVisitor; void visitBinaryOperator(Instruction &I) { - if (isLoopInvariant(I.getOperand(0)) && isLoopInvariant(I.getOperand(1)) && SafeToHoist(I)) + if (isLoopInvariant(I.getOperand(0)) && + isLoopInvariant(I.getOperand(1)) && SafeToHoist(I)) hoist(I); } void visitCastInst(CastInst &CI) { From lattner at cs.uiuc.edu Mon Oct 13 00:34:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 00:34:02 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Pass.cpp Message-ID: <200310130533.AAA31447@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Pass.cpp updated: 1.49 -> 1.50 --- Log message: * Remove extraneous #includes * Fix a nasty initializer ordering bug. Any only-CFG passes which registered themselves before the CFGOnlyAnalysis vector initialized got forgotten and thus got invalidated and recomputed. In particular, in my compiled version of gccas, the Loop information pass was being recomputed unnecessarily. --- Diffs of the changes: (+9 -7) Index: llvm/lib/VMCore/Pass.cpp diff -u llvm/lib/VMCore/Pass.cpp:1.49 llvm/lib/VMCore/Pass.cpp:1.50 --- llvm/lib/VMCore/Pass.cpp:1.49 Sun Oct 12 13:52:12 2003 +++ llvm/lib/VMCore/Pass.cpp Mon Oct 13 00:33:01 2003 @@ -1,4 +1,4 @@ -//===- Pass.cpp - LLVM Pass Infrastructure Impementation ------------------===// +//===- Pass.cpp - LLVM Pass Infrastructure Implementation -----------------===// // // This file implements the LLVM Pass infrastructure. It is primarily // responsible with ensuring that passes are executed and batched together @@ -11,9 +11,6 @@ #include "llvm/Module.h" #include "Support/STLExtras.h" #include "Support/TypeInfo.h" -#include "Config/sys/resource.h" -#include "Config/sys/time.h" -#include "Config/unistd.h" #include // IncludeFile - Stub function used to help linking out. @@ -23,10 +20,15 @@ // AnalysisID Class Implementation // -static std::vector CFGOnlyAnalyses; +// getCFGOnlyAnalyses - A wrapper around the CFGOnlyAnalyses which make it +// initializer order independent. +static std::vector &getCFGOnlyAnalyses() { + static std::vector CFGOnlyAnalyses; + return CFGOnlyAnalyses; +} void RegisterPassBase::setOnlyUsesCFG() { - CFGOnlyAnalyses.push_back(PIObj); + getCFGOnlyAnalyses().push_back(PIObj); } //===----------------------------------------------------------------------===// @@ -56,7 +58,7 @@ // that only depend on the CFG (like dominators, loop info, etc...) // Preserved.insert(Preserved.end(), - CFGOnlyAnalyses.begin(), CFGOnlyAnalyses.end()); + getCFGOnlyAnalyses().begin(), getCFGOnlyAnalyses().end()); } From lattner at cs.uiuc.edu Mon Oct 13 00:35:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 00:35:01 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/PassManagerT.h Message-ID: <200310130534.AAA31459@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: PassManagerT.h updated: 1.42 -> 1.43 --- Log message: This is a header file, hear me roar --- Diffs of the changes: (+1 -1) Index: llvm/lib/VMCore/PassManagerT.h diff -u llvm/lib/VMCore/PassManagerT.h:1.42 llvm/lib/VMCore/PassManagerT.h:1.43 --- llvm/lib/VMCore/PassManagerT.h:1.42 Sun Oct 12 22:32:08 2003 +++ llvm/lib/VMCore/PassManagerT.h Mon Oct 13 00:34:24 2003 @@ -1,4 +1,4 @@ -//===- PassManagerT.h - Container for Passes ------------------------------===// +//===- PassManagerT.h - Container for Passes --------------------*- C++ -*-===// // // This file defines the PassManagerT class. This class is used to hold, // maintain, and optimize execution of Pass's. The PassManager class ensures From lattner at cs.uiuc.edu Mon Oct 13 09:04:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 09:04:01 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Type.cpp Message-ID: <200310131403.JAA28372@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.75 -> 1.76 --- Log message: Avoid creating lots of pointless opaque types, with short lifetimes --- Diffs of the changes: (+37 -22) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.75 llvm/lib/VMCore/Type.cpp:1.76 --- llvm/lib/VMCore/Type.cpp:1.75 Fri Oct 10 12:54:14 2003 +++ llvm/lib/VMCore/Type.cpp Mon Oct 13 09:03:36 2003 @@ -401,6 +401,43 @@ } +// getAlwaysOpaqueTy - This function returns an opaque type. It doesn't matter +// _which_ opaque type it is, but the opaque type must never get resolved. +// +static Type *getAlwaysOpaqueTy() { + static Type *AlwaysOpaqueTy = OpaqueType::get(); + static PATypeHolder Holder(AlwaysOpaqueTy); + return AlwaysOpaqueTy; +} + + +//===----------------------------------------------------------------------===// +// dropAllTypeUses methods - These methods eliminate any possibly recursive type +// references from a derived type. The type must remain abstract, so we make +// sure to use an always opaque type as an argument. +// + +void FunctionType::dropAllTypeUses() { + ResultType = getAlwaysOpaqueTy(); + ParamTys.clear(); +} + +void ArrayType::dropAllTypeUses() { + ElementType = getAlwaysOpaqueTy(); +} + +void StructType::dropAllTypeUses() { + ETypes.clear(); + ETypes.push_back(PATypeHandle(getAlwaysOpaqueTy(), this)); +} + +void PointerType::dropAllTypeUses() { + ElementType = getAlwaysOpaqueTy(); +} + + + + // isTypeAbstract - This is a recursive function that walks a type hierarchy // calculating whether or not a type is abstract. Worst case it will have to do // a lot of traversing if you have some whacko opaque types, but in most cases, @@ -651,12 +688,6 @@ return MT; } -void FunctionType::dropAllTypeUses() { - ResultType = OpaqueType::get(); - ParamTys.clear(); -} - - //===----------------------------------------------------------------------===// // Array Type Factory... // @@ -701,13 +732,6 @@ return AT; } -void ArrayType::dropAllTypeUses() { - ElementType = OpaqueType::get(); -} - - - - //===----------------------------------------------------------------------===// // Struct Type Factory... // @@ -755,11 +779,6 @@ return ST; } -void StructType::dropAllTypeUses() { - ETypes.clear(); - ETypes.push_back(PATypeHandle(OpaqueType::get(), this)); -} - //===----------------------------------------------------------------------===// @@ -804,10 +823,6 @@ std::cerr << "Derived new type: " << *PT << "\n"; #endif return PT; -} - -void PointerType::dropAllTypeUses() { - ElementType = OpaqueType::get(); } void debug_type_tables() { From lattner at cs.uiuc.edu Mon Oct 13 09:36:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 09:36:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/ConstantReader.cpp Reader.cpp ReaderInternals.h Message-ID: <200310131435.JAA25730@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: ConstantReader.cpp updated: 1.57 -> 1.58 Reader.cpp updated: 1.80 -> 1.81 ReaderInternals.h updated: 1.58 -> 1.59 --- Log message: Avoid calling getTypeSlot more --- Diffs of the changes: (+9 -4) Index: llvm/lib/Bytecode/Reader/ConstantReader.cpp diff -u llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.57 llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.58 --- llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.57 Thu Oct 9 15:41:16 2003 +++ llvm/lib/Bytecode/Reader/ConstantReader.cpp Mon Oct 13 09:34:59 2003 @@ -350,7 +350,7 @@ Constant *C = parseConstantValue(Buf, EndBuf, Ty); assert(C && "parseConstantValue returned NULL!"); BCR_TRACE(4, "Read Constant: '" << *C << "'\n"); - unsigned Slot = insertValue(C, Tab); + unsigned Slot = insertValue(C, Typ, Tab); // If we are reading a function constant table, make sure that we adjust // the slot number to be the real global constant number. Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.80 llvm/lib/Bytecode/Reader/Reader.cpp:1.81 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.80 Fri Oct 10 00:43:47 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Mon Oct 13 09:34:59 2003 @@ -75,11 +75,15 @@ } unsigned BytecodeParser::insertValue(Value *Val, ValueTable &ValueTab) { + return insertValue(Val, getTypeSlot(Val->getType()), ValueTab); +} + +unsigned BytecodeParser::insertValue(Value *Val, unsigned type, + ValueTable &ValueTab) { assert((!HasImplicitZeroInitializer || !isa(Val) || Val->getType()->isPrimitiveType() || !cast(Val)->isNullValue()) && "Cannot read null values from bytecode!"); - unsigned type = getTypeSlot(Val->getType()); assert(type != Type::TypeTyID && "Types should never be insertValue'd!"); if (ValueTab.size() <= type) { @@ -452,7 +456,7 @@ GlobalVariable *GV = new GlobalVariable(ElTy, VarType & 1, Linkage, 0, "", TheModule); BCR_TRACE(2, "Global Variable of type: " << *Ty << "\n"); - ResolveReferencesToValue(GV, insertValue(GV, ModuleValues)); + ResolveReferencesToValue(GV, insertValue(GV, SlotNo, ModuleValues)); if (VarType & 2) { // Does it have an initializer? unsigned InitSlot; @@ -483,7 +487,7 @@ // Insert the placeholder... Function *Func = new Function(cast(Ty), GlobalValue::InternalLinkage, "", TheModule); - unsigned DestSlot = insertValue(Func, ModuleValues); + unsigned DestSlot = insertValue(Func, FnSignature, ModuleValues); ResolveReferencesToValue(Func, DestSlot); // Keep track of this information in a list that is emptied as functions are Index: llvm/lib/Bytecode/Reader/ReaderInternals.h diff -u llvm/lib/Bytecode/Reader/ReaderInternals.h:1.58 llvm/lib/Bytecode/Reader/ReaderInternals.h:1.59 --- llvm/lib/Bytecode/Reader/ReaderInternals.h:1.58 Sun Oct 12 23:22:07 2003 +++ llvm/lib/Bytecode/Reader/ReaderInternals.h Mon Oct 13 09:34:59 2003 @@ -170,6 +170,7 @@ Constant *getConstantValue(const Type *Ty, unsigned num); unsigned insertValue(Value *V, ValueTable &Table); + unsigned insertValue(Value *V, unsigned Type, ValueTable &Table); unsigned getTypeSlot(const Type *Ty); From lattner at cs.uiuc.edu Mon Oct 13 09:57:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 09:57:00 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Type.cpp Message-ID: <200310131456.JAA28722@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Type.cpp updated: 1.76 -> 1.77 --- Log message: Speed up TypesEqual by specializing it for all of the derived types, avoiding a lot of virtual method dispatch overhead. --- Diffs of the changes: (+33 -15) Index: llvm/lib/VMCore/Type.cpp diff -u llvm/lib/VMCore/Type.cpp:1.76 llvm/lib/VMCore/Type.cpp:1.77 --- llvm/lib/VMCore/Type.cpp:1.76 Mon Oct 13 09:03:36 2003 +++ llvm/lib/VMCore/Type.cpp Mon Oct 13 09:55:56 2003 @@ -491,32 +491,50 @@ if (isa(Ty)) return false; // Two unequal opaque types are never equal - std::map::iterator It = EqTypes.find(Ty); - if (It != EqTypes.end()) + std::map::iterator It = EqTypes.lower_bound(Ty); + if (It != EqTypes.end() && It->first == Ty) return It->second == Ty2; // Looping back on a type, check for equality // Otherwise, add the mapping to the table to make sure we don't get // recursion on the types... - EqTypes.insert(std::make_pair(Ty, Ty2)); - - // Iterate over the types and make sure the the contents are equivalent... - Type::subtype_iterator I = Ty ->subtype_begin(), IE = Ty ->subtype_end(); - Type::subtype_iterator I2 = Ty2->subtype_begin(), IE2 = Ty2->subtype_end(); - for (; I != IE && I2 != IE2; ++I, ++I2) - if (!TypesEqual(*I, *I2, EqTypes)) return false; + EqTypes.insert(It, std::make_pair(Ty, Ty2)); // Two really annoying special cases that breaks an otherwise nice simple // algorithm is the fact that arraytypes have sizes that differentiates types, // and that function types can be varargs or not. Consider this now. - if (const ArrayType *ATy = dyn_cast(Ty)) { - if (ATy->getNumElements() != cast(Ty2)->getNumElements()) - return false; + // + if (const PointerType *PTy = dyn_cast(Ty)) { + return TypesEqual(PTy->getElementType(), + cast(Ty2)->getElementType(), EqTypes); + } else if (const StructType *STy = dyn_cast(Ty)) { + const StructType::ElementTypes &STyE = STy->getElementTypes(); + const StructType::ElementTypes &STyE2 = + cast(Ty2)->getElementTypes(); + if (STyE.size() != STyE2.size()) return false; + for (unsigned i = 0, e = STyE.size(); i != e; ++i) + if (!TypesEqual(STyE[i], STyE2[i], EqTypes)) + return false; + return true; + } else if (const ArrayType *ATy = dyn_cast(Ty)) { + const ArrayType *ATy2 = cast(Ty2); + return ATy->getNumElements() == ATy2->getNumElements() && + TypesEqual(ATy->getElementType(), ATy2->getElementType(), EqTypes); } else if (const FunctionType *FTy = dyn_cast(Ty)) { - if (FTy->isVarArg() != cast(Ty2)->isVarArg()) + const FunctionType *FTy2 = cast(Ty2); + if (FTy->isVarArg() != FTy2->isVarArg() || + FTy->getParamTypes().size() != FTy2->getParamTypes().size() || + !TypesEqual(FTy->getReturnType(), FTy2->getReturnType(), EqTypes)) return false; + const FunctionType::ParamTypes &FTyP = FTy->getParamTypes(); + const FunctionType::ParamTypes &FTy2P = FTy2->getParamTypes(); + for (unsigned i = 0, e = FTyP.size(); i != e; ++i) + if (!TypesEqual(FTyP[i], FTy2P[i], EqTypes)) + return false; + return true; + } else { + assert(0 && "Unknown derived type!"); + return false; } - - return I == IE && I2 == IE2; // Types equal if both iterators are done } static bool TypesEqual(const Type *Ty, const Type *Ty2) { From lattner at cs.uiuc.edu Mon Oct 13 09:59:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 09:59:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200310131458.JAA28745@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.81 -> 1.82 --- Log message: Minor cleanups --- Diffs of the changes: (+2 -2) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.81 llvm/lib/Bytecode/Reader/Reader.cpp:1.82 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.81 Mon Oct 13 09:34:59 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Mon Oct 13 09:57:53 2003 @@ -234,13 +234,13 @@ BCR_TRACE(3, "Plane Type: '" << *Ty << "' with " << NumEntries << " entries\n"); - for (unsigned i = 0; i < NumEntries; ++i) { + for (unsigned i = 0; i != NumEntries; ++i) { // Symtab entry: [def slot #][name] unsigned slot; if (read_vbr(Buf, EndBuf, slot)) throw Error_readvbr; std::string Name; if (read(Buf, EndBuf, Name, false)) // Not aligned... - throw std::string("Buffer not aligned."); + throw std::string("Failed reading symbol name."); Value *V = 0; if (Typ == Type::TypeTyID) From lattner at cs.uiuc.edu Mon Oct 13 09:59:03 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 09:59:03 2003 Subject: [llvm-commits] CVS: llvm/docs/CodingStandards.html Message-ID: <200310131458.JAA28755@apoc.cs.uiuc.edu> Changes in directory llvm/docs: CodingStandards.html updated: 1.11 -> 1.12 --- Log message: Oops, forgot to commit this before: standardize header comments --- Diffs of the changes: (+2 -2) Index: llvm/docs/CodingStandards.html diff -u llvm/docs/CodingStandards.html:1.11 llvm/docs/CodingStandards.html:1.12 --- llvm/docs/CodingStandards.html:1.11 Mon Oct 6 14:26:00 2003 +++ llvm/docs/CodingStandards.html Mon Oct 13 09:58:11 2003 @@ -101,7 +101,7 @@ standard format for the LLVM source tree looks like this:

-//===-- llvm/Instruction.h - Instruction class definition --------*- C++ -*--=//
+//===-- llvm/Instruction.h - Instruction class definition -------*- C++ -*-===//
 //
 // This file contains the declaration of the Instruction class, which is the
 // base class for all of the VM instructions.
@@ -833,7 +833,7 @@
 
Chris Lattner
-Last modified: Thu Aug 7 16:44:33 CDT 2003 +Last modified: Sun Oct 12 22:12:43 CDT 2003 From lattner at cs.uiuc.edu Mon Oct 13 10:23:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 10:23:01 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/SlotCalculator.cpp Message-ID: <200310131522.KAA31086@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: SlotCalculator.cpp updated: 1.28 -> 1.29 --- Log message: Stop using "reverse depth first" order --- Diffs of the changes: (+3 -6) Index: llvm/lib/VMCore/SlotCalculator.cpp diff -u llvm/lib/VMCore/SlotCalculator.cpp:1.28 llvm/lib/VMCore/SlotCalculator.cpp:1.29 --- llvm/lib/VMCore/SlotCalculator.cpp:1.28 Sun Oct 12 22:32:08 2003 +++ llvm/lib/VMCore/SlotCalculator.cpp Mon Oct 13 10:21:58 2003 @@ -277,13 +277,10 @@ ResultSlot << "\n"); } - // Loop over any contained types in the definition... in reverse depth first - // order. This assures that all of the leafs of a type are output before - // the type itself is. This also assures us that we will not hit infinite - // recursion on recursive types... + // Loop over any contained types in the definition... in depth first order. // - for (df_iterator I = df_begin(TheTy, true), - E = df_end(TheTy); I != E; ++I) + for (df_iterator I = df_begin(TheTy), E = df_end(TheTy); + I != E; ++I) if (*I != TheTy) { // If we haven't seen this sub type before, add it to our type table! const Type *SubTy = *I; From lattner at cs.uiuc.edu Mon Oct 13 10:32:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 10:32:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Type.h Message-ID: <200310131531.KAA03706@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm: Type.h updated: 1.32 -> 1.33 --- Log message: Remove explicit inline qualifiers when the implicit ones work just as well --- Diffs of the changes: (+10 -10) Index: llvm/include/llvm/Type.h diff -u llvm/include/llvm/Type.h:1.32 llvm/include/llvm/Type.h:1.33 --- llvm/include/llvm/Type.h:1.32 Thu Oct 9 15:43:55 2003 +++ llvm/include/llvm/Type.h Mon Oct 13 10:30:59 2003 @@ -248,22 +248,22 @@ typedef TypeIterator _Self; public: - inline TypeIterator(const Type *ty, unsigned idx) : Ty(ty), Idx(idx) {} - inline ~TypeIterator() {} + TypeIterator(const Type *ty, unsigned idx) : Ty(ty), Idx(idx) {} + ~TypeIterator() {} - inline bool operator==(const _Self& x) const { return Idx == x.Idx; } - inline bool operator!=(const _Self& x) const { return !operator==(x); } + bool operator==(const _Self& x) const { return Idx == x.Idx; } + bool operator!=(const _Self& x) const { return !operator==(x); } - inline pointer operator*() const { return Ty->getContainedType(Idx); } - inline pointer operator->() const { return operator*(); } + pointer operator*() const { return Ty->getContainedType(Idx); } + pointer operator->() const { return operator*(); } - inline _Self& operator++() { ++Idx; return *this; } // Preincrement - inline _Self operator++(int) { // Postincrement + _Self& operator++() { ++Idx; return *this; } // Preincrement + _Self operator++(int) { // Postincrement _Self tmp = *this; ++*this; return tmp; } - inline _Self& operator--() { --Idx; return *this; } // Predecrement - inline _Self operator--(int) { // Postdecrement + _Self& operator--() { --Idx; return *this; } // Predecrement + _Self operator--(int) { // Postdecrement _Self tmp = *this; --*this; return tmp; } }; From lattner at cs.uiuc.edu Mon Oct 13 10:35:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 10:35:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Type.h Message-ID: <200310131534.KAA03056@neo.cs.uiuc.edu> Changes in directory llvm/include/llvm: Type.h updated: 1.33 -> 1.34 --- Log message: Add operator= for type iterators to make them assignable --- Diffs of the changes: (+6 -0) Index: llvm/include/llvm/Type.h diff -u llvm/include/llvm/Type.h:1.33 llvm/include/llvm/Type.h:1.34 --- llvm/include/llvm/Type.h:1.33 Mon Oct 13 10:30:59 2003 +++ llvm/include/llvm/Type.h Mon Oct 13 10:34:17 2003 @@ -250,6 +250,12 @@ public: TypeIterator(const Type *ty, unsigned idx) : Ty(ty), Idx(idx) {} ~TypeIterator() {} + + const _Self &operator=(const _Self &RHS) { + assert(Ty == RHS.Ty && "Cannot assign from different types!"); + Idx = RHS.Idx; + return *this; + } bool operator==(const _Self& x) const { return Idx == x.Idx; } bool operator!=(const _Self& x) const { return !operator==(x); } From lattner at cs.uiuc.edu Mon Oct 13 10:46:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 10:46:01 2003 Subject: [llvm-commits] CVS: llvm/include/Support/DepthFirstIterator.h Message-ID: <200310131545.KAA01719@apoc.cs.uiuc.edu> Changes in directory llvm/include/Support: DepthFirstIterator.h updated: 1.7 -> 1.8 --- Log message: Extricate the "reverse" support from the depth-first iterator. This is really a crappy form of post-order traversal which really does not belong here. While we are at it, improve documentation and use a vector instead of a stack. This improves the post dominator analysis pass by ~5%, and probably also helps other passes as well. --- Diffs of the changes: (+38 -55) Index: llvm/include/Support/DepthFirstIterator.h diff -u llvm/include/Support/DepthFirstIterator.h:1.7 llvm/include/Support/DepthFirstIterator.h:1.8 --- llvm/include/Support/DepthFirstIterator.h:1.7 Tue Sep 30 13:37:23 2003 +++ llvm/include/Support/DepthFirstIterator.h Mon Oct 13 10:45:33 2003 @@ -1,7 +1,13 @@ //===- Support/DepthFirstIterator.h - Depth First iterator ------*- C++ -*-===// // // This file builds on the Support/GraphTraits.h file to build generic depth -// first graph iterator. +// first graph iterator. This file exposes the following functions/types: +// +// df_begin/df_end/df_iterator +// * Normal depth-first iteration - visit a node and then all of its children. +// +// idf_begin/idf_end/idf_iterator +// * Depth-first iteration on the 'inverse' graph. // //===----------------------------------------------------------------------===// @@ -10,7 +16,7 @@ #include "Support/GraphTraits.h" #include "Support/iterator" -#include +#include #include // Generic Depth First Iterator @@ -24,28 +30,11 @@ std::set Visited; // All of the blocks visited so far... // VisitStack - Used to maintain the ordering. Top = current block // First element is node pointer, second is the 'next child' to visit - std::stack > VisitStack; - const bool Reverse; // Iterate over children before self? + std::vector > VisitStack; private: - void reverseEnterNode() { - std::pair &Top = VisitStack.top(); - NodeType *Node = Top.first; - ChildItTy &It = Top.second; - for (; It != GT::child_end(Node); ++It) { - NodeType *Child = *It; - if (!Visited.count(Child)) { - Visited.insert(Child); - VisitStack.push(std::make_pair(Child, GT::child_begin(Child))); - reverseEnterNode(); - return; - } - } - } - - inline df_iterator(NodeType *Node, bool reverse) : Reverse(reverse) { + inline df_iterator(NodeType *Node) { Visited.insert(Node); - VisitStack.push(std::make_pair(Node, GT::child_begin(Node))); - if (Reverse) reverseEnterNode(); + VisitStack.push_back(std::make_pair(Node, GT::child_begin(Node))); } inline df_iterator() { /* End is when stack is empty */ } @@ -54,19 +43,20 @@ typedef df_iterator _Self; // Provide static begin and end methods as our public "constructors" - static inline _Self begin(GraphT G, bool Reverse = false) { - return _Self(GT::getEntryNode(G), Reverse); + static inline _Self begin(GraphT G) { + return _Self(GT::getEntryNode(G)); } static inline _Self end(GraphT G) { return _Self(); } inline bool operator==(const _Self& x) const { - return VisitStack == x.VisitStack; + return VisitStack.size() == x.VisitStack.size() && + VisitStack == x.VisitStack; } inline bool operator!=(const _Self& x) const { return !operator==(x); } inline pointer operator*() const { - return VisitStack.top().first; + return VisitStack.back().first; } // This is a nonstandard operator-> that dereferences the pointer an extra @@ -76,31 +66,24 @@ inline NodeType *operator->() const { return operator*(); } inline _Self& operator++() { // Preincrement - if (Reverse) { // Reverse Depth First Iterator - if (VisitStack.top().second == GT::child_end(VisitStack.top().first)) - VisitStack.pop(); - if (!VisitStack.empty()) - reverseEnterNode(); - } else { // Normal Depth First Iterator - do { - std::pair &Top = VisitStack.top(); - NodeType *Node = Top.first; - ChildItTy &It = Top.second; - - while (It != GT::child_end(Node)) { - NodeType *Next = *It++; - if (!Visited.count(Next)) { // Has our next sibling been visited? - // No, do it now. - Visited.insert(Next); - VisitStack.push(std::make_pair(Next, GT::child_begin(Next))); - return *this; - } - } - - // Oops, ran out of successors... go up a level on the stack. - VisitStack.pop(); - } while (!VisitStack.empty()); - } + do { + std::pair &Top = VisitStack.back(); + NodeType *Node = Top.first; + ChildItTy &It = Top.second; + + while (It != GT::child_end(Node)) { + NodeType *Next = *It++; + if (!Visited.count(Next)) { // Has our next sibling been visited? + // No, do it now. + Visited.insert(Next); + VisitStack.push_back(std::make_pair(Next, GT::child_begin(Next))); + return *this; + } + } + + // Oops, ran out of successors... go up a level on the stack. + VisitStack.pop_back(); + } while (!VisitStack.empty()); return *this; } @@ -121,8 +104,8 @@ // Provide global constructors that automatically figure out correct types... // template -df_iterator df_begin(T G, bool Reverse = false) { - return df_iterator::begin(G, Reverse); +df_iterator df_begin(T G) { + return df_iterator::begin(G); } template @@ -137,8 +120,8 @@ }; template -idf_iterator idf_begin(T G, bool Reverse = false) { - return idf_iterator::begin(G, Reverse); +idf_iterator idf_begin(T G) { + return idf_iterator::begin(G); } template From criswell at cs.uiuc.edu Mon Oct 13 11:00:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:00:02 2003 Subject: [llvm-commits] CVS: llvm/README.txt Message-ID: <200310131559.KAA26874@choi.cs.uiuc.edu> Changes in directory llvm: README.txt added (r1.1) --- Log message: Master README file that points to all other documentation. --- Diffs of the changes: (+74 -0) Index: llvm/README.txt diff -c /dev/null llvm/README.txt:1.1 *** /dev/null Mon Oct 13 10:59:38 2003 --- llvm/README.txt Mon Oct 13 10:59:28 2003 *************** *** 0 **** --- 1,74 ---- + Welcome to LLVM! + + This file provides the location of all important LLVM documentation. In + particular, you should read the license information and the installation + directions before you begin using LLVM. + + After that, there are several technical references that will help you use LLVM. + Consult them as necessary. + + Finally, you can find information on how to communicate with the LLVM + developers and LLVM community. This is of primary interest if you wish to + submit a bug, supply a patch, or just keep current with what's going on with + LLVM. + + Introductory Literature: + License Information: + llvm/LICENSE.txt + + Installation Instructions: + llvm/docs/GettingStarted.html + + Release Notes: + llvm/docs/ReleaseNotes.html + + Technical Reference: + Command Documentation: + llvm/docs/CommandGuide/CommandGuide.html + + Using the LLVM Test Suite: + llvm/docs/TestingGuide.html + + LLVM Assembly Language: + llvm/docs/LangRef.html + + LLVM Source Code Tree: + llvm/docs/ProgrammersManual.html + + Coding Standards: + llvm/docs/CodingStandards.html + + LLVM Community: + Submitting a Bug: + llvm/docs/HowToSubmitABug.html + + Mailing Lists: + There are several mailing lists providing LLVM users with information: + + o LLVM Announcements List: + http://mail.cs.uiuc.edu/mailman/listinfo/llvm-announce + + This is a low volume list that provides important announcements + regarding LLVM. It is primarily intended to announce new + releases, major updates to the software, etc. This list is + highly recommended for anyone that uses LLVM. + + + o LLVM Developers List: + http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev + + This list is for people who want to be included in technical + discussions of LLVM. People post to this list when they have + questions about writing code for or using the LLVM tools. It + is low volume. + + o LLVM Commits List + http://mail.cs.uiuc.edu/mailman/listinfo/llvm-commits + + This list contains all commit messages that are made when LLVM + developers commit code changes to the CVS archive. It is + useful for those who want to stay on the bleeding edge of LLVM + development. + + This list is very high volume. + From criswell at cs.uiuc.edu Mon Oct 13 11:14:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:14:02 2003 Subject: [llvm-commits] CVS: llvm/docs/FAQ.html Message-ID: <200310131613.LAA26955@choi.cs.uiuc.edu> Changes in directory llvm/docs: FAQ.html added (r1.1) --- Log message: Fequently Asked Questions about LLVM. Mainly focuses on build problems, but anything FAQ'ish should go here if it's not heavily documented elsewhere (like the README.txt file or the Getting Started Guide). --- Diffs of the changes: (+145 -0) Index: llvm/docs/FAQ.html diff -c /dev/null llvm/docs/FAQ.html:1.1 *** /dev/null Mon Oct 13 11:13:16 2003 --- llvm/docs/FAQ.html Mon Oct 13 11:13:06 2003 *************** *** 0 **** --- 1,145 ---- + + +

+
+ LLVM: Frequently Asked Questions +
+

+ +
+ + +

+ Source Code +

+ + +
+
In what language is LLVM written? +
+ All of the LLVM tools and libraries are written in C++ with extensive use + of the STL. +

+ +

How portable is the LLVM source code? +
+ The LLVM source code should be portable to most modern UNIX-like operating + systems. Most of the code is written in standard C++ with operating + system services abstracted to a support library. The tools required to + build and test LLVM have been ported to a plethora of platforms. +

+ Some porting problems may exist in the following areas: +

    +
  • The GCC front end code is not as portable as the LLVM suite, so it + may not compile as well on unsupported platforms. + +

    + +

  • The Python test classes are more UNIX-centric than they should be, + so porting to non-UNIX like platforms (i.e. Windows, MacOS 9) will + require some effort. +

    + +

  • The LLVM build system relies heavily on UNIX shell tools, like the + Bourne Shell and sed. Porting to systems without these tools (MacOS 9, + Plan 9) will require more effort. +
+
+ +
+ + +

+ Build Problems +

+ + +
+
When I run configure, it finds the wrong C compiler. +
+ The configure script attempts to locate first gcc and + then cc, unless it finds compiler paths set in CC and + CXX for the C and C++ compiler, respectively. + + If configure finds the wrong compiler, either adjust your + PATH environment variable or set CC and CXX + explicitly. +

+ +

I compile the code, and I get some error about /localhome. +
+ There are several possible causes for this. The first is that you + didn't set a pathname properly when using configure, and it + defaulted to a pathname that we use on our research machines. +

+ Another possibility is that we hardcoded a path in our Makefiles. If + you see this, please email the LLVM bug mailing list with the name of + the offending Makefile and a description of what is wrong with it. + +

The configure script finds the right C compiler, but it + uses the LLVM linker from a previous build. What do I do? +
+ The configure script uses the PATH to find + executables, so if it's grabbing the wrong linker/assembler/etc, there + are two ways to fix it: +
    +
  1. Adjust your PATH environment variable so that the + correct program appears first in the PATH. This may work, + but may not be convenient when you want them first in your + path for other work. +

    + +

  2. Run configure with an alternative PATH that + is correct. In a Borne compatible shell, the syntax would be: +

    + PATH= ./configure ... +

    + This is still somewhat inconvenient, but it allows + configure to do its work without having to adjust your + PATH permanently. +

+ +
When creating a dynamic library, I get a strange GLIBC error. +
+ Under some operating systems (i.e. Linux), libtool does not work correctly + if GCC was compiled with the --disable-shared option. To work around this, + install your own version of GCC that has shared libraries enabled by + default. +

+ +

I've updated my source tree from CVS, and now my build is trying to + use a file/directory that doesn't exist. +
+ You need to re-run configure in your object directory. When new Makefiles + are added to the source tree, they have to be copied over to the object + tree in order to be used by the build. +

+ +

I've modified a Makefile in my source tree, but my build tree keeps + using the old version. What do I do? +
+ If the Makefile already exists in your object tree, you can just run the + following command in the top level directory of your object tree: +

+ ./config.status <relative path to Makefile> +

+ If the Makefile is new, you will have to modify the configure script to copy + it over. +

+ +

I've upgraded to a new version of LLVM, and I get strange build + errors. +
+ Sometimes changes to the LLVM source code alters how the build system + works. Changes in libtool, autoconf, or header file dependencies are + especially prone to this sort of problem. +

+ The best thing to try is to remove the old files and re-build. In most + cases, this takes care of the problem. To do this, just type make + clean and then make in the directory that fails to build. +

+

+
+ + + From criswell at cs.uiuc.edu Mon Oct 13 11:17:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:17:01 2003 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200310131616.LAA26977@choi.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.37 -> 1.38 --- Log message: Removed information on common build problems. That is now documented in the FAQ (FAQ.html). --- Diffs of the changes: (+3 -60) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.37 llvm/docs/GettingStarted.html:1.38 --- llvm/docs/GettingStarted.html:1.37 Fri Oct 10 13:51:11 2003 +++ llvm/docs/GettingStarted.html Mon Oct 13 11:16:25 2003 @@ -1010,66 +1010,9 @@
- Below are common problems and their remedies: - -
-
When I run configure, it finds the wrong C compiler. -
- The configure script attempts to locate first gcc and - then cc, unless it finds compiler paths set in CC and - CXX for the C and C++ compiler, respectively. - - If configure finds the wrong compiler, either adjust your - PATH environment variable or set CC and CXX - explicitly. -

- -

I compile the code, and I get some error about /localhome. -
- There are several possible causes for this. The first is that you - didn't set a pathname properly when using configure, and it - defaulted to a pathname that we use on our research machines. -

- Another possibility is that we hardcoded a path in our Makefiles. If - you see this, please email the LLVM bug mailing list with the name of - the offending Makefile and a description of what is wrong with it. - -

The configure script finds the right C compiler, but it - uses the LLVM linker from a previous build. What do I do? -
- The configure script uses the PATH to find - executables, so if it's grabbing the wrong linker/assembler/etc, there - are two ways to fix it: -
    -
  1. Adjust your PATH environment variable so that the - correct program appears first in the PATH. This may work, - but may not be convenient when you want them first in your - path for other work. -

    - -

  2. Run configure with an alternative PATH that - is correct. In a Borne compatible shell, the syntax would be: -

    - PATH= ./configure ... -

    - This is still somewhat inconvenient, but it allows - configure to do its work without having to adjust your - PATH permanently. -

- -
I've upgraded to a new version of LLVM, and I get strange build - errors. -
- Sometimes changes to the LLVM source code alters how the build system - works. Changes in libtool, autoconf, or header file dependencies are - especially prone to this sort of problem. -

- The best thing to try is to remove the old files and re-build. In most - cases, this takes care of the problem. To do this, just type make - clean and then make in the directory that fails to build. -

- -

+ If you are having problems building or using LLVM, or if you have any other + general questions about LLVM, please consult the + Frequently Asked Questions page.

Links

From criswell at cs.uiuc.edu Mon Oct 13 11:20:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:20:01 2003 Subject: [llvm-commits] CVS: llvm/docs/GettingStarted.html Message-ID: <200310131619.LAA27015@choi.cs.uiuc.edu> Changes in directory llvm/docs: GettingStarted.html updated: 1.38 -> 1.39 --- Log message: Fixed the name of a hyperlink. --- Diffs of the changes: (+1 -1) Index: llvm/docs/GettingStarted.html diff -u llvm/docs/GettingStarted.html:1.38 llvm/docs/GettingStarted.html:1.39 --- llvm/docs/GettingStarted.html:1.38 Mon Oct 13 11:16:25 2003 +++ llvm/docs/GettingStarted.html Mon Oct 13 11:19:30 2003 @@ -1012,7 +1012,7 @@ If you are having problems building or using LLVM, or if you have any other general questions about LLVM, please consult the - Frequently Asked Questions page. + Frequently Asked Questions page.

Links

From criswell at cs.uiuc.edu Mon Oct 13 11:23:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:23:01 2003 Subject: [llvm-commits] CVS: llvm/configure Message-ID: <200310131622.LAA27060@choi.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.45 -> 1.46 --- Log message: Added a macro and code that checks for the %a format string in sprintf(). --- Diffs of the changes: (+82 -69) Index: llvm/configure diff -u llvm/configure:1.45 llvm/configure:1.46 --- llvm/configure:1.45 Thu Oct 9 20:11:51 2003 +++ llvm/configure Mon Oct 13 11:21:59 2003 @@ -20702,6 +20702,87 @@ fi + + + + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test "$cross_compiling" = yes; then + { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run test program while cross compiling +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include + #include +int +main () +{ + + volatile double A, B; + char Buffer[100]; + A = 1; + A /= 10.0; + sprintf(Buffer, "%a", A); + B = atof(Buffer); + if (A != B) + return (1); + if (A != 0x1.999999999999ap-4) + return (1); + return (0); + ; + return 0; +} +_ACEOF +rm -f conftest$ac_exeext +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && { ac_try='./conftest$ac_exeext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_c_printf_a=yes +else + echo "$as_me: program exited with status $ac_status" >&5 +echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +( exit $ac_status ) +ac_c_printf_a=no +fi +rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext +fi + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + if test "$ac_c_printf_a" = "yes"; then + +cat >>confdefs.h <<\_ACEOF +#define HAVE_PRINTF_A 1 +_ACEOF + + fi + + echo "$as_me:$LINENO: checking whether the compiler implements namespaces" >&5 echo $ECHO_N "checking whether the compiler implements namespaces... $ECHO_C" >&6 if test "${ac_cv_cxx_namespaces+set}" = set; then @@ -22420,8 +22501,7 @@ - -for ac_func in getcwd gettimeofday strcspn strdup strerror strspn strstr strtod strtol strtoq strtoll strsignal +for ac_func in getcwd gettimeofday strcspn strdup strerror strspn strstr strtod strtol strtoq strtoll do as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh` echo "$as_me:$LINENO: checking for $ac_func" >&5 @@ -22503,73 +22583,6 @@ fi done - -echo "$as_me:$LINENO: checking whether sys_siglist is declared" >&5 -echo $ECHO_N "checking whether sys_siglist is declared... $ECHO_C" >&6 -if test "${ac_cv_have_decl_sys_siglist+set}" = set; then - echo $ECHO_N "(cached) $ECHO_C" >&6 -else - cat >conftest.$ac_ext <<_ACEOF -#line $LINENO "configure" -/* confdefs.h. */ -_ACEOF -cat confdefs.h >>conftest.$ac_ext -cat >>conftest.$ac_ext <<_ACEOF -/* end confdefs.h. */ - -#if HAVE_SIGNAL_H -#include -#endif - -int -main () -{ -#ifndef sys_siglist - char *p = (char *) sys_siglist; -#endif - - ; - return 0; -} -_ACEOF -rm -f conftest.$ac_objext -if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 - (eval $ac_compile) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); } && - { ac_try='test -s conftest.$ac_objext' - { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 - (eval $ac_try) 2>&5 - ac_status=$? - echo "$as_me:$LINENO: \$? = $ac_status" >&5 - (exit $ac_status); }; }; then - ac_cv_have_decl_sys_siglist=yes -else - echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -ac_cv_have_decl_sys_siglist=no -fi -rm -f conftest.$ac_objext conftest.$ac_ext -fi -echo "$as_me:$LINENO: result: $ac_cv_have_decl_sys_siglist" >&5 -echo "${ECHO_T}$ac_cv_have_decl_sys_siglist" >&6 -if test $ac_cv_have_decl_sys_siglist = yes; then - -cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_SIGLIST 1 -_ACEOF - - -else - cat >>confdefs.h <<_ACEOF -#define HAVE_DECL_SYS_SIGLIST 0 -_ACEOF - - -fi - From criswell at cs.uiuc.edu Mon Oct 13 11:23:03 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:23:03 2003 Subject: [llvm-commits] CVS: llvm/autoconf/aclocal.m4 configure.ac Message-ID: <200310131622.LAA27069@choi.cs.uiuc.edu> Changes in directory llvm/autoconf: aclocal.m4 updated: 1.6 -> 1.7 configure.ac updated: 1.41 -> 1.42 --- Log message: Added a macro and code that checks for the %a format string in sprintf(). --- Diffs of the changes: (+32 -0) Index: llvm/autoconf/aclocal.m4 diff -u llvm/autoconf/aclocal.m4:1.6 llvm/autoconf/aclocal.m4:1.7 --- llvm/autoconf/aclocal.m4:1.6 Wed Oct 8 16:45:58 2003 +++ llvm/autoconf/aclocal.m4 Mon Oct 13 11:22:00 2003 @@ -6166,4 +6166,33 @@ [AC_CONFIG_COMMANDS($1,${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/$1 $1,${srcdir}/autoconf/mkinstalldirs `dirname $1`) ]) +# +# Determine if the printf() functions have the %a format character. +# This is modified from: +# http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html +AC_DEFUN([AC_C_PRINTF_A], +[ + AC_LANG_SAVE + AC_LANG_C + AC_RUN_IFELSE( + AC_LANG_PROGRAM([#include + #include ], + [[[ + volatile double A, B; + char Buffer[100]; + A = 1; + A /= 10.0; + sprintf(Buffer, "%a", A); + B = atof(Buffer); + if (A != B) + return (1); + if (A != 0x1.999999999999ap-4) + return (1); + return (0);]]]), + ac_c_printf_a=yes,ac_c_printf_a=no) + AC_LANG_RESTORE + if test "$ac_c_printf_a" = "yes"; then + AC_DEFINE([HAVE_PRINTF_A],[1],[Define to have the %a format string]) + fi +]) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.41 llvm/autoconf/configure.ac:1.42 --- llvm/autoconf/configure.ac:1.41 Fri Oct 10 12:04:43 2003 +++ llvm/autoconf/configure.ac Mon Oct 13 11:22:00 2003 @@ -455,6 +455,9 @@ AC_HEADER_TIME AC_STRUCT_TM +dnl Check for various C features +AC_C_PRINTF_A + dnl Check for C++ extensions AC_CXX_HAVE_EXT_HASH_MAP AC_CXX_HAVE_EXT_HASH_SET From criswell at cs.uiuc.edu Mon Oct 13 11:23:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 11:23:04 2003 Subject: [llvm-commits] CVS: llvm/include/Config/config.h.in Message-ID: <200310131622.LAA27076@choi.cs.uiuc.edu> Changes in directory llvm/include/Config: config.h.in updated: 1.4 -> 1.5 --- Log message: Added a macro and code that checks for the %a format string in sprintf(). --- Diffs of the changes: (+3 -0) Index: llvm/include/Config/config.h.in diff -u llvm/include/Config/config.h.in:1.4 llvm/include/Config/config.h.in:1.5 --- llvm/include/Config/config.h.in:1.4 Tue Oct 7 18:39:51 2003 +++ llvm/include/Config/config.h.in Mon Oct 13 11:22:01 2003 @@ -226,3 +226,6 @@ /* Define to `unsigned' if does not define. */ #undef size_t + +/* Define to have the %a format string in printf() */ +#undef HAVE_PRINTF_A From lattner at cs.uiuc.edu Mon Oct 13 11:35:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 11:35:02 2003 Subject: [llvm-commits] CVS: llvm/include/Support/DepthFirstIterator.h Message-ID: <200310131634.LAA13577@apoc.cs.uiuc.edu> Changes in directory llvm/include/Support: DepthFirstIterator.h updated: 1.8 -> 1.9 --- Log message: add support for "external" depth first iterators, which store the 'visited' set outside of the iterator itself. --- Diffs of the changes: (+99 -11) Index: llvm/include/Support/DepthFirstIterator.h diff -u llvm/include/Support/DepthFirstIterator.h:1.8 llvm/include/Support/DepthFirstIterator.h:1.9 --- llvm/include/Support/DepthFirstIterator.h:1.8 Mon Oct 13 10:45:33 2003 +++ llvm/include/Support/DepthFirstIterator.h Mon Oct 13 11:34:26 2003 @@ -9,6 +9,18 @@ // idf_begin/idf_end/idf_iterator // * Depth-first iteration on the 'inverse' graph. // +// df_ext_begin/df_ext_end/df_ext_iterator +// * Normal depth-first iteration - visit a node and then all of its children. +// This iterator stores the 'visited' set in an external set, which allows +// it to be more efficient, and allows external clients to use the set for +// other purposes. +// +// idf_ext_begin/idf_ext_end/idf_ext_iterator +// * Depth-first iteration on the 'inverse' graph. +// This iterator stores the 'visited' set in an external set, which allows +// it to be more efficient, and allows external clients to use the set for +// other purposes. +// //===----------------------------------------------------------------------===// #ifndef SUPPORT_DEPTHFIRSTITERATOR_H @@ -19,28 +31,59 @@ #include #include +// df_iterator_storage - A private class which is used to figure out where to +// store the visited set. +template // Non-external set +class df_iterator_storage { +public: + SetType Visited; +}; + +template +class df_iterator_storage { +public: + df_iterator_storage(SetType &VSet) : Visited(VSet) {} + df_iterator_storage(const df_iterator_storage &S) : Visited(S.Visited) {} + SetType &Visited; +}; + + // Generic Depth First Iterator -template > -class df_iterator : public forward_iterator { +template::NodeType*>, + bool ExtStorage = false, class GT = GraphTraits > +class df_iterator : public forward_iterator, + public df_iterator_storage { typedef forward_iterator super; typedef typename GT::NodeType NodeType; typedef typename GT::ChildIteratorType ChildItTy; - std::set Visited; // All of the blocks visited so far... // VisitStack - Used to maintain the ordering. Top = current block // First element is node pointer, second is the 'next child' to visit std::vector > VisitStack; private: inline df_iterator(NodeType *Node) { - Visited.insert(Node); + this->Visited.insert(Node); VisitStack.push_back(std::make_pair(Node, GT::child_begin(Node))); } inline df_iterator() { /* End is when stack is empty */ } + inline df_iterator(NodeType *Node, SetType &S) + : df_iterator_storage(S) { + if (!S.count(Node)) { + this->Visited.insert(Node); + VisitStack.push_back(std::make_pair(Node, GT::child_begin(Node))); + } + } + inline df_iterator(SetType &S) + : df_iterator_storage(S) { + // End is when stack is empty + } + public: typedef typename super::pointer pointer; - typedef df_iterator _Self; + typedef df_iterator _Self; // Provide static begin and end methods as our public "constructors" static inline _Self begin(GraphT G) { @@ -48,6 +91,11 @@ } static inline _Self end(GraphT G) { return _Self(); } + // Static begin and end methods as our public ctors for external iterators + static inline _Self begin(GraphT G, SetType &S) { + return _Self(GT::getEntryNode(G), S); + } + static inline _Self end(GraphT G, SetType &S) { return _Self(S); } inline bool operator==(const _Self& x) const { return VisitStack.size() == x.VisitStack.size() && @@ -73,9 +121,9 @@ while (It != GT::child_end(Node)) { NodeType *Next = *It++; - if (!Visited.count(Next)) { // Has our next sibling been visited? + if (!this->Visited.count(Next)) { // Has our next sibling been visited? // No, do it now. - Visited.insert(Next); + this->Visited.insert(Next); VisitStack.push_back(std::make_pair(Next, GT::child_begin(Next))); return *this; } @@ -96,7 +144,7 @@ // nodes that a depth first iteration did not find: ie unreachable nodes. // inline bool nodeVisited(NodeType *Node) const { - return Visited.count(Node) != 0; + return this->Visited.count(Node) != 0; } }; @@ -113,10 +161,30 @@ return df_iterator::end(G); } +// Provide global definitions of external depth first iterators... +template +struct df_ext_iterator : public df_iterator { + df_ext_iterator(const df_iterator &V) + : df_iterator(V) {} +}; + +template +df_ext_iterator df_ext_begin(T G, SetTy &S) { + return df_ext_iterator::begin(G, S); +} + +template +df_ext_iterator df_ext_end(T G, SetTy &S) { + return df_ext_iterator::end(G, S); +} + + // Provide global definitions of inverse depth first iterators... -template -struct idf_iterator : public df_iterator > { - idf_iterator(const df_iterator > &V) :df_iterator >(V){} +template ::NodeType*>, + bool External = false> +struct idf_iterator : public df_iterator, SetTy, External> { + idf_iterator(const df_iterator, SetTy, External> &V) + : df_iterator, SetTy, External>(V) {} }; template @@ -128,5 +196,25 @@ idf_iterator idf_end(T G){ return idf_iterator::end(G); } + +// Provide global definitions of external inverse depth first iterators... +template ::NodeType*> > +struct idf_ext_iterator : public idf_iterator { + idf_ext_iterator(const idf_iterator &V) + : idf_iterator(V) {} + idf_ext_iterator(const df_iterator, SetTy, true> &V) + : idf_iterator(V) {} +}; + +template +idf_ext_iterator idf_ext_begin(T G, SetTy &S) { + return idf_ext_iterator::begin(G, S); +} + +template +idf_ext_iterator idf_ext_end(T G, SetTy &S) { + return idf_ext_iterator::end(G, S); +} + #endif From lattner at cs.uiuc.edu Mon Oct 13 11:37:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 11:37:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Analysis/PostDominators.cpp Message-ID: <200310131636.LAA14248@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Analysis: PostDominators.cpp updated: 1.42 -> 1.43 --- Log message: Make use of "external" depth-first iterators to avoid revisiting nodes multiple times. This reduces the time to construct post-dominance sets a LOT. For example, optimizing perlbmk goes from taking 12.9894s to 1.4074s. --- Diffs of the changes: (+3 -3) Index: llvm/lib/Analysis/PostDominators.cpp diff -u llvm/lib/Analysis/PostDominators.cpp:1.42 llvm/lib/Analysis/PostDominators.cpp:1.43 --- llvm/lib/Analysis/PostDominators.cpp:1.42 Thu Sep 11 13:12:02 2003 +++ llvm/lib/Analysis/PostDominators.cpp Mon Oct 13 11:36:06 2003 @@ -51,12 +51,12 @@ do { Changed = false; - std::set Visited; + std::set Visited; DomSetType WorkingSet; for (unsigned i = 0, e = Roots.size(); i != e; ++i) - for (idf_iterator It = idf_begin(Roots[i]), - E = idf_end(Roots[i]); It != E; ++It) { + for (idf_ext_iterator It = idf_ext_begin(Roots[i], Visited), + E = idf_ext_end(Roots[i], Visited); It != E; ++It) { BasicBlock *BB = *It; succ_iterator SI = succ_begin(BB), SE = succ_end(BB); if (SI != SE) { // Is there SOME successor? From lattner at cs.uiuc.edu Mon Oct 13 11:45:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 11:45:01 2003 Subject: [llvm-commits] CVS: llvm/include/Support/DepthFirstIterator.h Message-ID: <200310131644.LAA19715@apoc.cs.uiuc.edu> Changes in directory llvm/include/Support: DepthFirstIterator.h updated: 1.9 -> 1.10 --- Log message: Add missing default argument --- Diffs of the changes: (+1 -1) Index: llvm/include/Support/DepthFirstIterator.h diff -u llvm/include/Support/DepthFirstIterator.h:1.9 llvm/include/Support/DepthFirstIterator.h:1.10 --- llvm/include/Support/DepthFirstIterator.h:1.9 Mon Oct 13 11:34:26 2003 +++ llvm/include/Support/DepthFirstIterator.h Mon Oct 13 11:44:30 2003 @@ -162,7 +162,7 @@ } // Provide global definitions of external depth first iterators... -template +template ::NodeType*> > struct df_ext_iterator : public df_iterator { df_ext_iterator(const df_iterator &V) : df_iterator(V) {} From lattner at cs.uiuc.edu Mon Oct 13 11:46:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 11:46:02 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/LowerSetJmp.cpp Message-ID: <200310131645.LAA20130@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: LowerSetJmp.cpp updated: 1.6 -> 1.7 --- Log message: Use external df iterators to avoid revisiting blocks in functions with multiple setjmp calls. --- Diffs of the changes: (+3 -1) Index: llvm/lib/Transforms/IPO/LowerSetJmp.cpp diff -u llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.6 llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.7 --- llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.6 Sun Oct 12 20:02:33 2003 +++ llvm/lib/Transforms/IPO/LowerSetJmp.cpp Mon Oct 13 11:44:50 2003 @@ -137,7 +137,9 @@ for (Value::use_iterator B = SetJmp->use_begin(), E = SetJmp->use_end(); B != E; ++B) { BasicBlock* BB = cast(*B)->getParent(); - DFSBlocks.insert(df_begin(BB), df_end(BB)); + for (df_ext_iterator I = df_ext_begin(BB, BBSet), + E = df_ext_end(BB, BBSet); I != E; ++I) + /* empty */; } while (!SetJmp->use_empty()) { From lattner at cs.uiuc.edu Mon Oct 13 11:50:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 11:50:00 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/LowerSetJmp.cpp Message-ID: <200310131649.LAA22446@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: LowerSetJmp.cpp updated: 1.7 -> 1.8 --- Log message: Whoops, we inserted into the wrong set. What's up with the dead set anyway? --- Diffs of the changes: (+2 -4) Index: llvm/lib/Transforms/IPO/LowerSetJmp.cpp diff -u llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.7 llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.8 --- llvm/lib/Transforms/IPO/LowerSetJmp.cpp:1.7 Mon Oct 13 11:44:50 2003 +++ llvm/lib/Transforms/IPO/LowerSetJmp.cpp Mon Oct 13 11:49:21 2003 @@ -132,13 +132,11 @@ doInitialization(M); if (SetJmp) { - std::set BBSet; - for (Value::use_iterator B = SetJmp->use_begin(), E = SetJmp->use_end(); B != E; ++B) { BasicBlock* BB = cast(*B)->getParent(); - for (df_ext_iterator I = df_ext_begin(BB, BBSet), - E = df_ext_end(BB, BBSet); I != E; ++I) + for (df_ext_iterator I = df_ext_begin(BB, DFSBlocks), + E = df_ext_end(BB, DFSBlocks); I != E; ++I) /* empty */; } From lattner at cs.uiuc.edu Mon Oct 13 12:15:03 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 12:15:03 2003 Subject: [llvm-commits] CVS: llvm/lib/CWriter/Writer.cpp Message-ID: <200310131714.MAA24924@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CWriter: Writer.cpp updated: 1.130 -> 1.131 --- Log message: Use the autoconf macro John wrote --- Diffs of the changes: (+3 -6) Index: llvm/lib/CWriter/Writer.cpp diff -u llvm/lib/CWriter/Writer.cpp:1.130 llvm/lib/CWriter/Writer.cpp:1.131 --- llvm/lib/CWriter/Writer.cpp:1.130 Sun Oct 12 03:12:58 2003 +++ llvm/lib/CWriter/Writer.cpp Mon Oct 13 12:13:53 2003 @@ -20,13 +20,10 @@ #include "llvm/Support/Mangler.h" #include "Support/StringExtras.h" #include "Support/STLExtras.h" +#include "Config/config.h" #include #include - -/* FIXME: This should be autoconf'd! */ -#define HAS_C99_HEXADECIMAL_CONSTANTS 1 - namespace { class CWriter : public Pass, public InstVisitor { std::ostream &Out; @@ -341,7 +338,7 @@ // only deal in IEEE FP). // static bool isFPCSafeToPrint(const ConstantFP *CFP) { -#if HAS_C99_HEXADECIMAL_CONSTANTS +#if HAVE_PRINTF_A char Buffer[100]; sprintf(Buffer, "%a", CFP->getValue()); @@ -457,7 +454,7 @@ Out << "(*(" << (FPC->getType() == Type::FloatTy ? "float" : "double") << "*)&FPConstant" << I->second << ")"; } else { -#if HAS_C99_HEXADECIMAL_CONSTANTS +#if HAVE_PRINTF_A // Print out the constant as a floating point number. char Buffer[100]; sprintf(Buffer, "%a", FPC->getValue()); From gaeke at cs.uiuc.edu Mon Oct 13 12:57:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Oct 13 12:57:02 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/Trace.h TraceToFunction.cpp Message-ID: <200310131756.MAA12051@gally.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: Trace.h updated: 1.4 -> 1.5 TraceToFunction.cpp updated: 1.5 -> 1.6 --- Log message: Get rid of 2 different forms of Trace::dominates(). --- Diffs of the changes: (+3 -7) Index: reopt/lib/LightWtProfiling/Trace.h diff -u reopt/lib/LightWtProfiling/Trace.h:1.4 reopt/lib/LightWtProfiling/Trace.h:1.5 --- reopt/lib/LightWtProfiling/Trace.h:1.4 Sat Oct 11 11:41:47 2003 +++ reopt/lib/LightWtProfiling/Trace.h Mon Oct 13 12:56:25 2003 @@ -79,9 +79,7 @@ BasicBlock *getBlock (unsigned i) const { return BasicBlocks[i]; } bool dominates (const BasicBlock *B1, const BasicBlock *B2, - const BasicBlock *start); - bool dominates (const BasicBlock *B1, const BasicBlock *B2); - + const BasicBlock *start = 0); }; #endif // TRACE_H Index: reopt/lib/LightWtProfiling/TraceToFunction.cpp diff -u reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.5 reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.6 --- reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.5 Sat Oct 11 11:43:17 2003 +++ reopt/lib/LightWtProfiling/TraceToFunction.cpp Mon Oct 13 12:56:25 2003 @@ -43,6 +43,8 @@ bool Trace::dominates (const BasicBlock *B1, const BasicBlock *B2, const BasicBlock *start) { + if (!start) + return dominates (B1, B2, getEntryBasicBlock ()); if (start == B1) { return true; // Seen B1 on this path, if we see B2 later it's OK. } else if (start == B2) { @@ -59,10 +61,6 @@ } return true; // Dominates on all successors ==> dominates here too } -} - -bool Trace::dominates (const BasicBlock *B1, const BasicBlock *B2) { - return dominates (B1, B2, getEntryBasicBlock ()); } static bool DefinedInTraceBeforeUse (Value *V, Trace &T) { From gaeke at cs.uiuc.edu Mon Oct 13 13:00:04 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Oct 13 13:00:04 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/Trace.h Message-ID: <200310131759.MAA12251@gally.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: Trace.h updated: 1.5 -> 1.6 --- Log message: give Trace::dominates() a comment. --- Diffs of the changes: (+4 -0) Index: reopt/lib/LightWtProfiling/Trace.h diff -u reopt/lib/LightWtProfiling/Trace.h:1.5 reopt/lib/LightWtProfiling/Trace.h:1.6 --- reopt/lib/LightWtProfiling/Trace.h:1.5 Mon Oct 13 12:56:25 2003 +++ reopt/lib/LightWtProfiling/Trace.h Mon Oct 13 12:59:09 2003 @@ -78,6 +78,10 @@ BasicBlock *operator[] (unsigned i) const { return BasicBlocks[i]; } BasicBlock *getBlock (unsigned i) const { return BasicBlocks[i]; } + /// Returns true if B1 and B2 appear on a path from START to an exit + /// block => B1 appears before B2. If START is not provided, defaults + /// to 0, which means use getEntryBasicBlock(). + /// bool dominates (const BasicBlock *B1, const BasicBlock *B2, const BasicBlock *start = 0); }; From criswell at cs.uiuc.edu Mon Oct 13 13:27:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 13:27:01 2003 Subject: [llvm-commits] CVS: llvm/docs/ReleaseTasks.html Message-ID: <200310131826.NAA25624@choi.cs.uiuc.edu> Changes in directory llvm/docs: ReleaseTasks.html updated: 1.11 -> 1.12 --- Log message: Removed items that are done or irrelevant. Added a few new items. --- Diffs of the changes: (+2 -26) Index: llvm/docs/ReleaseTasks.html diff -u llvm/docs/ReleaseTasks.html:1.11 llvm/docs/ReleaseTasks.html:1.12 --- llvm/docs/ReleaseTasks.html:1.11 Thu Sep 25 08:49:37 2003 +++ llvm/docs/ReleaseTasks.html Mon Oct 13 13:26:44 2003 @@ -69,45 +69,21 @@
    -
  • Test Suite
  • -
      -
    • Finish QMTest Integration.
      -
    • -
  • Documentation
    • -
    • Write documentation on the LLVM tools.
    • -
    • Create release notes.
      -
    • Expand documentation on creating an LLVM project.
    • -
    • Create a FAQ for common problems.
      -
    • -
    • Review docs, ensuring that the information is up to date.
    • -
    • Add an install doc to the source tree (web version gets -updated in main branch).
      -
    -
  • Improve GCC C/C++ Front End
    -
  • Licenses
    • -
    • Ensure all software in source tree has proper license.
      -
    • -
    -
      -
    • Check licenses in test/Programs to ensure everything is good.
    • Create license files for anything in the distribution that is not under our license.
  • Ensure SafeCode builds.
  • -
  • Ensure SPEC works.
    -
  • Create a system for managing development and releases (i.e. CVS branching, labeling revisions, etc).
  • -
  • Move utils/Burg, utils/Tblgen, and lib/Support into support/lib -and support/tools directory.
    -
  • +
  • Create a web page for downloading LLVM. +
  • Create a method for requesting the GCC front end source code.

From lattner at cs.uiuc.edu Mon Oct 13 13:28:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 13:28:02 2003 Subject: [llvm-commits] CVS: llvm/lib/Support/ToolRunner.cpp Message-ID: <200310131827.NAA28348@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: ToolRunner.cpp updated: 1.2 -> 1.3 --- Log message: LLI no longer has -abort-on-exception --- Diffs of the changes: (+0 -1) Index: llvm/lib/Support/ToolRunner.cpp diff -u llvm/lib/Support/ToolRunner.cpp:1.2 llvm/lib/Support/ToolRunner.cpp:1.3 --- llvm/lib/Support/ToolRunner.cpp:1.2 Mon Oct 6 13:37:24 2003 +++ llvm/lib/Support/ToolRunner.cpp Mon Oct 13 13:26:49 2003 @@ -31,7 +31,6 @@ std::vector LLIArgs; LLIArgs.push_back(LLIPath.c_str()); - LLIArgs.push_back("-abort-on-exception"); LLIArgs.push_back("-quiet"); LLIArgs.push_back("-force-interpreter=true"); LLIArgs.push_back(Bytecode.c_str()); From gaeke at cs.uiuc.edu Mon Oct 13 14:05:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Oct 13 14:05:02 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/TraceToFunction.cpp Message-ID: <200310131904.OAA23716@morpheus.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: TraceToFunction.cpp updated: 1.6 -> 1.7 --- Log message: One less call! --- Diffs of the changes: (+1 -1) Index: reopt/lib/LightWtProfiling/TraceToFunction.cpp diff -u reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.6 reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.7 --- reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.6 Mon Oct 13 12:56:25 2003 +++ reopt/lib/LightWtProfiling/TraceToFunction.cpp Mon Oct 13 14:04:44 2003 @@ -44,7 +44,7 @@ bool Trace::dominates (const BasicBlock *B1, const BasicBlock *B2, const BasicBlock *start) { if (!start) - return dominates (B1, B2, getEntryBasicBlock ()); + start = getEntryBasicBlock (); if (start == B1) { return true; // Seen B1 on this path, if we see B2 later it's OK. } else if (start == B2) { From gaeke at cs.uiuc.edu Mon Oct 13 14:52:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Oct 13 14:52:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp Message-ID: <200310131951.OAA19322@gally.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc: SparcV9CodeEmitter.cpp updated: 1.34 -> 1.35 --- Log message: Remove WordsEmitted statistic; there's already a non-backend-specific jello statistic for this (just divide #-bytes-of-code-emitted by 4). Rewrite head-of-file comment. --- Diffs of the changes: (+10 -3) Index: llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp diff -u llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp:1.34 llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp:1.35 --- llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp:1.34 Fri Oct 10 12:47:23 2003 +++ llvm/lib/Target/Sparc/SparcV9CodeEmitter.cpp Mon Oct 13 14:51:20 2003 @@ -1,6 +1,15 @@ //===-- SparcV9CodeEmitter.cpp --------------------------------------------===// // -// FIXME: document +// SPARC-specific backend for emitting machine code to memory. +// +// This module also contains the code for lazily resolving the targets +// of call instructions, including the callback used to redirect calls +// to functions for which the code has not yet been generated into the +// JIT compiler. +// +// This file #includes SparcV9CodeEmitter.inc, which contains the code +// for getBinaryCodeForInstr(), a method that converts a MachineInstr +// into the corresponding binary machine code word. // //===----------------------------------------------------------------------===// @@ -26,7 +35,6 @@ Statistic<> OverwrittenCalls("call-ovwr", "Number of over-written calls"); Statistic<> UnmodifiedCalls("call-skip", "Number of unmodified calls"); Statistic<> CallbackCalls("callback", "Number CompilationCallback() calls"); - Statistic<> WordsEmitted("words-emitted", "No. of words emitted to memory"); } bool UltraSparc::addPassesToEmitMachineCode(FunctionPassManager &PM, @@ -442,7 +450,6 @@ void SparcV9CodeEmitter::emitWord(unsigned Val) { // Output the constant in big endian byte order... - ++WordsEmitted; unsigned byteVal; for (int i = 3; i >= 0; --i) { byteVal = Val >> 8*i; From brukman at cs.uiuc.edu Mon Oct 13 15:29:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Mon Oct 13 15:29:01 2003 Subject: [llvm-commits] CVS: llvm/utils/NightlyTest.pl Message-ID: <200310132028.PAA16354@zion.cs.uiuc.edu> Changes in directory llvm/utils: NightlyTest.pl updated: 1.33 -> 1.34 --- Log message: LLVM CVS repository has moved. --- Diffs of the changes: (+1 -1) Index: llvm/utils/NightlyTest.pl diff -u llvm/utils/NightlyTest.pl:1.33 llvm/utils/NightlyTest.pl:1.34 --- llvm/utils/NightlyTest.pl:1.33 Sat Oct 11 00:34:00 2003 +++ llvm/utils/NightlyTest.pl Mon Oct 13 15:28:48 2003 @@ -33,7 +33,7 @@ my $HOME = $ENV{'HOME'}; my $CVSRootDir = $ENV{'CVSROOT'}; -my $CVSRootDir = "/home/vadve/vadve/Research/DynOpt/CVSRepository" +my $CVSRootDir = "/home/vadve/shared/PublicCVS" unless $CVSRootDir; my $BuildDir = "$HOME/buildtest"; my $WebDir = "$HOME/cvs/testresults-X86"; From lattner at cs.uiuc.edu Mon Oct 13 15:32:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 15:32:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/UnitTests/2003-10-13-SwitchTest.c Message-ID: <200310132031.PAA01806@apoc.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/UnitTests: 2003-10-13-SwitchTest.c added (r1.1) --- Log message: New testcase for PR 37 --- Diffs of the changes: (+14 -0) Index: llvm/test/Programs/SingleSource/UnitTests/2003-10-13-SwitchTest.c diff -c /dev/null llvm/test/Programs/SingleSource/UnitTests/2003-10-13-SwitchTest.c:1.1 *** /dev/null Mon Oct 13 15:31:38 2003 --- llvm/test/Programs/SingleSource/UnitTests/2003-10-13-SwitchTest.c Mon Oct 13 15:31:28 2003 *************** *** 0 **** --- 1,14 ---- + #include + + int main(int argc) { + switch (argc) { + default: + printf("GOOD\n"); + return 0; + case 100: + case 101: + case 1023: + printf("BAD\n"); + return 1; + } + } From lattner at cs.uiuc.edu Mon Oct 13 15:33:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 15:33:02 2003 Subject: [llvm-commits] CVS: llvm/lib/CWriter/Writer.cpp Message-ID: <200310132032.PAA01818@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CWriter: Writer.cpp updated: 1.131 -> 1.132 --- Log message: Do not allow fallthroughs in switch statements. This fixes PR37, 253.perlbmk, and test/Programs/SingleSource/UnitTests/2003-10-13-SwitchTest.c! --- Diffs of the changes: (+3 -1) Index: llvm/lib/CWriter/Writer.cpp diff -u llvm/lib/CWriter/Writer.cpp:1.131 llvm/lib/CWriter/Writer.cpp:1.132 --- llvm/lib/CWriter/Writer.cpp:1.131 Mon Oct 13 12:13:53 2003 +++ llvm/lib/CWriter/Writer.cpp Mon Oct 13 15:32:04 2003 @@ -1057,7 +1057,9 @@ Out << "; /* for PHI node */\n"; } - if (CurBB->getNext() != Succ || isa(CurBB->getTerminator())) { + if (CurBB->getNext() != Succ || + isa(CurBB->getTerminator()) || + isa(CurBB->getTerminator())) { Out << std::string(Indent, ' ') << " goto "; writeOperand(Succ); Out << ";\n"; From criswell at cs.uiuc.edu Mon Oct 13 15:35:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:35:01 2003 Subject: [llvm-commits] CVS: llvm/autoconf/LICENSE.TXT Message-ID: <200310132034.PAA29734@choi.cs.uiuc.edu> Changes in directory llvm/autoconf: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information to these files. --- Diffs of the changes: (+24 -0) Index: llvm/autoconf/LICENSE.TXT diff -c /dev/null llvm/autoconf/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:34:34 2003 --- llvm/autoconf/LICENSE.TXT Mon Oct 13 15:34:24 2003 *************** *** 0 **** --- 1,24 ---- + ------------------------------------------------------------------------------ + Autoconf Files + ------------------------------------------------------------------------------ + All autoconf files are licensed under the LLVM license with the following + additions: + + llvm/autoconf/install-sh: + This script is licensed under the LLVM license, with the following + additional copyrights and restrictions: + + Copyright 1991 by the Massachusetts Institute of Technology + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + + Please see the source files for additional copyrights. + From criswell at cs.uiuc.edu Mon Oct 13 15:35:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:35:04 2003 Subject: [llvm-commits] CVS: llvm/include/boost/LICENSE.TXT Message-ID: <200310132034.PAA29741@choi.cs.uiuc.edu> Changes in directory llvm/include/boost: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information to these files. --- Diffs of the changes: (+6 -0) Index: llvm/include/boost/LICENSE.TXT diff -c /dev/null llvm/include/boost/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:34:35 2003 --- llvm/include/boost/LICENSE.TXT Mon Oct 13 15:34:25 2003 *************** *** 0 **** --- 1,6 ---- + Boost + ------------------------------------------------------------------------------ + The boost header files are licensed under the LLVM license. They also have + additional copyrights that can be found in each individual source file in + llvm/include/boost. + From criswell at cs.uiuc.edu Mon Oct 13 15:35:06 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:35:06 2003 Subject: [llvm-commits] CVS: llvm/utils/Burg/LICENSE.TXT Message-ID: <200310132034.PAA29748@choi.cs.uiuc.edu> Changes in directory llvm/utils/Burg: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information to these files. --- Diffs of the changes: (+19 -0) Index: llvm/utils/Burg/LICENSE.TXT diff -c /dev/null llvm/utils/Burg/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:34:36 2003 --- llvm/utils/Burg/LICENSE.TXT Mon Oct 13 15:34:26 2003 *************** *** 0 **** --- 1,19 ---- + Burg + ------------------------------------------------------------------------------ + Burg is licensed under the LLVM license. It has the following additional + copyrights and restrictions: + + Copyright (C) 1991 Todd A. Proebsting + All Rights Reserved. + + If you distribute a modified version of Burg, please document the changes you + make in addition to redistributing our list of changes to the original Burg. + + See llvm/utils/Burg/LOG_CHANGES for a list of changes we have made to Burg. + + Burg is also located in llvm/test/Programs/MultiSource/Applications/Burg. The + only modifications made to it are to allow it to compile. + + We originally downloaded Burg from the following URL: + ftp://ftp.cs.arizona.edu/people/todd/burg.shar.Z + From criswell at cs.uiuc.edu Mon Oct 13 15:35:08 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:35:08 2003 Subject: [llvm-commits] CVS: llvm/runtime/GCCLibraries/libc/LICENSE.TXT Message-ID: <200310132034.PAA29755@choi.cs.uiuc.edu> Changes in directory llvm/runtime/GCCLibraries/libc: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information to these files. --- Diffs of the changes: (+5 -0) Index: llvm/runtime/GCCLibraries/libc/LICENSE.TXT diff -c /dev/null llvm/runtime/GCCLibraries/libc/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:34:37 2003 --- llvm/runtime/GCCLibraries/libc/LICENSE.TXT Mon Oct 13 15:34:27 2003 *************** *** 0 **** --- 1,5 ---- + libc + ------------------------------------------------------------------------------ + The stripped down C library found in llvm/runtime/GCCLibraries/libc is licensed + to you under the Lesser GNU Public General License. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:02 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/McCat/LICENSE.TXT Message-ID: <200310132038.PAA29809@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/McCat: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+43 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/McCat/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/McCat/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:46 2003 --- llvm/test/Programs/MultiSource/Benchmarks/McCat/LICENSE.TXT Mon Oct 13 15:38:36 2003 *************** *** 0 **** --- 1,43 ---- + McCat + ------------------------------------------------------------------------------ + The McCat benchmarks are licensed under the LLVM license (except as where noted + below). In addition, it has the following copyrights and disclaimer: + + Copyright (C) 1996 McGill University. + Copyright (C) 1996 McCAT System Group. + Copyright (C) 1996 ACAPS Benchmark Administrator + benadmin at acaps.cs.mcgill.ca + + 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. + + llvm/test/Programs/MultiSource/Benchmarks/McCat/18-imp/L_canny.c: + This file is licensed under the LLVM license. Additionally, it is Copyright (C) + 1994 CRIN and cannot be sold for profit. + + llvm/test/Programs/MultiSource/Benchmarks/McCat/03-testtrie/testtrie.in2: + This file is a copy of the GCC manual page and is covered under the following + copyright and license. The LLVM disclaimer of warranty applies: + + Redistributing the manual page is covered by the following copyright and set of + restrictions: + + Copyright (c) 1991 Free Software Foundation, Inc. + + Permission is granted to make and distribute verbatim copies + of this manual provided the copyright notice and this per- + mission notice are preserved on all copies. + + Permission is granted to copy and distribute modified ver- + sions of this manual under the conditions for verbatim copy- + ing, provided that the entire resulting derived work is dis- + tributed under the terms of a permission notice identical to + this one. + + Permission is granted to copy and distribute translations of + this manual into another language, under the above condi- + tions for modified versions, except that this permission no- + tice may be included in translations approved by the Free + Software Foundation instead of in the original English. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:04 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/Olden/LICENSE.TXT Message-ID: <200310132038.PAA29816@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/Olden: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+26 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/Olden/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/Olden/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:47 2003 --- llvm/test/Programs/MultiSource/Benchmarks/Olden/LICENSE.TXT Mon Oct 13 15:38:37 2003 *************** *** 0 **** --- 1,26 ---- + Olden + ------------------------------------------------------------------------------ + In addition to the LLVM license, Olden has the following copyrights and + restrictions: + + Olden Version 1 Copyright: + + Copyright (C) 1994-1996 by Anne Rogers (amr at cs.princeton.edu) and + Martin Carlisle (mcc at cs.princeton.edu) + ALL RIGHTS RESERVED. + + OLDEN is distributed under the following conditions: + + You may make copies of OLDEN for your own use and modify those copies. + + All copies of OLDEN must retain our names and copyright notice. + + You may not sell OLDEN or distribute OLDEN in conjunction with a + commercial product or service without the expressed written consent of + Anne Rogers and Martin Carlisle. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + PURPOSE. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:06 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:06 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/OptimizerEval/LICENSE.TXT Message-ID: <200310132038.PAA29826@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/OptimizerEval: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+7 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/OptimizerEval/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/OptimizerEval/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:55 2003 --- llvm/test/Programs/MultiSource/Benchmarks/OptimizerEval/LICENSE.TXT Mon Oct 13 15:38:45 2003 *************** *** 0 **** --- 1,7 ---- + OptimizerEval + ------------------------------------------------------------------------------ + This code is provided under the LLVM license. It was written by Preston + Briggs in his paper "Optimizer Evaulation." + + See http://citeseer.nj.nec.com/rd/55104792%2C85455%2C1%2C0.25%2CDownload/http://citeseer.nj.nec.com/compress/0/papers/cs/4091/ftp:zSzzSzftp.cs.rice.eduzSzpubliczSzprestonzSzevalzSzevalopt.ps.gz/optimizer-evaluation.ps for more information. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:08 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:08 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/llubenchmark/LICENSE.TXT Message-ID: <200310132038.PAA29840@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/llubenchmark: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+5 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/llubenchmark/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/llubenchmark/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:56 2003 --- llvm/test/Programs/MultiSource/Benchmarks/llubenchmark/LICENSE.TXT Mon Oct 13 15:38:45 2003 *************** *** 0 **** --- 1,5 ---- + llubenchmark + ------------------------------------------------------------------------------ + This program is licensed under the LLVM license. It was written by Craig + Zilles. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:11 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:11 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/Ptrdist/LICENSE.TXT Message-ID: <200310132038.PAA29833@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/Ptrdist: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+63 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/Ptrdist/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/Ptrdist/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:55 2003 --- llvm/test/Programs/MultiSource/Benchmarks/Ptrdist/LICENSE.TXT Mon Oct 13 15:38:45 2003 *************** *** 0 **** --- 1,63 ---- + Ptrdist + ------------------------------------------------------------------------------ + The programs in the Ptrdist benchmark suite have the following copyrights and + licenses: + + Anagram: + The anagram program is licensed under the LLVM license. It has the + following additional copyrights and restrictions: + + This program is Copyright 1991 by Raymond Chen. + (rjc at math.princeton.edu) + + This program may be freely distributed provided all alterations + to the original are clearly indicated as such. + + Anagram has only been modified so that it compiles on our machines. + + BC: + The bc program is licensed to you under the GNU General Public License, + Version 2. + + FT: + The FT program is covered by the LLVM license and has the following + additional copyrights and restrictions: + + Copyright (c) 1993 by Alain K\"{a}gi and the University of Wisconsin + Board of Trustees. + + Permission to use, copy, modify, and distribute this software for any + purpose without fee is hereby granted, provided that this entire notice + is included in all copies of any software which is or includes a copy + or modification of this software and in all copies of the supporting + documentation for such software. + + THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED + WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR THE UNIVERSITY OF + WISCONSIN MAKE ANY REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING + THE MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR + PURPOSE. + + Copyright (c) 1983 Regents of the University of California. + All rights reserved. + + Redistribution and use in source and binary forms are permitted + provided that the above copyright notice and this paragraph are + duplicated in all such forms and that any documentation, + advertising materials, and other materials related to such + distribution and use acknowledge that the software was developed + by the University of California, Berkeley. The name of the + University may not be used to endorse or promote products derived + from this software without specific prior written permission. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. + + ks: + The ks program is licensed to you under the GNU General Public License, + Version 2. + + yacr2: + The yacr2 program is licensed to you under the GNU General Public License, + Version 2. + From criswell at cs.uiuc.edu Mon Oct 13 15:39:13 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:39:13 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/sim/LICENSE.TXT Message-ID: <200310132038.PAA29847@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/sim: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+7 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/sim/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/sim/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:38:56 2003 --- llvm/test/Programs/MultiSource/Benchmarks/sim/LICENSE.TXT Mon Oct 13 15:38:46 2003 *************** *** 0 **** --- 1,7 ---- + sim + ------------------------------------------------------------------------------ + This program is licensed under the LLVM license with the following additional + copyrights: + + Copyright (C) 1990 Xiaoqiu Huang and Webb Miller + Some code also from Gene Myers. From criswell at cs.uiuc.edu Mon Oct 13 15:40:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:40:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Benchmarks/Fhourstones/LICENSE.TXT Message-ID: <200310132039.PAA29858@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Benchmarks/Fhourstones: LICENSE.TXT added (r1.1) --- Log message: Adding additional license information for MultiSource Programs. --- Diffs of the changes: (+10 -0) Index: llvm/test/Programs/MultiSource/Benchmarks/Fhourstones/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Benchmarks/Fhourstones/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:39:15 2003 --- llvm/test/Programs/MultiSource/Benchmarks/Fhourstones/LICENSE.TXT Mon Oct 13 15:38:35 2003 *************** *** 0 **** --- 1,10 ---- + Fhourstones + ------------------------------------------------------------------------------ + The Fhourstones benchmark is licensed under the LLVM license with the following + additional copyrights and restrictions: + + Copyright (c) 1996 by John Tromp. + + The Fhourstones copyright notice cannot be removed, and you may not sell the + code for profit. + From criswell at cs.uiuc.edu Mon Oct 13 15:40:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:40:04 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Applications/aha/LICENSE.TXT Message-ID: <200310132039.PAA29875@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Applications/aha: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+7 -0) Index: llvm/test/Programs/MultiSource/Applications/aha/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Applications/aha/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:39:38 2003 --- llvm/test/Programs/MultiSource/Applications/aha/LICENSE.TXT Mon Oct 13 15:39:28 2003 *************** *** 0 **** --- 1,7 ---- + A Programmer's Assistant (aha) + ------------------------------------------------------------------------------ + A Programmer's Assistant is licensed under the LLVM license with the following + additional copyright: + + Copyright (C) 2002 by Henry S. Warren, Jr. + From criswell at cs.uiuc.edu Mon Oct 13 15:40:06 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:40:06 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Applications/sgefa/LICENSE.TXT Message-ID: <200310132039.PAA29882@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Applications/sgefa: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+21 -0) Index: llvm/test/Programs/MultiSource/Applications/sgefa/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Applications/sgefa/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:39:39 2003 --- llvm/test/Programs/MultiSource/Applications/sgefa/LICENSE.TXT Mon Oct 13 15:39:29 2003 *************** *** 0 **** --- 1,21 ---- + SGEFA + ------------------------------------------------------------------------------ + The SGEFA program is licensed to you under the LLVM license, with the following + additional disclaimer: + + This document was prepared as an account of work sponsored by an + agency of the United States Government. Neither the United States + Government nor the University of California nor any of their + employees, makes any warranty, express or implied, or assumes any + legal liability or responsibility for the accuracy, completeness, or + usefulness of any information, apparatus, product, or process + disclosed, or represents that its use would not infringe privately + owned rights. Reference herein to any specific commercial products, + process, or service by trade name, trademark, manufacturer, or + otherwise, does not necessarily constitute or imply its endorsement, + recommendation, or favoring by the United States Government or the + University of California. The views and opinions of authors expressed + herein do not necessarily state or reflect those of the United States + Government thereof, and shall not be used for advertising or product + endorsement purposes. + From criswell at cs.uiuc.edu Mon Oct 13 15:41:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:41:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Applications/Burg/LICENSE.TXT Message-ID: <200310132040.PAA29905@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Applications/Burg: LICENSE.TXT added (r1.1) --- Log message: Adding additional Burg license information for good measure. --- Diffs of the changes: (+19 -0) Index: llvm/test/Programs/MultiSource/Applications/Burg/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Applications/Burg/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:40:27 2003 --- llvm/test/Programs/MultiSource/Applications/Burg/LICENSE.TXT Mon Oct 13 15:40:17 2003 *************** *** 0 **** --- 1,19 ---- + Burg + ------------------------------------------------------------------------------ + Burg is licensed under the LLVM license. It has the following additional + copyrights and restrictions: + + Copyright (C) 1991 Todd A. Proebsting + All Rights Reserved. + + If you distribute a modified version of Burg, please document the changes you + make in addition to redistributing our list of changes to the original Burg. + + See llvm/utils/Burg/LOG_CHANGES for a list of changes we have made to Burg. + + Burg is also located in llvm/test/Programs/MultiSource/Applications/Burg. The + only modifications made to it are to allow it to compile. + + We originally downloaded Burg from the following URL: + ftp://ftp.cs.arizona.edu/people/todd/burg.shar.Z + From criswell at cs.uiuc.edu Mon Oct 13 15:43:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:43:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Dhrystone/LICENSE.TXT Message-ID: <200310132042.PAA29947@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Dhrystone: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+5 -0) Index: llvm/test/Programs/SingleSource/Benchmarks/Dhrystone/LICENSE.TXT diff -c /dev/null llvm/test/Programs/SingleSource/Benchmarks/Dhrystone/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:42:12 2003 --- llvm/test/Programs/SingleSource/Benchmarks/Dhrystone/LICENSE.TXT Mon Oct 13 15:42:02 2003 *************** *** 0 **** --- 1,5 ---- + Dhrystone + ------------------------------------------------------------------------------ + These benchmarks are licensed under the LLVM license. They were originally + written in ADA by Reinhold P. Weicker and translated to C by Rick Richardson . + From criswell at cs.uiuc.edu Mon Oct 13 15:43:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:43:04 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT Message-ID: <200310132042.PAA29954@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Misc: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+6 -0) Index: llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT diff -c /dev/null llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:42:13 2003 --- llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT Mon Oct 13 15:42:03 2003 *************** *** 0 **** --- 1,6 ---- + ------------------------------------------------------------------------------ + Richard's Benchmark + ------------------------------------------------------------------------------ + This benchmark is licensed to you under the LLVM license. It was written by + M. Richards and M. J. Jordan. + From criswell at cs.uiuc.edu Mon Oct 13 15:43:08 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:43:08 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT Message-ID: <200310132042.PAA29963@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/CustomChecked: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+11 -0) Index: llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT diff -c /dev/null llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:42:14 2003 --- llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT Mon Oct 13 15:42:04 2003 *************** *** 0 **** --- 1,11 ---- + Flops + ------------------------------------------------------------------------------ + This program is licensed to you under the LLVM license. It was written by Al + Aburto. + + ------------------------------------------------------------------------------ + OOPack + ------------------------------------------------------------------------------ + Copyright (C) 1995 Arch D. Robison + This program is licensed under the GNU General Public License, Version 2. + From criswell at cs.uiuc.edu Mon Oct 13 15:43:10 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 15:43:10 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Gizmos/LICENSE.TXT Message-ID: <200310132042.PAA29970@choi.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Gizmos: LICENSE.TXT added (r1.1) --- Log message: Adding additional license and copyright information. --- Diffs of the changes: (+5 -0) Index: llvm/test/Programs/SingleSource/Gizmos/LICENSE.TXT diff -c /dev/null llvm/test/Programs/SingleSource/Gizmos/LICENSE.TXT:1.1 *** /dev/null Mon Oct 13 15:42:15 2003 --- llvm/test/Programs/SingleSource/Gizmos/LICENSE.TXT Mon Oct 13 15:42:05 2003 *************** *** 0 **** --- 1,5 ---- + Pi + ------------------------------------------------------------------------------ + This program is licensed under the LLVM license. It was written by Don Shull + and Mark Riordan. + From lattner at cs.uiuc.edu Mon Oct 13 16:05:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 16:05:00 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.cpp Message-ID: <200310132104.QAA03667@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.cpp updated: 1.15 -> 1.16 --- Log message: Unbreak code generator debug mode --- Diffs of the changes: (+5 -3) Index: llvm/tools/bugpoint/BugDriver.cpp diff -u llvm/tools/bugpoint/BugDriver.cpp:1.15 llvm/tools/bugpoint/BugDriver.cpp:1.16 --- llvm/tools/bugpoint/BugDriver.cpp:1.15 Wed Sep 17 00:00:07 2003 +++ llvm/tools/bugpoint/BugDriver.cpp Mon Oct 13 16:04:26 2003 @@ -128,9 +128,11 @@ // a bytecode file, then we know the compiler didn't crash, so try to diagnose // a miscompilation. // - std::cout << "Running selected passes on program to test for crash: "; - if (runPasses(PassesToRun)) - return debugCrash(); + if (!PassesToRun.empty()) { + std::cout << "Running selected passes on program to test for crash: "; + if (runPasses(PassesToRun)) + return debugCrash(); + } std::cout << "Checking for a miscompilation...\n"; From criswell at cs.uiuc.edu Mon Oct 13 16:10:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Mon Oct 13 16:10:01 2003 Subject: [llvm-commits] CVS: llvm/README.txt Message-ID: <200310132109.QAA30079@choi.cs.uiuc.edu> Changes in directory llvm: README.txt updated: 1.1 -> 1.2 --- Log message: Added a link to the main page for LLVM. Made the "Submitting a Bug" reference point to the web site, as we want people using the latest and greatest bug reporting. Fixed the indentation by assuming that tabs are 8 characters or less. --- Diffs of the changes: (+20 -13) Index: llvm/README.txt diff -u llvm/README.txt:1.1 llvm/README.txt:1.2 --- llvm/README.txt:1.1 Mon Oct 13 10:59:28 2003 +++ llvm/README.txt Mon Oct 13 16:09:04 2003 @@ -13,10 +13,13 @@ LLVM. Introductory Literature: + LLVM Home Page: + http://llvm.cs.uiuc.edu + License Information: llvm/LICENSE.txt - Installation Instructions: + Downloading and Installation Instructions: llvm/docs/GettingStarted.html Release Notes: @@ -40,34 +43,38 @@ LLVM Community: Submitting a Bug: - llvm/docs/HowToSubmitABug.html + http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html Mailing Lists: - There are several mailing lists providing LLVM users with information: + There are several mailing lists providing LLVM users with + information: o LLVM Announcements List: http://mail.cs.uiuc.edu/mailman/listinfo/llvm-announce - This is a low volume list that provides important announcements - regarding LLVM. It is primarily intended to announce new - releases, major updates to the software, etc. This list is - highly recommended for anyone that uses LLVM. + This is a low volume list that provides + important announcements regarding LLVM. It is + primarily intended to announce new releases, + major updates to the software, etc. This list + is highly recommended for anyone that uses LLVM. o LLVM Developers List: http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev - This list is for people who want to be included in technical - discussions of LLVM. People post to this list when they have - questions about writing code for or using the LLVM tools. It + This list is for people who want to be included + in technical discussions of LLVM. People post + to this list when they have questions about + writing code for or using the LLVM tools. It is low volume. o LLVM Commits List http://mail.cs.uiuc.edu/mailman/listinfo/llvm-commits - This list contains all commit messages that are made when LLVM - developers commit code changes to the CVS archive. It is - useful for those who want to stay on the bleeding edge of LLVM + This list contains all commit messages that are + made when LLVM developers commit code changes + to the CVS archive. It is useful for those who + want to stay on the bleeding edge of LLVM development. This list is very high volume. From gaeke at cs.uiuc.edu Mon Oct 13 16:37:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Mon Oct 13 16:37:01 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/TraceToFunction.cpp Message-ID: <200310132136.QAA25841@gally.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: TraceToFunction.cpp updated: 1.7 -> 1.8 --- Log message: Use short form of for loop in createLiveOutType(). --- Diffs of the changes: (+1 -2) Index: reopt/lib/LightWtProfiling/TraceToFunction.cpp diff -u reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.7 reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.8 --- reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.7 Mon Oct 13 14:04:44 2003 +++ reopt/lib/LightWtProfiling/TraceToFunction.cpp Mon Oct 13 16:36:06 2003 @@ -170,9 +170,8 @@ static PointerType *createLiveOutType (LiveVariableSet S) { TypeVector T; // For each variable in S, make a new entry in T having its type. - for (LiveVariableSet::iterator I = S.begin (), E = S.end (); I != E; ++I) { + for (LiveVariableSet::iterator I = S.begin (), E = S.end (); I != E; ++I) T.push_back ((*I)->getType ()); - } return PointerType::get (StructType::get (T)); } From lattner at cs.uiuc.edu Mon Oct 13 20:05:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 20:05:01 2003 Subject: [llvm-commits] CVS: llvm/test/Regression/Transforms/Inline/2003-10-13-AllocaDominanceProblem.ll Message-ID: <200310140104.UAA07984@apoc.cs.uiuc.edu> Changes in directory llvm/test/Regression/Transforms/Inline: 2003-10-13-AllocaDominanceProblem.ll added (r1.1) --- Log message: New testcase which the inliner breaks --- Diffs of the changes: (+19 -0) Index: llvm/test/Regression/Transforms/Inline/2003-10-13-AllocaDominanceProblem.ll diff -c /dev/null llvm/test/Regression/Transforms/Inline/2003-10-13-AllocaDominanceProblem.ll:1.1 *** /dev/null Mon Oct 13 20:04:22 2003 --- llvm/test/Regression/Transforms/Inline/2003-10-13-AllocaDominanceProblem.ll Mon Oct 13 20:04:12 2003 *************** *** 0 **** --- 1,19 ---- + ; RUN: llvm-as < %s | opt -inline -disable-output + + implementation ; Functions: + + int %reload() { + reloadentry: + br label %A + A: + call void %callee( ) + ret int 0 + } + + internal void %callee() { + entry: + %X = alloca sbyte, uint 0 + %Y = cast int 0 to uint + %Z = alloca sbyte, uint %Y + ret void + } From lattner at cs.uiuc.edu Mon Oct 13 20:12:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 20:12:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/InlineFunction.cpp Message-ID: <200310140111.UAA10541@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: InlineFunction.cpp updated: 1.12 -> 1.13 --- Log message: Do not move variable sized allocations to the top of the caller, which might break dominance relationships, and is otherwise bad. This fixes bug: Inline/2003-10-13-AllocaDominanceProblem.ll. This also fixes miscompilation of 3 176.gcc source files (reload1.c, global.c, flow.c) --- Diffs of the changes: (+5 -7) Index: llvm/lib/Transforms/Utils/InlineFunction.cpp diff -u llvm/lib/Transforms/Utils/InlineFunction.cpp:1.12 llvm/lib/Transforms/Utils/InlineFunction.cpp:1.13 --- llvm/lib/Transforms/Utils/InlineFunction.cpp:1.12 Mon Oct 6 10:23:43 2003 +++ llvm/lib/Transforms/Utils/InlineFunction.cpp Mon Oct 13 20:11:07 2003 @@ -175,13 +175,11 @@ for (BasicBlock::iterator I = LastBlock->begin(), E = LastBlock->end(); I != E; ) - if (AllocaInst *AI = dyn_cast(I)) { - ++I; // Move to the next instruction - LastBlock->getInstList().remove(AI); - Caller->front().getInstList().insert(InsertPoint, AI); - } else { - ++I; - } + if (AllocaInst *AI = dyn_cast(I++)) + if (isa(AI->getArraySize())) { + LastBlock->getInstList().remove(AI); + Caller->front().getInstList().insert(InsertPoint, AI); + } } // If we just inlined a call due to an invoke instruction, scan the inlined From lattner at cs.uiuc.edu Mon Oct 13 20:23:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 20:23:01 2003 Subject: [llvm-commits] CVS: llvm/utils/NightlyTest.pl Message-ID: <200310140122.UAA16512@zion.cs.uiuc.edu> Changes in directory llvm/utils: NightlyTest.pl updated: 1.34 -> 1.35 --- Log message: Fix bug in script --- Diffs of the changes: (+1 -1) Index: llvm/utils/NightlyTest.pl diff -u llvm/utils/NightlyTest.pl:1.34 llvm/utils/NightlyTest.pl:1.35 --- llvm/utils/NightlyTest.pl:1.34 Mon Oct 13 15:28:48 2003 +++ llvm/utils/NightlyTest.pl Mon Oct 13 20:22:08 2003 @@ -33,7 +33,7 @@ my $HOME = $ENV{'HOME'}; my $CVSRootDir = $ENV{'CVSROOT'}; -my $CVSRootDir = "/home/vadve/shared/PublicCVS" + $CVSRootDir = "/home/vadve/shared/PublicCVS" unless $CVSRootDir; my $BuildDir = "$HOME/buildtest"; my $WebDir = "$HOME/cvs/testresults-X86"; From lattner at cs.uiuc.edu Mon Oct 13 23:10:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 23:10:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c Message-ID: <200310140409.XAA04167@neo.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Regression/C: 2003-10-13-PointerIncrementTest.c added (r1.1) --- Log message: New testcase, painfully distilled from the 176.gcc benchmark --- Diffs of the changes: (+12 -0) Index: llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c diff -c /dev/null llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c:1.1 *** /dev/null Mon Oct 13 23:09:45 2003 --- llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c Mon Oct 13 23:09:34 2003 *************** *** 0 **** --- 1,12 ---- + #include + + int main() { + int Array[10]; + void *Pointer = &Array[0]; + unsigned i; + + for (i = 0; i < 10; ++i) { + *((int*)Pointer)++ = 1234; + printf("0x%d\n", (int)Pointer-(int)&Array[0]); + } + } From lattner at cs.uiuc.edu Mon Oct 13 23:21:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Mon Oct 13 23:21:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c Message-ID: <200310140420.XAA15791@apoc.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Regression/C: 2003-10-13-PointerIncrementTest.c updated: 1.1 -> 1.2 --- Log message: Simplify testcase --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c diff -u llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c:1.1 llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c:1.2 --- llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c:1.1 Mon Oct 13 23:09:34 2003 +++ llvm/test/Programs/SingleSource/Regression/C/2003-10-13-PointerIncrementTest.c Mon Oct 13 23:20:04 2003 @@ -6,7 +6,7 @@ unsigned i; for (i = 0; i < 10; ++i) { - *((int*)Pointer)++ = 1234; + *((int*)Pointer)++; printf("0x%d\n", (int)Pointer-(int)&Array[0]); } } From lattner at cs.uiuc.edu Tue Oct 14 13:53:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 13:53:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200310141852.NAA07159@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.35 -> 1.36 --- Log message: Disable the leaf function optimization, which is apparently not legal on X86/linux. :( The problem is that a signal delivered while the function is executing could clobber the functions stack. This is a partial fix for PR41. --- Diffs of the changes: (+2 -25) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.35 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.36 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.35 Mon Aug 18 09:32:46 2003 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Tue Oct 14 13:52:41 2003 @@ -81,18 +81,6 @@ return NoFPElim || MF.getFrameInfo()->hasVarSizedObjects(); } -// hasSPAdjust - Return true if this function has ESP adjustment instructions in -// the prolog and epilog which allocate local stack space. This is necessary -// because we elide these instructions if there are no function calls in the -// current function (ie, this is a leaf function). In this case, we can refer -// beyond the stack pointer because we know that nothing will trample on that -// part of the stack. -// -static bool hasSPAdjust(MachineFunction &MF) { - assert(!hasFP(MF) && "Can only eliminate SP adjustment if no frame-pointer!"); - return MF.getFrameInfo()->hasCalls(); -} - void X86RegisterInfo::eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, MachineBasicBlock::iterator &I) const { @@ -144,10 +132,8 @@ int Offset = MF.getFrameInfo()->getObjectOffset(FrameIndex) + MI.getOperand(i+3).getImmedValue()+4; - if (!hasFP(MF) && hasSPAdjust(MF)) { - const MachineFrameInfo *MFI = MF.getFrameInfo(); - Offset += MFI->getStackSize(); - } + if (!hasFP(MF)) + Offset += MF.getFrameInfo()->getStackSize(); MI.SetMachineOperandConst(i+3, MachineOperand::MO_SignExtendedImmed, Offset); } @@ -182,13 +168,6 @@ MI = BuildMI(X86::MOVrr32, 2, X86::EBP).addReg(X86::ESP); MBBI = MBB.insert(MBBI, MI)+1; } else { - // If we don't have a frame pointer, and the function contains no call sites - // (it's a leaf function), we don't have to emit ANY stack adjustment - // instructions at all, we can just refer to the area beyond the stack - // pointer. This can be important for small functions. - // - if (!hasSPAdjust(MF)) return; - // When we have no frame pointer, we reserve argument space for call sites // in the function immediately on entry to the current function. This // eliminates the need for add/sub ESP brackets around call sites. @@ -232,8 +211,6 @@ MI = addRegOffset(BuildMI(X86::MOVmr32, 5, X86::EBP), X86::ESP, EBPOffset); MBBI = 1+MBB.insert(MBBI, MI); } else { - if (!hasSPAdjust(MF)) return; - // Get the number of bytes allocated from the FrameInfo... unsigned NumBytes = MFI->getStackSize(); From lattner at cs.uiuc.edu Tue Oct 14 14:10:03 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 14:10:03 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86RegisterInfo.cpp Message-ID: <200310141909.OAA10029@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86RegisterInfo.cpp updated: 1.36 -> 1.37 --- Log message: Output a contorted sequence of instructions to make sure that we don't access off the bottom of the stack. This fixes PR#41 --- Diffs of the changes: (+20 -8) Index: llvm/lib/Target/X86/X86RegisterInfo.cpp diff -u llvm/lib/Target/X86/X86RegisterInfo.cpp:1.36 llvm/lib/Target/X86/X86RegisterInfo.cpp:1.37 --- llvm/lib/Target/X86/X86RegisterInfo.cpp:1.36 Tue Oct 14 13:52:41 2003 +++ llvm/lib/Target/X86/X86RegisterInfo.cpp Tue Oct 14 14:09:05 2003 @@ -161,12 +161,24 @@ // guaranteed to be the last slot by processFunctionBeforeFrameFinalized. int EBPOffset = MFI->getObjectOffset(MFI->getObjectIndexEnd()-1)+4; + if (NumBytes) { // adjust stack pointer: ESP -= numbytes + MI= BuildMI(X86::SUBri32, 2, X86::ESP).addReg(X86::ESP).addZImm(NumBytes); + MBBI = MBB.insert(MBBI, MI)+1; + } + + // Save EBP into the appropriate stack slot... MI = addRegOffset(BuildMI(X86::MOVrm32, 5), // mov [ESP-], EBP - X86::ESP, EBPOffset).addReg(X86::EBP); + X86::ESP, EBPOffset+NumBytes).addReg(X86::EBP); MBBI = MBB.insert(MBBI, MI)+1; - - MI = BuildMI(X86::MOVrr32, 2, X86::EBP).addReg(X86::ESP); + + // Update EBP with the new base value... + if (NumBytes == 0) // mov EBP, ESP + MI = BuildMI(X86::MOVrr32, 2, X86::EBP).addReg(X86::ESP); + else // lea EBP, [ESP+StackSize] + MI = addRegOffset(BuildMI(X86::LEAr32, 5, X86::EBP), X86::ESP, NumBytes); + MBBI = MBB.insert(MBBI, MI)+1; + } else { // When we have no frame pointer, we reserve argument space for call sites // in the function immediately on entry to the current function. This @@ -181,12 +193,12 @@ // Update frame info to pretend that this is part of the stack... MFI->setStackSize(NumBytes); - } - if (NumBytes) { - // adjust stack pointer: ESP -= numbytes - MI = BuildMI(X86::SUBri32, 2, X86::ESP).addReg(X86::ESP).addZImm(NumBytes); - MBBI = 1+MBB.insert(MBBI, MI); + if (NumBytes) { + // adjust stack pointer: ESP -= numbytes + MI= BuildMI(X86::SUBri32, 2, X86::ESP).addReg(X86::ESP).addZImm(NumBytes); + MBB.insert(MBBI, MI); + } } } From lattner at cs.uiuc.edu Tue Oct 14 15:54:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 15:54:02 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.cpp Miscompilation.cpp Message-ID: <200310142053.PAA14946@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.cpp updated: 1.16 -> 1.17 Miscompilation.cpp updated: 1.15 -> 1.16 --- Log message: Eliminate the bugpoint -mode option, by making bugpoint automatically infer the root of all of your problems --- Diffs of the changes: (+22 -36) Index: llvm/tools/bugpoint/BugDriver.cpp diff -u llvm/tools/bugpoint/BugDriver.cpp:1.16 llvm/tools/bugpoint/BugDriver.cpp:1.17 --- llvm/tools/bugpoint/BugDriver.cpp:1.16 Mon Oct 13 16:04:26 2003 +++ llvm/tools/bugpoint/BugDriver.cpp Tue Oct 14 15:52:55 2003 @@ -27,14 +27,6 @@ cl::opt OutputFile("output", cl::desc("Specify a reference program output " "(for miscompilation detection)")); - - enum DebugType { DebugCompile, DebugCodegen }; - cl::opt - DebugMode("mode", cl::desc("Debug mode for bugpoint:"), cl::Prefix, - cl::values(clEnumValN(DebugCompile, "compile", " Compilation"), - clEnumValN(DebugCodegen, "codegen", " Code generation"), - 0), - cl::init(DebugCompile)); } /// getPassesString - Turn a list of passes into a string which indicates the @@ -134,8 +126,6 @@ return debugCrash(); } - std::cout << "Checking for a miscompilation...\n"; - // Set up the execution environment, selecting a method to run LLVM bytecode. if (initializeExecutionEnvironment()) return true; @@ -146,33 +136,36 @@ bool CreatedOutput = false; if (ReferenceOutputFile.empty()) { std::cout << "Generating reference output from raw program..."; - if (DebugCodegen) { - ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); - } else { - ReferenceOutputFile = executeProgram("bugpoint.reference.out"); - } + ReferenceOutputFile = executeProgramWithCBE("bugpoint.reference.out"); CreatedOutput = true; std::cout << "Reference output is: " << ReferenceOutputFile << "\n"; - } + } - bool Result; - switch (DebugMode) { - default: assert(0 && "Bad value for DebugMode!"); - case DebugCompile: + // Make sure the reference output file gets deleted on exit from this + // function, if appropriate. + struct Remover { + bool DeleteIt; const std::string &Filename; + Remover(bool deleteIt, const std::string &filename) + : DeleteIt(deleteIt), Filename(filename) {} + ~Remover() { + if (DeleteIt) removeFile(Filename); + } + } RemoverInstance(CreatedOutput, ReferenceOutputFile); + + // Diff the output of the raw program against the reference output. If it + // matches, then we have a miscompilation bug. + std::cout << "*** Checking the code generator...\n"; + if (!diffProgram()) { std::cout << "\n*** Debugging miscompilation!\n"; - Result = debugMiscompilation(); - break; - case DebugCodegen: - std::cout << "Debugging code generator problem!\n"; - Result = debugCodeGenerator(); + return debugMiscompilation(); } - if (CreatedOutput) removeFile(ReferenceOutputFile); - return Result; + std::cout << "\n*** Input program does not match reference diff!\n"; + std::cout << "Debugging code generator problem!\n"; + return debugCodeGenerator(); } -void BugDriver::PrintFunctionList(const std::vector &Funcs) -{ +void BugDriver::PrintFunctionList(const std::vector &Funcs) { for (unsigned i = 0, e = Funcs.size(); i != e; ++i) { if (i) std::cout << ", "; std::cout << Funcs[i]->getName(); Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.15 llvm/tools/bugpoint/Miscompilation.cpp:1.16 --- llvm/tools/bugpoint/Miscompilation.cpp:1.15 Thu Aug 7 16:42:28 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Tue Oct 14 15:52:55 2003 @@ -261,13 +261,6 @@ /// input. /// bool BugDriver::debugMiscompilation() { - - if (diffProgram()) { - std::cout << "\n*** Input program does not match reference diff!\n" - << " Must be problem with input source!\n"; - return false; // Problem found - } - // Make sure something was miscompiled... if (!ReduceMiscompilingPasses(*this).reduceList(PassesToRun)) { std::cerr << "*** Optimized program matches reference output! No problem " From lattner at cs.uiuc.edu Tue Oct 14 15:57:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 15:57:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/CodeGeneratorBug.cpp Message-ID: <200310142056.PAA14975@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: CodeGeneratorBug.cpp updated: 1.18 -> 1.19 --- Log message: Fix minor formatting bug --- Diffs of the changes: (+2 -2) Index: llvm/tools/bugpoint/CodeGeneratorBug.cpp diff -u llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.18 llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.19 --- llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.18 Thu Aug 28 17:14:16 2003 +++ llvm/tools/bugpoint/CodeGeneratorBug.cpp Tue Oct 14 15:55:56 2003 @@ -257,9 +257,9 @@ << SafeModuleBC << " -o temporary.c\n" << " gcc -xc temporary.c -O2 -o " << SharedObject #if defined(sparc) || defined(__sparc__) || defined(__sparcv9) - << "-G" // Compile a shared library, `-G' for Sparc + << " -G" // Compile a shared library, `-G' for Sparc #else - << "-shared" // `-shared' for Linux/X86, maybe others + << " -shared" // `-shared' for Linux/X86, maybe others #endif << "\n"; } else { From lattner at cs.uiuc.edu Tue Oct 14 15:59:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 15:59:01 2003 Subject: [llvm-commits] CVS: llvm/docs/HowToSubmitABug.html Message-ID: <200310142058.PAA14994@apoc.cs.uiuc.edu> Changes in directory llvm/docs: HowToSubmitABug.html updated: 1.5 -> 1.6 --- Log message: The -mode option is no longer --- Diffs of the changes: (+4 -4) Index: llvm/docs/HowToSubmitABug.html diff -u llvm/docs/HowToSubmitABug.html:1.5 llvm/docs/HowToSubmitABug.html:1.6 --- llvm/docs/HowToSubmitABug.html:1.5 Wed Sep 17 13:51:47 2003 +++ llvm/docs/HowToSubmitABug.html Tue Oct 14 15:58:07 2003 @@ -197,7 +197,7 @@ of which may be causing the error, and run, for example:
-  bugpoint -run-cbe -mode=compile [... optimization passes ...] file-to-test.bc
+  bugpoint -run-cbe [... optimization passes ...] file-to-test.bc
 
bugpoint will try to narrow down your list of passes to the one pass @@ -222,12 +222,12 @@ To debug the JIT:
-  bugpoint -run-jit -mode=codegen -output=[correct output file] [bytecodefile]
+  bugpoint -run-jit -output=[correct output file] [bytecodefile]
 
Similarly, to debug the LLC, one would run:
-  bugpoint -run-llc -mode=codegen -output=[correct output file] [bytecodefile]
+  bugpoint -run-llc -output=[correct output file] [bytecodefile]
 
At the end of a successful bugpoint run, you will be presented @@ -265,6 +265,6 @@
Chris Lattner
-Last modified: Wed Sep 17 13:49:15 CDT 2003 +Last modified: Tue Oct 14 15:57:47 CDT 2003 From lattner at cs.uiuc.edu Tue Oct 14 16:03:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:03:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/CodeGeneratorBug.cpp Message-ID: <200310142102.QAA15031@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: CodeGeneratorBug.cpp updated: 1.19 -> 1.20 --- Log message: minor cleanups --- Diffs of the changes: (+2 -2) Index: llvm/tools/bugpoint/CodeGeneratorBug.cpp diff -u llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.19 llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.20 --- llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.19 Tue Oct 14 15:55:56 2003 +++ llvm/tools/bugpoint/CodeGeneratorBug.cpp Tue Oct 14 16:01:51 2003 @@ -258,8 +258,8 @@ << " gcc -xc temporary.c -O2 -o " << SharedObject #if defined(sparc) || defined(__sparc__) || defined(__sparcv9) << " -G" // Compile a shared library, `-G' for Sparc -#else - << " -shared" // `-shared' for Linux/X86, maybe others +#else + << " -shared" // `-shared' for Linux/X86, maybe others #endif << "\n"; } else { From lattner at cs.uiuc.edu Tue Oct 14 16:08:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:08:02 2003 Subject: [llvm-commits] CVS: llvm/lib/Support/ToolRunner.cpp Message-ID: <200310142107.QAA15048@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: ToolRunner.cpp updated: 1.3 -> 1.4 --- Log message: Actually return an error if something bad happens, don't just exit. --- Diffs of the changes: (+4 -5) Index: llvm/lib/Support/ToolRunner.cpp diff -u llvm/lib/Support/ToolRunner.cpp:1.3 llvm/lib/Support/ToolRunner.cpp:1.4 --- llvm/lib/Support/ToolRunner.cpp:1.3 Mon Oct 13 13:26:49 2003 +++ llvm/lib/Support/ToolRunner.cpp Tue Oct 14 16:07:25 2003 @@ -306,8 +306,7 @@ return ProgramResult; } -int GCC::MakeSharedObject(const std::string &InputFile, - FileType fileType, +int GCC::MakeSharedObject(const std::string &InputFile, FileType fileType, std::string &OutputFile) { OutputFile = getUniqueFilename(InputFile+".so"); // Compile the C/asm file into a shared object @@ -327,10 +326,10 @@ }; std::cout << "" << std::flush; - if(RunProgramWithTimeout(GCCPath, GCCArgs, "/dev/null", "/dev/null", - "/dev/null")) { + if (RunProgramWithTimeout(GCCPath, GCCArgs, "/dev/null", "/dev/null", + "/dev/null")) { ProcessFailure(GCCArgs); - exit(1); + return 1; } return 0; } From lattner at cs.uiuc.edu Tue Oct 14 16:10:08 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:10:08 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.h CodeGeneratorBug.cpp ExecutionDriver.cpp Message-ID: <200310142109.QAA15076@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.h updated: 1.14 -> 1.15 CodeGeneratorBug.cpp updated: 1.20 -> 1.21 ExecutionDriver.cpp updated: 1.22 -> 1.23 --- Log message: The return value of compileSharedObject was never used. Return the shared object's name instead --- Diffs of the changes: (+10 -9) Index: llvm/tools/bugpoint/BugDriver.h diff -u llvm/tools/bugpoint/BugDriver.h:1.14 llvm/tools/bugpoint/BugDriver.h:1.15 --- llvm/tools/bugpoint/BugDriver.h:1.14 Tue Aug 5 10:51:05 2003 +++ llvm/tools/bugpoint/BugDriver.h Tue Oct 14 16:09:11 2003 @@ -85,8 +85,8 @@ /// compileSharedObject - This method creates a SharedObject from a given /// BytecodeFile for debugging a code generator. - int compileSharedObject(const std::string &BytecodeFile, - std::string &SharedObject); + /// + std::string compileSharedObject(const std::string &BytecodeFile); /// debugCodeGenerator - This method narrows down a module to a function or /// set of functions, using the CBE as a ``safe'' code generator for other Index: llvm/tools/bugpoint/CodeGeneratorBug.cpp diff -u llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.20 llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.21 --- llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.20 Tue Oct 14 16:01:51 2003 +++ llvm/tools/bugpoint/CodeGeneratorBug.cpp Tue Oct 14 16:09:11 2003 @@ -225,8 +225,7 @@ } // Make a shared library - std::string SharedObject; - BD.compileSharedObject(SafeModuleBC, SharedObject); + std::string SharedObject = compileSharedObject(SafeModuleBC); delete SafeModule; delete TestModule; Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.22 llvm/tools/bugpoint/ExecutionDriver.cpp:1.23 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.22 Tue Oct 7 08:45:51 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Tue Oct 14 16:09:11 2003 @@ -135,16 +135,16 @@ return executeProgram(OutputFile, BytecodeFile, SharedObject, cbe); } -int BugDriver::compileSharedObject(const std::string &BytecodeFile, - std::string &SharedObject) { +std::string BugDriver::compileSharedObject(const std::string &BytecodeFile) { assert(Interpreter && "Interpreter should have been created already!"); - std::string Message, OutputCFile; + std::string OutputCFile; // Using CBE cbe->OutputC(BytecodeFile, OutputCFile); #if 0 /* This is an alternative, as yet unimplemented */ // Using LLC + std::string Message; LLC *llc = createLLCtool(Message); if (llc->OutputAsm(BytecodeFile, OutputFile)) { std::cerr << "Could not generate asm code with `llc', exiting.\n"; @@ -152,12 +152,14 @@ } #endif - gcc->MakeSharedObject(OutputCFile, CFile, SharedObject); + std::string SharedObjectFile; + if (gcc->MakeSharedObject(OutputCFile, CFile, SharedObject)) + exit(1); // Remove the intermediate C file removeFile(OutputCFile); - return 0; + return SharedObjectFile; } From gaeke at cs.uiuc.edu Tue Oct 14 16:27:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Oct 14 16:27:02 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Message-ID: <200310142126.QAA27761@trinity.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: UnpackTraceFunction.cpp added (r1.1) --- Log message: Work in progress: unpack trace-to-function functions back into gooey lumps of code. Maybe you could say it defunctifies functions. Or something. --- Diffs of the changes: (+98 -0) Index: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp diff -c /dev/null reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.1 *** /dev/null Tue Oct 14 16:26:09 2003 --- reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Tue Oct 14 16:25:58 2003 *************** *** 0 **** --- 1,98 ---- + //===- UnpackTraceFunction.cpp - Convert functions back to traces -*- C++ -*--=// + // + // WARNING, WARNING, WARNING; THIS IS HALF-UNIMPLEMENTED WORK IN PROGRESS! + // Methods to convert functions, which had previously been converted from + // traces into functions, back into traces. + // + //===-----------------------------------------------------------------------===// + + #include "llvm/CodeGen/MachineBasicBlock.h" + #include "llvm/CodeGen/MachineFunction.h" + #include "llvm/Function.h" + #include + + // FIXME: following decl should be shared with TraceToFunction.cpp in a header + typedef std::set LiveVariableSet; + + struct AllocInfo { + // FIXME: this should be the same as what you see in PhyRegAlloc.cpp + // but with equality/inequality operators + bool operator== (const AllocInfo &X) const { return false; /* FIXME */ } + bool operator!= (const AllocInfo &X) const { return !(*this == X); } + }; + + /// Insert a machine instruction for the current architecture, that + /// copies the value in Source to the location specified by Target, at + /// the beginning of B. + /// + void insertCopy (AllocInfo &Source, AllocInfo &Target, MachineBasicBlock &B) { + // FIXME: not yet implemented + } + + /// Get the register number or stack position where V can be found in the + /// machine code for the function F. + /// + AllocInfo getRegisterAllocatedForValue (Function *F, Value *V) { + AllocInfo AI; + // FIXME: not yet implemented + return AI; + } + + /// Returns a pointer to the return instruction in B, if B contains one, + /// or null otherwise. + /// + MachineInstr *containsReturnInstruction (MachineBasicBlock &B) { + // FIXME: not yet implemented + return 0; + } + + /// Insert copies in two places in the machine code for TraceF: + /// first, at the entry basic block to copy the values in Si from + /// MatrixF's registers to TraceF's registers, and second, + /// at each exit basic block to copy the values in So from TraceF's + /// registers to MatrixF's registers. + /// + void insertLiveVariableCopies(Function *MatrixF, Function *TraceF, + LiveVariableSet &Si, LiveVariableSet &So) { + MachineFunction &MF = MachineFunction::get (TraceF); + + // Modify ENTRY MachineBasicBlock of MF + MachineBasicBlock &E = MF.front (); // E = Entry MBB of MF + for (LiveVariableSet::iterator SI = Si.begin (), SE = Si.end (); SI != SE; + ++SI) { + Value *V = *SI; + AllocInfo Source = getRegisterAllocatedForValue (MatrixF, V); + AllocInfo Target = getRegisterAllocatedForValue (TraceF, V); + if (Source != Target) + insertCopy (Source, Target, E); + } + + // Modify EXIT MachineBasicBlocks of MF + for (MachineFunction::iterator I = MF.begin (), E = MF.end (); I != E; ++I) { + MachineBasicBlock &B = *I; + if (MachineInstr *RI = containsReturnInstruction (B)) { + #ifdef PSEUDOCODE + Erase the contents of B; + #endif + for (LiveVariableSet::iterator SI = So.begin (), SE = So.end (); + SI != SE; ++SI) { + Value *V = *SI; + AllocInfo Source = getRegisterAllocatedForValue (TraceF, V); + AllocInfo Target = getRegisterAllocatedForValue (MatrixF, V); + if (Source != Target) + insertCopy (Source, Target, B); + } + #ifdef PSEUDOCODE + Let RBB be the address in memory of the MachineBasicBlock in MatrixF + that RI would have returned to; + if (RBB is within the range of a Branch Always) { + Create a new "Branch Always" MachineInstr MI, which branches to RBB; + Insert MI at the end of the MachineBasicBlock B; + } else { + Use nifty "insert far call" code in SparcV9CodeEmitter; + } + #endif + } + } + } + From gaeke at cs.uiuc.edu Tue Oct 14 16:27:06 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Oct 14 16:27:06 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/TraceToFunction.cpp Message-ID: <200310142126.QAA27771@trinity.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: TraceToFunction.cpp updated: 1.8 -> 1.9 --- Log message: Expand head-of-file comment. --- Diffs of the changes: (+2 -1) Index: reopt/lib/LightWtProfiling/TraceToFunction.cpp diff -u reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.8 reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.9 --- reopt/lib/LightWtProfiling/TraceToFunction.cpp:1.8 Mon Oct 13 16:36:06 2003 +++ reopt/lib/LightWtProfiling/TraceToFunction.cpp Tue Oct 14 16:24:52 2003 @@ -1,6 +1,7 @@ //===- TraceToFunction.cpp - Convert traces to functions ---------*- C++ -*--=// // -// Repackage traces as functions. +// Repackage traces as functions, so that global (function-level) optimizations +// can be applied to traces. // //===----------------------------------------------------------------------===// From lattner at cs.uiuc.edu Tue Oct 14 16:34:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:34:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Support/ToolRunner.h Message-ID: <200310142133.QAA17156@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Support: ToolRunner.h updated: 1.2 -> 1.3 --- Log message: Substantial cleanups: * Add header comment * Remove extraneous #includes * Move the FileType enum into the GCC class * The GCC class is not virtual. * Move all of the "constructor" functions into the classes themselves * Stop using cl::list as arguments, use std::vector instead (which cl::list derives from) * Improve comments --- Diffs of the changes: (+38 -39) Index: llvm/include/llvm/Support/ToolRunner.h diff -u llvm/include/llvm/Support/ToolRunner.h:1.2 llvm/include/llvm/Support/ToolRunner.h:1.3 --- llvm/include/llvm/Support/ToolRunner.h:1.2 Tue Sep 30 13:28:53 2003 +++ llvm/include/llvm/Support/ToolRunner.h Tue Oct 14 16:33:43 2003 @@ -1,39 +1,39 @@ //===-- Support/ToolRunner.h ------------------------------------*- C++ -*-===// // -// FIXME: document +// This file exposes an abstraction around a platform C compiler, used to +// compile C and assembly code. It also exposes an "AbstractIntepreter" +// interface, which is used to execute code using one of the LLVM execution +// engines. // //===----------------------------------------------------------------------===// #ifndef TOOLRUNNER_H #define TOOLRUNNER_H -#include "Support/CommandLine.h" #include "Support/SystemUtils.h" -#include -#include -#include #include -enum FileType { AsmFile, CFile }; +class CBE; +class LLC; //===---------------------------------------------------------------------===// // GCC abstraction // -// This is not a *real* AbstractInterpreter as it does not accept bytecode -// files, but only input acceptable to GCC, i.e. C, C++, and assembly files -// class GCC { std::string GCCPath; // The path to the gcc executable -public: GCC(const std::string &gccPath) : GCCPath(gccPath) { } - virtual ~GCC() {} +public: + enum FileType { AsmFile, CFile }; + + static GCC* create(const std::string &ProgramPath, std::string &Message); - virtual int ExecuteProgram(const std::string &ProgramFile, - const cl::list &Args, - FileType fileType, - const std::string &InputFile, - const std::string &OutputFile, - const std::string &SharedLib = ""); + + int ExecuteProgram(const std::string &ProgramFile, + const std::vector &Args, + FileType fileType, + const std::string &InputFile, + const std::string &OutputFile, + const std::string &SharedLib = ""); int MakeSharedObject(const std::string &InputFile, FileType fileType, @@ -42,14 +42,22 @@ void ProcessFailure(const char **Args); }; -GCC* createGCCtool(const std::string &ProgramPath, - std::string &Message); +//===---------------------------------------------------------------------===// /// AbstractInterpreter Class - Subclasses of this class are used to execute /// LLVM bytecode in a variety of ways. This abstract interface hides this /// complexity behind a simple interface. /// struct AbstractInterpreter { + static CBE* createCBE(const std::string &ProgramPath, std::string &Message); + static LLC *createLLC(const std::string &ProgramPath, std::string &Message); + + static AbstractInterpreter* createLLI(const std::string &ProgramPath, + std::string &Message); + + static AbstractInterpreter* createJIT(const std::string &ProgramPath, + std::string &Message); + virtual ~AbstractInterpreter() {} @@ -57,7 +65,7 @@ /// specified filename. This returns the exit code of the program. /// virtual int ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib = "") = 0; @@ -74,19 +82,17 @@ ~CBE() { delete gcc; } virtual int ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib = ""); - // Sometimes we just want to go half-way and only generate the C file, - // not necessarily compile it with GCC and run the program - virtual int OutputC(const std::string &Bytecode, - std::string &OutputCFile); - + // Sometimes we just want to go half-way and only generate the .c file, + // not necessarily compile it with GCC and run the program. + // + virtual int OutputC(const std::string &Bytecode, std::string &OutputCFile); }; -CBE* createCBEtool(const std::string &ProgramPath, std::string &Message); //===---------------------------------------------------------------------===// // LLC Implementation of AbstractIntepreter interface @@ -100,22 +106,15 @@ ~LLC() { delete gcc; } virtual int ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib = ""); - int OutputAsm(const std::string &Bytecode, - std::string &OutputAsmFile); + // Sometimes we just want to go half-way and only generate the .s file, + // not necessarily compile it all the way and run the program. + // + int OutputAsm(const std::string &Bytecode, std::string &OutputAsmFile); }; - -LLC* createLLCtool(const std::string &ProgramPath, std::string &Message); - -AbstractInterpreter* createLLItool(const std::string &ProgramPath, - std::string &Message); - -AbstractInterpreter* createJITtool(const std::string &ProgramPath, - std::string &Message); - #endif From lattner at cs.uiuc.edu Tue Oct 14 16:35:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:35:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Support/ToolRunner.cpp Message-ID: <200310142134.QAA17168@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: ToolRunner.cpp updated: 1.4 -> 1.5 --- Log message: Substantial cleanups: * Add header comment * Remove extraneous #includes * Move the FileType enum into the GCC class * The GCC class is not virtual. * Move all of the "constructor" functions into the classes themselves * Stop using cl::list as arguments, use std::vector instead (which cl::list derives from) * Improve comments --- Diffs of the changes: (+35 -28) Index: llvm/lib/Support/ToolRunner.cpp diff -u llvm/lib/Support/ToolRunner.cpp:1.4 llvm/lib/Support/ToolRunner.cpp:1.5 --- llvm/lib/Support/ToolRunner.cpp:1.4 Tue Oct 14 16:07:25 2003 +++ llvm/lib/Support/ToolRunner.cpp Tue Oct 14 16:34:11 2003 @@ -1,6 +1,14 @@ +//===-- ToolRunner.cpp ----------------------------------------------------===// +// +// This file implements the interfaces described in the ToolRunner.h file. +// +//===----------------------------------------------------------------------===// + #include "llvm/Support/ToolRunner.h" #include "Support/Debug.h" #include "Support/FileUtilities.h" +#include +#include //===---------------------------------------------------------------------===// // LLI Implementation of AbstractIntepreter interface @@ -12,14 +20,14 @@ virtual int ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib = ""); }; int LLI::ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib) { @@ -50,9 +58,9 @@ } // LLI create method - Try to find the LLI executable -AbstractInterpreter *createLLItool(const std::string &ProgramPath, - std::string &Message) { - std::string LLIPath = FindExecutable("lli", ProgramPath); +AbstractInterpreter *AbstractInterpreter::createLLI(const std::string &ProgPath, + std::string &Message) { + std::string LLIPath = FindExecutable("lli", ProgPath); if (!LLIPath.empty()) { Message = "Found lli: " + LLIPath + "\n"; return new LLI(LLIPath); @@ -65,8 +73,7 @@ //===----------------------------------------------------------------------===// // LLC Implementation of AbstractIntepreter interface // -int LLC::OutputAsm(const std::string &Bytecode, - std::string &OutputAsmFile) { +int LLC::OutputAsm(const std::string &Bytecode, std::string &OutputAsmFile) { OutputAsmFile = getUniqueFilename(Bytecode+".llc.s"); const char *LLCArgs[] = { LLCPath.c_str(), @@ -89,11 +96,10 @@ } int LLC::ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib) { - std::string OutputAsmFile; if (OutputAsm(Bytecode, OutputAsmFile)) { std::cerr << "Could not generate asm code with `llc', exiting.\n"; @@ -101,16 +107,16 @@ } // Assuming LLC worked, compile the result with GCC and run it. - int Result = gcc->ExecuteProgram(OutputAsmFile, Args, AsmFile, + int Result = gcc->ExecuteProgram(OutputAsmFile, Args, GCC::AsmFile, InputFile, OutputFile, SharedLib); removeFile(OutputAsmFile); return Result; } -/// createLLCtool - Try to find the LLC executable +/// createLLC - Try to find the LLC executable /// -LLC *createLLCtool(const std::string &ProgramPath, std::string &Message) -{ +LLC *AbstractInterpreter::createLLC(const std::string &ProgramPath, + std::string &Message) { std::string LLCPath = FindExecutable("llc", ProgramPath); if (LLCPath.empty()) { Message = "Cannot find `llc' in executable directory or PATH!\n"; @@ -118,7 +124,7 @@ } Message = "Found llc: " + LLCPath + "\n"; - GCC *gcc = createGCCtool(ProgramPath, Message); + GCC *gcc = GCC::create(ProgramPath, Message); if (!gcc) { std::cerr << Message << "\n"; exit(1); @@ -136,14 +142,14 @@ virtual int ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib = ""); }; int JIT::ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib) { @@ -173,11 +179,11 @@ InputFile, OutputFile, OutputFile); } -/// createJITtool - Try to find the LLI executable +/// createJIT - Try to find the LLI executable /// -AbstractInterpreter *createJITtool(const std::string &ProgramPath, - std::string &Message) { - std::string LLIPath = FindExecutable("lli", ProgramPath); +AbstractInterpreter *AbstractInterpreter::createJIT(const std::string &ProgPath, + std::string &Message) { + std::string LLIPath = FindExecutable("lli", ProgPath); if (!LLIPath.empty()) { Message = "Found lli: " + LLIPath + "\n"; return new JIT(LLIPath); @@ -211,7 +217,7 @@ } int CBE::ExecuteProgram(const std::string &Bytecode, - const cl::list &Args, + const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, const std::string &SharedLib) { @@ -221,16 +227,17 @@ exit(1); } - int Result = gcc->ExecuteProgram(OutputCFile, Args, CFile, + int Result = gcc->ExecuteProgram(OutputCFile, Args, GCC::CFile, InputFile, OutputFile, SharedLib); removeFile(OutputCFile); return Result; } -/// createCBEtool - Try to find the 'dis' executable +/// createCBE - Try to find the 'llvm-dis' executable /// -CBE *createCBEtool(const std::string &ProgramPath, std::string &Message) { +CBE *AbstractInterpreter::createCBE(const std::string &ProgramPath, + std::string &Message) { std::string DISPath = FindExecutable("llvm-dis", ProgramPath); if (DISPath.empty()) { Message = @@ -239,7 +246,7 @@ } Message = "Found llvm-dis: " + DISPath + "\n"; - GCC *gcc = createGCCtool(ProgramPath, Message); + GCC *gcc = GCC::create(ProgramPath, Message); if (!gcc) { std::cerr << Message << "\n"; exit(1); @@ -254,7 +261,7 @@ // files, but only input acceptable to GCC, i.e. C, C++, and assembly files // int GCC::ExecuteProgram(const std::string &ProgramFile, - const cl::list &Args, + const std::vector &Args, FileType fileType, const std::string &InputFile, const std::string &OutputFile, @@ -358,9 +365,9 @@ removeFile(ErrorFilename); } -/// createGCCtool - Try to find the `gcc' executable +/// create - Try to find the `gcc' executable /// -GCC *createGCCtool(const std::string &ProgramPath, std::string &Message) { +GCC *GCC::create(const std::string &ProgramPath, std::string &Message) { std::string GCCPath = FindExecutable("gcc", ProgramPath); if (GCCPath.empty()) { Message = "Cannot find `gcc' in executable directory or PATH!\n"; From brukman at cs.uiuc.edu Tue Oct 14 16:36:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:36:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/PassManager.h Message-ID: <200310142135.QAA05916@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: PassManager.h updated: 1.8 -> 1.9 --- Log message: Enabling incremental bytecode loading in the JIT: * Add ModuleProvider as a parameter to FunctionPassManager --- Diffs of the changes: (+3 -1) Index: llvm/include/llvm/PassManager.h diff -u llvm/include/llvm/PassManager.h:1.8 llvm/include/llvm/PassManager.h:1.9 --- llvm/include/llvm/PassManager.h:1.8 Fri Oct 10 12:38:31 2003 +++ llvm/include/llvm/PassManager.h Tue Oct 14 16:34:56 2003 @@ -12,6 +12,7 @@ class Pass; class Module; +class ModuleProvider; template class PassManagerT; class PassManager { @@ -39,8 +40,9 @@ class FunctionPassManager { PassManagerT *PM; // This is a straightforward Pimpl class + ModuleProvider *MP; public: - FunctionPassManager(); + FunctionPassManager(ModuleProvider *P); ~FunctionPassManager(); /// add - Add a pass to the queue of passes to run. This passes From brukman at cs.uiuc.edu Tue Oct 14 16:37:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:37:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/ExecutionEngine.cpp Message-ID: <200310142136.QAA05948@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine: ExecutionEngine.cpp updated: 1.31 -> 1.32 --- Log message: Enabling incremental bytecode loading in the JIT: * ExecutionEngine and VM can be constructed using a ModuleProvider. --- Diffs of the changes: (+5 -4) Index: llvm/lib/ExecutionEngine/ExecutionEngine.cpp diff -u llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.31 llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.32 --- llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.31 Fri Oct 10 12:45:12 2003 +++ llvm/lib/ExecutionEngine/ExecutionEngine.cpp Tue Oct 14 16:36:31 2003 @@ -22,22 +22,23 @@ Statistic<> NumInitBytes("lli", "Number of bytes of global vars initialized"); ExecutionEngine::~ExecutionEngine() { - delete &CurMod; + delete MP; } /// FIXME: document /// -ExecutionEngine *ExecutionEngine::create(Module *M, bool ForceInterpreter, +ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP, + bool ForceInterpreter, bool TraceMode) { ExecutionEngine *EE = 0; // If there is nothing that is forcing us to use the interpreter, make a JIT. if (!ForceInterpreter && !TraceMode) - EE = VM::create(M); + EE = VM::create(MP); // If we can't make a JIT, make an interpreter instead. if (EE == 0) - EE = Interpreter::create(M, TraceMode); + EE = Interpreter::create(MP->releaseModule(), TraceMode); return EE; } From brukman at cs.uiuc.edu Tue Oct 14 16:37:04 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:37:04 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/ExecutionEngine/ExecutionEngine.h Message-ID: <200310142136.QAA05935@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ExecutionEngine: ExecutionEngine.h updated: 1.13 -> 1.14 --- Log message: Enabling incremental bytecode loading in the JIT: * ExecutionEngine can be constructed from a ModuleProvider * Alphabetized order of forward-declared classes --- Diffs of the changes: (+13 -7) Index: llvm/include/llvm/ExecutionEngine/ExecutionEngine.h diff -u llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.13 llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.14 --- llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.13 Fri Sep 5 13:55:02 2003 +++ llvm/include/llvm/ExecutionEngine/ExecutionEngine.h Tue Oct 14 16:35:52 2003 @@ -8,23 +8,25 @@ #ifndef EXECUTION_ENGINE_H #define EXECUTION_ENGINE_H +#include "llvm/ModuleProvider.h" #include #include #include #include class Constant; -class Type; -class GlobalValue; class Function; +union GenericValue; +class GlobalValue; class Module; class TargetData; -union GenericValue; +class Type; class ExecutionEngine { Module &CurMod; const TargetData *TD; protected: + ModuleProvider *MP; // GlobalAddress - A mapping between LLVM global values and their actualized // version... std::map GlobalAddress; @@ -32,9 +34,13 @@ void setTargetData(const TargetData &td) { TD = &td; } + public: - ExecutionEngine(Module *M) : CurMod(*M) { - assert(M && "Module is null?"); + ExecutionEngine(ModuleProvider *P) : CurMod(*(P->getModule())), MP(P) { + assert(P && "ModuleProvider is null?"); + } + ExecutionEngine(Module *M) : CurMod(*M), MP(0) { + assert(M && "Module is null?"); } virtual ~ExecutionEngine(); @@ -47,8 +53,8 @@ virtual GenericValue run(Function *F, const std::vector &ArgValues) = 0; - static ExecutionEngine *create (Module *M, bool ForceInterpreter, - bool TraceMode); + static ExecutionEngine *create(ModuleProvider *MP, bool ForceInterpreter, + bool TraceMode); void addGlobalMapping(const Function *F, void *Addr) { void *&CurVal = GlobalAddress[(const GlobalValue*)F]; From brukman at cs.uiuc.edu Tue Oct 14 16:38:09 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:38:09 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp VM.cpp VM.h Message-ID: <200310142137.QAA05981@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: JIT.cpp updated: 1.18 -> 1.19 VM.cpp updated: 1.7 -> 1.8 VM.h updated: 1.13 -> 1.14 --- Log message: Enabling incremental bytecode loading in the JIT: * The VM is now constructed with a ModuleProvider --- Diffs of the changes: (+15 -7) Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.18 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.19 --- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.18 Fri Sep 5 14:39:22 2003 +++ llvm/lib/ExecutionEngine/JIT/JIT.cpp Tue Oct 14 16:37:41 2003 @@ -45,7 +45,7 @@ /// create - Create an return a new JIT compiler if there is one available /// for the current target. Otherwise, return null. /// -ExecutionEngine *VM::create(Module *M) { +ExecutionEngine *VM::create(ModuleProvider *MP) { TargetMachine* (*TargetMachineAllocator)(const Module &) = 0; // Allow a command-line switch to override what *should* be the default target @@ -71,14 +71,16 @@ } // Allocate a target... - TargetMachine *Target = TargetMachineAllocator(*M); + TargetMachine *Target = TargetMachineAllocator(*(MP->getModule())); assert(Target && "Could not allocate target machine!"); // Create the virtual machine object... - return new VM(M, Target); + return new VM(MP, Target); } -VM::VM(Module *M, TargetMachine *tm) : ExecutionEngine(M), TM(*tm) { +VM::VM(ModuleProvider *MP, TargetMachine *tm) : ExecutionEngine(MP), TM(*tm), + PM(MP) +{ setTargetData(TM.getTargetData()); // Initialize MCE @@ -94,7 +96,10 @@ // Specialize LLVM code for this target machine and then // run basic dataflow optimizations on LLVM code. PM.add(createPreSelectionPass(TM)); - PM.run(*M); + // We cannot utilize function-at-a-time loading here because PreSelection + // is a ModulePass. + MP->materializeModule(); + PM.run(*(MP->getModule())); } #endif Index: llvm/lib/ExecutionEngine/JIT/VM.cpp diff -u llvm/lib/ExecutionEngine/JIT/VM.cpp:1.7 llvm/lib/ExecutionEngine/JIT/VM.cpp:1.8 --- llvm/lib/ExecutionEngine/JIT/VM.cpp:1.7 Wed Aug 13 13:16:34 2003 +++ llvm/lib/ExecutionEngine/JIT/VM.cpp Tue Oct 14 16:37:41 2003 @@ -43,6 +43,9 @@ void *&Addr = GlobalAddress[F]; // Function already code gen'd if (Addr) return Addr; + // Make sure we read in the function if it exists in this Module + MP->materializeFunction(F); + if (F->isExternal()) return Addr = getPointerToNamedFunction(F->getName()); Index: llvm/lib/ExecutionEngine/JIT/VM.h diff -u llvm/lib/ExecutionEngine/JIT/VM.h:1.13 llvm/lib/ExecutionEngine/JIT/VM.h:1.14 --- llvm/lib/ExecutionEngine/JIT/VM.h:1.13 Fri Sep 5 14:39:22 2003 +++ llvm/lib/ExecutionEngine/JIT/VM.h Tue Oct 14 16:37:41 2003 @@ -23,13 +23,13 @@ MachineCodeEmitter *MCE; // MCE object public: - VM(Module *M, TargetMachine *tm); + VM(ModuleProvider *MP, TargetMachine *tm); ~VM(); /// create - Create an return a new JIT compiler if there is one available /// for the current target. Otherwise, return null. /// - static ExecutionEngine *create(Module *M); + static ExecutionEngine *create(ModuleProvider *MP); /// run - Start execution with the specified function and arguments. /// From brukman at cs.uiuc.edu Tue Oct 14 16:39:02 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:39:02 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Pass.cpp Message-ID: <200310142138.QAA06005@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Pass.cpp updated: 1.50 -> 1.51 --- Log message: Enabling incremental bytecode loading in the JIT: * FunctionPassManager ctor now takes in a ModuleProvider * run() materializes function before running passes on it --- Diffs of the changes: (+10 -3) Index: llvm/lib/VMCore/Pass.cpp diff -u llvm/lib/VMCore/Pass.cpp:1.50 llvm/lib/VMCore/Pass.cpp:1.51 --- llvm/lib/VMCore/Pass.cpp:1.50 Mon Oct 13 00:33:01 2003 +++ llvm/lib/VMCore/Pass.cpp Tue Oct 14 16:38:42 2003 @@ -9,6 +9,7 @@ #include "llvm/PassManager.h" #include "PassManagerT.h" // PassManagerT implementation #include "llvm/Module.h" +#include "llvm/ModuleProvider.h" #include "Support/STLExtras.h" #include "Support/TypeInfo.h" #include @@ -76,11 +77,17 @@ // is a simple Pimpl class that wraps the PassManagerT template. It // is like PassManager, but only deals in FunctionPasses. // -FunctionPassManager::FunctionPassManager() : PM(new PassManagerT()) {} +FunctionPassManager::FunctionPassManager(ModuleProvider *P) : + PM(new PassManagerT()), MP(P) {} FunctionPassManager::~FunctionPassManager() { delete PM; } void FunctionPassManager::add(FunctionPass *P) { PM->add(P); } void FunctionPassManager::add(ImmutablePass *IP) { PM->add(IP); } -bool FunctionPassManager::run(Function &F) { return PM->run(F); } +bool FunctionPassManager::run(Function &F) { + Function *mF = MP->getModule()->getNamedFunction(F.getName()); + assert((&F == mF) && "ModuleProvider does not contain this function!"); + MP->materializeFunction(&F); + return PM->run(F); +} //===----------------------------------------------------------------------===// @@ -177,7 +184,7 @@ return typeid(*this).name(); } -// print - Print out the internal state of the pass. This is called by Analyse +// print - Print out the internal state of the pass. This is called by Analyze // to print out the contents of an analysis. Otherwise it is not necessary to // implement this method. // From brukman at cs.uiuc.edu Tue Oct 14 16:41:00 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:41:00 2003 Subject: [llvm-commits] CVS: llvm/tools/lli/lli.cpp Message-ID: <200310142140.QAA06043@zion.cs.uiuc.edu> Changes in directory llvm/tools/lli: lli.cpp updated: 1.29 -> 1.30 --- Log message: Enabling incremental bytecode loading in the JIT: * Use the incremental bytecode reader interface to speed up execution --- Diffs of the changes: (+15 -11) Index: llvm/tools/lli/lli.cpp diff -u llvm/tools/lli/lli.cpp:1.29 llvm/tools/lli/lli.cpp:1.30 --- llvm/tools/lli/lli.cpp:1.29 Thu Sep 25 13:10:34 2003 +++ llvm/tools/lli/lli.cpp Tue Oct 14 16:39:53 2003 @@ -11,6 +11,7 @@ #include "llvm/DerivedTypes.h" #include "llvm/Module.h" +#include "llvm/ModuleProvider.h" #include "llvm/Bytecode/Reader.h" #include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/GenericValue.h" @@ -18,6 +19,7 @@ #include "llvm/Target/TargetData.h" #include "Support/CommandLine.h" #include "Support/Debug.h" +#include "Support/SystemUtils.h" namespace { cl::opt @@ -37,7 +39,7 @@ cl::init(false)); } -static std::vector makeStringVector(const char **envp) { +static std::vector makeStringVector(char * const *envp) { std::vector rv; for (unsigned i = 0; envp[i]; ++i) rv.push_back(envp[i]); @@ -92,10 +94,11 @@ /// from calling FnName, or -1 and prints an error msg. if the named /// function cannot be found. /// -int callAsMain(ExecutionEngine *EE, Module *M, const std::string &FnName, +int callAsMain(ExecutionEngine *EE, ModuleProvider *MP, + const std::string &FnName, const std::vector &Args, const std::vector &EnvVars) { - Function *Fn = M->getNamedFunction(FnName); + Function *Fn = MP->getModule()->getNamedFunction(FnName); if (!Fn) { std::cerr << "Function '" << FnName << "' not found in module.\n"; return -1; @@ -112,21 +115,22 @@ //===----------------------------------------------------------------------===// // main Driver function // -int main(int argc, char **argv, const char **envp) { +int main(int argc, char **argv, char * const *envp) { cl::ParseCommandLineOptions(argc, argv, " llvm interpreter & dynamic compiler\n"); // Load the bytecode... std::string ErrorMsg; - Module *M = ParseBytecodeFile(InputFile, &ErrorMsg); - if (M == 0) { - std::cout << "Error parsing '" << InputFile << "': " - << ErrorMsg << "\n"; + ModuleProvider *MP = 0; + try { + MP = getBytecodeModuleProvider(InputFile); + } catch (std::string &err) { + std::cerr << "Error parsing '" << InputFile << "': " << err << "\n"; exit(1); } ExecutionEngine *EE = - ExecutionEngine::create(M, ForceInterpreter, TraceMode); + ExecutionEngine::create(MP, ForceInterpreter, TraceMode); assert(EE && "Couldn't create an ExecutionEngine, not even an interpreter?"); // Add the module's name to the start of the vector of arguments to main(). @@ -135,12 +139,12 @@ const std::string ByteCodeFileSuffix(".bc"); if (InputFile.rfind(ByteCodeFileSuffix) == InputFile.length() - ByteCodeFileSuffix.length()) { - InputFile.erase(InputFile.length() - ByteCodeFileSuffix.length()); + InputFile.erase (InputFile.length() - ByteCodeFileSuffix.length()); } InputArgv.insert(InputArgv.begin(), InputFile); // Run the main function! - int ExitCode = callAsMain(EE, M, MainFunction, InputArgv, + int ExitCode = callAsMain(EE, MP, MainFunction, InputArgv, makeStringVector(envp)); // Now that we are done executing the program, shut down the execution engine From brukman at cs.uiuc.edu Tue Oct 14 16:43:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Tue Oct 14 16:43:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp Message-ID: <200310142142.QAA06085@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: ExternalFunctions.cpp updated: 1.62 -> 1.63 --- Log message: Order #includes as per the style guide. --- Diffs of the changes: (+3 -3) Index: llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.62 llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.63 --- llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.62 Fri Oct 10 13:46:25 2003 +++ llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp Tue Oct 14 16:42:11 2003 @@ -14,15 +14,15 @@ #include "Interpreter.h" #include "ExecutionAnnotations.h" -#include "llvm/Module.h" #include "llvm/DerivedTypes.h" +#include "llvm/Module.h" #include "llvm/SymbolTable.h" #include "llvm/Target/TargetData.h" -#include +#include "Support/DynamicLinker.h" #include "Config/dlfcn.h" #include "Config/link.h" #include -#include "Support/DynamicLinker.h" +#include using std::vector; typedef GenericValue (*ExFunc)(FunctionType *, const vector &); From lattner at cs.uiuc.edu Tue Oct 14 16:54:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:54:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Support/ToolRunner.h Message-ID: <200310142153.QAA19995@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Support: ToolRunner.h updated: 1.3 -> 1.4 --- Log message: Generalize abstract interpreter interface to allow linking in an arbitrary number of shared objects --- Diffs of the changes: (+20 -7) Index: llvm/include/llvm/Support/ToolRunner.h diff -u llvm/include/llvm/Support/ToolRunner.h:1.3 llvm/include/llvm/Support/ToolRunner.h:1.4 --- llvm/include/llvm/Support/ToolRunner.h:1.3 Tue Oct 14 16:33:43 2003 +++ llvm/include/llvm/Support/ToolRunner.h Tue Oct 14 16:52:50 2003 @@ -27,18 +27,28 @@ static GCC* create(const std::string &ProgramPath, std::string &Message); - + /// ExecuteProgram - Execute the program specified by "ProgramFile" (which is + /// either a .s file, or a .c file, specified by FileType), with the specified + /// arguments. Standard input is specified with InputFile, and standard + /// Output is captured to the specified OutputFile location. The SharedLibs + /// option specifies optional native shared objects that can be loaded into + /// the program for execution. + /// int ExecuteProgram(const std::string &ProgramFile, const std::vector &Args, FileType fileType, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = ""); + const std::vector &SharedLibs = + std::vector()); - int MakeSharedObject(const std::string &InputFile, - FileType fileType, + /// MakeSharedObject - This compiles the specified file (which is either a .c + /// file or a .s file) into a shared object. + /// + int MakeSharedObject(const std::string &InputFile, FileType fileType, std::string &OutputFile); +private: void ProcessFailure(const char **Args); }; @@ -68,7 +78,8 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = "") = 0; + const std::vector &SharedLibs = + std::vector()) = 0; }; //===---------------------------------------------------------------------===// @@ -85,7 +96,8 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = ""); + const std::vector &SharedLibs = + std::vector()); // Sometimes we just want to go half-way and only generate the .c file, // not necessarily compile it with GCC and run the program. @@ -109,7 +121,8 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = ""); + const std::vector &SharedLibs = + std::vector()); // Sometimes we just want to go half-way and only generate the .s file, // not necessarily compile it all the way and run the program. From lattner at cs.uiuc.edu Tue Oct 14 16:54:05 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 16:54:05 2003 Subject: [llvm-commits] CVS: llvm/lib/Support/ToolRunner.cpp Message-ID: <200310142153.QAA20002@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Support: ToolRunner.cpp updated: 1.5 -> 1.6 --- Log message: Generalize abstract interpreter interface to allow linking in an arbitrary number of shared objects --- Diffs of the changes: (+23 -18) Index: llvm/lib/Support/ToolRunner.cpp diff -u llvm/lib/Support/ToolRunner.cpp:1.5 llvm/lib/Support/ToolRunner.cpp:1.6 --- llvm/lib/Support/ToolRunner.cpp:1.5 Tue Oct 14 16:34:11 2003 +++ llvm/lib/Support/ToolRunner.cpp Tue Oct 14 16:52:52 2003 @@ -23,15 +23,16 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = ""); + const std::vector &SharedLibs = + std::vector()); }; int LLI::ExecuteProgram(const std::string &Bytecode, const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib) { - if (!SharedLib.empty()) { + const std::vector &SharedLibs) { + if (!SharedLibs.empty()) { std::cerr << "LLI currently does not support loading shared libraries.\n" << "Exiting.\n"; exit(1); @@ -99,7 +100,8 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib) { + const std::vector &SharedLibs) { + std::string OutputAsmFile; if (OutputAsm(Bytecode, OutputAsmFile)) { std::cerr << "Could not generate asm code with `llc', exiting.\n"; @@ -108,7 +110,7 @@ // Assuming LLC worked, compile the result with GCC and run it. int Result = gcc->ExecuteProgram(OutputAsmFile, Args, GCC::AsmFile, - InputFile, OutputFile, SharedLib); + InputFile, OutputFile, SharedLibs); removeFile(OutputAsmFile); return Result; } @@ -145,22 +147,24 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib = ""); + const std::vector &SharedLibs = + std::vector()); }; int JIT::ExecuteProgram(const std::string &Bytecode, const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib) { + const std::vector &SharedLibs) { // Construct a vector of parameters, incorporating those from the command-line std::vector JITArgs; JITArgs.push_back(LLIPath.c_str()); JITArgs.push_back("-quiet"); JITArgs.push_back("-force-interpreter=false"); - if (!SharedLib.empty()) { + + for (unsigned i = 0, e = SharedLibs.size(); i != e; ++i) { JITArgs.push_back("-load"); - JITArgs.push_back(SharedLib.c_str()); + JITArgs.push_back(SharedLibs[i].c_str()); } JITArgs.push_back(Bytecode.c_str()); // Add optional parameters to the running program from Argv @@ -220,7 +224,7 @@ const std::vector &Args, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib) { + const std::vector &SharedLibs) { std::string OutputCFile; if (OutputC(Bytecode, OutputCFile)) { std::cerr << "Could not generate C code with `llvm-dis', exiting.\n"; @@ -228,7 +232,7 @@ } int Result = gcc->ExecuteProgram(OutputCFile, Args, GCC::CFile, - InputFile, OutputFile, SharedLib); + InputFile, OutputFile, SharedLibs); removeFile(OutputCFile); return Result; @@ -257,21 +261,21 @@ //===---------------------------------------------------------------------===// // GCC abstraction // -// This is not a *real* AbstractInterpreter as it does not accept bytecode -// files, but only input acceptable to GCC, i.e. C, C++, and assembly files -// int GCC::ExecuteProgram(const std::string &ProgramFile, const std::vector &Args, FileType fileType, const std::string &InputFile, const std::string &OutputFile, - const std::string &SharedLib) { - std::string OutputBinary = getUniqueFilename(ProgramFile+".gcc.exe"); + const std::vector &SharedLibs) { std::vector GCCArgs; GCCArgs.push_back(GCCPath.c_str()); - if (!SharedLib.empty()) // Specify the shared library to link in... - GCCArgs.push_back(SharedLib.c_str()); + + // Specify the shared libraries to link in... + for (unsigned i = 0, e = SharedLibs.size(); i != e; ++i) + GCCArgs.push_back(SharedLibs[i].c_str()); + + // Specify -x explicitly in case the extension is wonky GCCArgs.push_back("-x"); if (fileType == CFile) { GCCArgs.push_back("c"); @@ -281,6 +285,7 @@ } GCCArgs.push_back(ProgramFile.c_str()); // Specify the input filename... GCCArgs.push_back("-o"); + std::string OutputBinary = getUniqueFilename(ProgramFile+".gcc.exe"); GCCArgs.push_back(OutputBinary.c_str()); // Output to the right file... GCCArgs.push_back("-lm"); // Hard-code the math library... GCCArgs.push_back("-O2"); // Optimize the program a bit... From gaeke at cs.uiuc.edu Tue Oct 14 17:00:03 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Tue Oct 14 17:00:03 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Message-ID: <200310142159.QAA00984@trinity.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: UnpackTraceFunction.cpp updated: 1.1 -> 1.2 --- Log message: De-pseudo-ify some code. --- Diffs of the changes: (+8 -4) Index: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp diff -u reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.1 reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.2 --- reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.1 Tue Oct 14 16:25:58 2003 +++ reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Tue Oct 14 16:58:59 2003 @@ -16,7 +16,7 @@ struct AllocInfo { // FIXME: this should be the same as what you see in PhyRegAlloc.cpp - // but with equality/inequality operators + // but with equality/inequality operators defined appropriately. bool operator== (const AllocInfo &X) const { return false; /* FIXME */ } bool operator!= (const AllocInfo &X) const { return !(*this == X); } }; @@ -71,9 +71,13 @@ for (MachineFunction::iterator I = MF.begin (), E = MF.end (); I != E; ++I) { MachineBasicBlock &B = *I; if (MachineInstr *RI = containsReturnInstruction (B)) { -#ifdef PSEUDOCODE - Erase the contents of B; -#endif + // Erase the contents of B + while (!B.empty ()) { + MachineBasicBlock::iterator MBBI = B.begin (); + MachineInstr *MI = *MBBI; + B.erase (MBBI); + delete MI; + } for (LiveVariableSet::iterator SI = So.begin (), SE = So.end (); SI != SE; ++SI) { Value *V = *SI; From lattner at cs.uiuc.edu Tue Oct 14 17:00:08 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 17:00:08 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.h CodeGeneratorBug.cpp ExecutionDriver.cpp Message-ID: <200310142159.QAA24296@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.h updated: 1.15 -> 1.16 CodeGeneratorBug.cpp updated: 1.21 -> 1.22 ExecutionDriver.cpp updated: 1.23 -> 1.24 --- Log message: Change the execute methods to take the shared object filename by const reference. Other adjustments to work with the new ToolRunner interfaces --- Diffs of the changes: (+37 -27) Index: llvm/tools/bugpoint/BugDriver.h diff -u llvm/tools/bugpoint/BugDriver.h:1.15 llvm/tools/bugpoint/BugDriver.h:1.16 --- llvm/tools/bugpoint/BugDriver.h:1.15 Tue Oct 14 16:09:11 2003 +++ llvm/tools/bugpoint/BugDriver.h Tue Oct 14 16:59:36 2003 @@ -165,21 +165,25 @@ /// std::string executeProgram(std::string RequestedOutputFilename = "", std::string Bytecode = "", - std::string SharedObject = "", + const std::string &SharedObjects = "", AbstractInterpreter *AI = 0); /// executeProgramWithCBE - Used to create reference output with the C /// backend, if reference output is not provided. - std::string executeProgramWithCBE(std::string RequestedOutputFilename = "", - std::string Bytecode = "", - std::string SharedObject = ""); + /// + std::string executeProgramWithCBE(std::string OutputFile = "", + std::string BytecodeFile = "", + const std::string &SharedObj = "") { + return executeProgram(OutputFile, BytecodeFile, SharedObj, + (AbstractInterpreter*)cbe); + } /// diffProgram - This method executes the specified module and diffs the /// output against the file specified by ReferenceOutputFile. If the output /// is different, true is returned. /// bool diffProgram(const std::string &BytecodeFile = "", - const std::string &SharedObject = "", + const std::string &SharedObj = "", bool RemoveBytecode = false); }; Index: llvm/tools/bugpoint/CodeGeneratorBug.cpp diff -u llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.21 llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.22 --- llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.21 Tue Oct 14 16:09:11 2003 +++ llvm/tools/bugpoint/CodeGeneratorBug.cpp Tue Oct 14 16:59:36 2003 @@ -48,8 +48,7 @@ bool ReduceMisCodegenFunctions::TestFuncs(const std::vector &Funcs, - bool KeepFiles) -{ + bool KeepFiles) { std::cout << "Testing functions: "; BD.PrintFunctionList(Funcs); std::cout << "\t"; @@ -225,7 +224,7 @@ } // Make a shared library - std::string SharedObject = compileSharedObject(SafeModuleBC); + std::string SharedObject = BD.compileSharedObject(SafeModuleBC); delete SafeModule; delete TestModule; Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.23 llvm/tools/bugpoint/ExecutionDriver.cpp:1.24 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.23 Tue Oct 14 16:09:11 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Tue Oct 14 16:59:36 2003 @@ -67,10 +67,18 @@ // the command line std::string Message; switch (InterpreterSel) { - case RunLLI: Interpreter = createLLItool(getToolName(), Message); break; - case RunLLC: Interpreter = createLLCtool(getToolName(), Message); break; - case RunJIT: Interpreter = createJITtool(getToolName(), Message); break; - case RunCBE: Interpreter = createCBEtool(getToolName(), Message); break; + case RunLLI: + Interpreter = AbstractInterpreter::createLLI(getToolName(), Message); + break; + case RunLLC: + Interpreter = AbstractInterpreter::createLLC(getToolName(), Message); + break; + case RunJIT: + Interpreter = AbstractInterpreter::createJIT(getToolName(), Message); + break; + case RunCBE: + Interpreter = AbstractInterpreter::createCBE(getToolName(), Message); + break; default: Message = "Sorry, this back-end is not supported by bugpoint right now!\n"; break; @@ -78,9 +86,9 @@ std::cerr << Message; // Initialize auxiliary tools for debugging - cbe = createCBEtool(getToolName(), Message); + cbe = AbstractInterpreter::createCBE(getToolName(), Message); if (!cbe) { std::cout << Message << "\nExiting.\n"; exit(1); } - gcc = createGCCtool(getToolName(), Message); + gcc = GCC::create(getToolName(), Message); if (!gcc) { std::cout << Message << "\nExiting.\n"; exit(1); } // If there was an error creating the selected interpreter, quit with error. @@ -94,9 +102,10 @@ /// std::string BugDriver::executeProgram(std::string OutputFile, std::string BytecodeFile, - std::string SharedObject, + const std::string &SharedObj, AbstractInterpreter *AI) { - assert((Interpreter||AI) && "Interpreter should have been created already!"); + if (AI == 0) AI = Interpreter; + assert(AI && "Interpreter should have been created already!"); bool CreatedBytecode = false; if (BytecodeFile.empty()) { // Emit the program to a bytecode file... @@ -115,12 +124,15 @@ // Check to see if this is a valid output filename... OutputFile = getUniqueFilename(OutputFile); + // Figure out which shared objects to run, if any. + std::vector SharedObjs; + if (!SharedObj.empty()) + SharedObjs.push_back(SharedObj); + // Actually execute the program! - int RetVal = (AI != 0) ? - AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile, OutputFile, - SharedObject) : - Interpreter->ExecuteProgram(BytecodeFile, InputArgv, - InputFile, OutputFile, SharedObject); + int RetVal = AI->ExecuteProgram(BytecodeFile, InputArgv, InputFile, + OutputFile, SharedObjs); + // Remove the temporary bytecode file. if (CreatedBytecode) removeFile(BytecodeFile); @@ -129,11 +141,6 @@ return OutputFile; } -std::string BugDriver::executeProgramWithCBE(std::string OutputFile, - std::string BytecodeFile, - std::string SharedObject) { - return executeProgram(OutputFile, BytecodeFile, SharedObject, cbe); -} std::string BugDriver::compileSharedObject(const std::string &BytecodeFile) { assert(Interpreter && "Interpreter should have been created already!"); @@ -153,7 +160,7 @@ #endif std::string SharedObjectFile; - if (gcc->MakeSharedObject(OutputCFile, CFile, SharedObject)) + if (gcc->MakeSharedObject(OutputCFile, GCC::CFile, SharedObjectFile)) exit(1); // Remove the intermediate C file From lattner at cs.uiuc.edu Tue Oct 14 17:25:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Tue Oct 14 17:25:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/ExecutionDriver.cpp Message-ID: <200310142224.RAA24898@apoc.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: ExecutionDriver.cpp updated: 1.24 -> 1.25 --- Log message: add support forloading additional .so files on the command line --- Diffs of the changes: (+6 -1) Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.24 llvm/tools/bugpoint/ExecutionDriver.cpp:1.25 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.24 Tue Oct 14 16:59:36 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Tue Oct 14 17:24:31 2003 @@ -42,6 +42,11 @@ cl::opt InputFile("input", cl::init("/dev/null"), cl::desc("Filename to pipe in as stdin (default: /dev/null)")); + + cl::list + AdditionalSOs("additional-so", + cl::desc("Additional shared objects to load " + "into executing programs")); } // Anything specified after the --args option are taken as arguments to the @@ -125,7 +130,7 @@ OutputFile = getUniqueFilename(OutputFile); // Figure out which shared objects to run, if any. - std::vector SharedObjs; + std::vector SharedObjs(AdditionalSOs); if (!SharedObj.empty()) SharedObjs.push_back(SharedObj); From lattner at cs.uiuc.edu Wed Oct 15 11:40:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:40:02 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Value.h Message-ID: <200310151639.LAA02444@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm: Value.h updated: 1.44 -> 1.45 --- Log message: Add new hasOneUse() method. Remove explicit inline qualifiers --- Diffs of the changes: (+13 -9) Index: llvm/include/llvm/Value.h diff -u llvm/include/llvm/Value.h:1.44 llvm/include/llvm/Value.h:1.45 --- llvm/include/llvm/Value.h:1.44 Thu Oct 2 14:44:23 2003 +++ llvm/include/llvm/Value.h Wed Oct 15 11:39:04 2003 @@ -97,18 +97,22 @@ typedef std::vector::iterator use_iterator; typedef std::vector::const_iterator use_const_iterator; - inline unsigned use_size() const { return Uses.size(); } - inline bool use_empty() const { return Uses.empty(); } - inline use_iterator use_begin() { return Uses.begin(); } - inline use_const_iterator use_begin() const { return Uses.begin(); } - inline use_iterator use_end() { return Uses.end(); } - inline use_const_iterator use_end() const { return Uses.end(); } - inline User *use_back() { return Uses.back(); } - inline const User *use_back() const { return Uses.back(); } + unsigned use_size() const { return Uses.size(); } + bool use_empty() const { return Uses.empty(); } + use_iterator use_begin() { return Uses.begin(); } + use_const_iterator use_begin() const { return Uses.begin(); } + use_iterator use_end() { return Uses.end(); } + use_const_iterator use_end() const { return Uses.end(); } + User *use_back() { return Uses.back(); } + const User *use_back() const { return Uses.back(); } + + /// hasOneUse - Return true if there is exactly one user of this value. + /// + bool hasOneUse() const { return use_size() == 1; } /// addUse/killUse - These two methods should only be used by the Use class /// below. - inline void addUse(User *I) { Uses.push_back(I); } + void addUse(User *I) { Uses.push_back(I); } void killUse(User *I); }; From lattner at cs.uiuc.edu Wed Oct 15 11:43:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:43:02 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/DemoteRegToStack.cpp Message-ID: <200310151642.LAA02504@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: DemoteRegToStack.cpp updated: 1.3 -> 1.4 --- Log message: Cleanup --- Diffs of the changes: (+2 -5) Index: llvm/lib/Transforms/Utils/DemoteRegToStack.cpp diff -u llvm/lib/Transforms/Utils/DemoteRegToStack.cpp:1.3 llvm/lib/Transforms/Utils/DemoteRegToStack.cpp:1.4 --- llvm/lib/Transforms/Utils/DemoteRegToStack.cpp:1.3 Sat Sep 20 09:36:23 2003 +++ llvm/lib/Transforms/Utils/DemoteRegToStack.cpp Wed Oct 15 11:42:21 2003 @@ -122,11 +122,8 @@ } static void DeletePhis(PhiSet& phisToGo) { - for (PhiSetIterator PI=phisToGo.begin(), PE=phisToGo.end(); PI != PE; ++PI) { - assert((*PI)->use_size() == 0 && "This PHI should be DEAD!"); - (*PI)->getParent()->getInstList().remove(*PI); - delete *PI; - } + for (PhiSetIterator PI = phisToGo.begin(), PE =phisToGo.end(); PI != PE; ++PI) + (*PI)->getParent()->getInstList().erase(*PI); phisToGo.clear(); } From lattner at cs.uiuc.edu Wed Oct 15 11:44:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:44:00 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Analysis/InstForest.h Message-ID: <200310151643.LAA02516@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm/Analysis: InstForest.h updated: 1.20 -> 1.21 --- Log message: Remove usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/include/llvm/Analysis/InstForest.h diff -u llvm/include/llvm/Analysis/InstForest.h:1.20 llvm/include/llvm/Analysis/InstForest.h:1.21 --- llvm/include/llvm/Analysis/InstForest.h:1.20 Tue Sep 30 13:37:40 2003 +++ llvm/include/llvm/Analysis/InstForest.h Wed Oct 15 11:43:24 2003 @@ -218,7 +218,7 @@ // template bool InstTreeNode::CanMergeInstIntoTree(Instruction *I) { - if (I->use_size() > 1) return false; + if (!I->use_empty() && !I->hasOneUse()) return false; return I->getParent() == cast(getValue())->getParent(); } From lattner at cs.uiuc.edu Wed Oct 15 11:47:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:47:01 2003 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200310151646.LAA05283@apoc.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.129 -> 1.130 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.129 llvm/lib/AsmParser/llvmAsmParser.y:1.130 --- llvm/lib/AsmParser/llvmAsmParser.y:1.129 Sun Oct 12 22:32:07 2003 +++ llvm/lib/AsmParser/llvmAsmParser.y Wed Oct 15 11:46:48 2003 @@ -103,7 +103,7 @@ // Loop over all of the uses of the GlobalValue. The only thing they are // allowed to be is ConstantPointerRef's. - assert(OldGV->use_size() == 1 && "Only one reference should exist!"); + assert(OldGV->hasOneUse() && "Only one reference should exist!"); User *U = OldGV->use_back(); // Must be a ConstantPointerRef... ConstantPointerRef *CPR = cast(U); From lattner at cs.uiuc.edu Wed Oct 15 11:49:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:01 2003 Subject: [llvm-commits] CVS: llvm/lib/CWriter/Writer.cpp Message-ID: <200310151648.LAA07012@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CWriter: Writer.cpp updated: 1.132 -> 1.133 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/CWriter/Writer.cpp diff -u llvm/lib/CWriter/Writer.cpp:1.132 llvm/lib/CWriter/Writer.cpp:1.133 --- llvm/lib/CWriter/Writer.cpp:1.132 Mon Oct 13 15:32:04 2003 +++ llvm/lib/CWriter/Writer.cpp Wed Oct 15 11:48:26 2003 @@ -88,7 +88,7 @@ static bool isInlinableInst(const Instruction &I) { // Must be an expression, must be used exactly once. If it is dead, we // emit it inline where it would go. - if (I.getType() == Type::VoidTy || I.use_size() != 1 || + if (I.getType() == Type::VoidTy || !I.hasOneUse() || isa(I) || isa(I) || isa(I) || isa(I) || isa(I)) // Don't inline a load across a store or other bad things! From lattner at cs.uiuc.edu Wed Oct 15 11:49:05 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:05 2003 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/InstrSelection/InstrForest.cpp Message-ID: <200310151648.LAA07123@apoc.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/InstrSelection: InstrForest.cpp updated: 1.45 -> 1.46 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/CodeGen/InstrSelection/InstrForest.cpp diff -u llvm/lib/CodeGen/InstrSelection/InstrForest.cpp:1.45 llvm/lib/CodeGen/InstrSelection/InstrForest.cpp:1.46 --- llvm/lib/CodeGen/InstrSelection/InstrForest.cpp:1.45 Wed Sep 17 16:34:23 2003 +++ llvm/lib/CodeGen/InstrSelection/InstrForest.cpp Wed Oct 15 11:48:28 2003 @@ -297,7 +297,7 @@ // is used directly, i.e., made a child of the instruction node. // InstrTreeNode* opTreeNode; - if (isa(operand) && operand->use_size() == 1 && + if (isa(operand) && operand->hasOneUse() && cast(operand)->getParent() == instr->getParent() && instr->getOpcode() != Instruction::PHINode && instr->getOpcode() != Instruction::Call) From lattner at cs.uiuc.edu Wed Oct 15 11:49:09 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:09 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200310151648.LAA07130@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.128 -> 1.129 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.128 llvm/lib/Target/X86/InstSelectSimple.cpp:1.129 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.128 Fri Oct 10 12:47:36 2003 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Wed Oct 15 11:48:28 2003 @@ -554,7 +554,7 @@ // static SetCondInst *canFoldSetCCIntoBranch(Value *V) { if (SetCondInst *SCI = dyn_cast(V)) - if (SCI->use_size() == 1 && isa(SCI->use_back()) && + if (SCI->hasOneUse() && isa(SCI->use_back()) && SCI->getParent() == cast(SCI->use_back())->getParent()) { const Type *Ty = SCI->getOperand(0)->getType(); if (Ty != Type::LongTy && Ty != Type::ULongTy) From lattner at cs.uiuc.edu Wed Oct 15 11:49:12 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:12 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/ExprTypeConvert.cpp Message-ID: <200310151648.LAA07137@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms: ExprTypeConvert.cpp updated: 1.78 -> 1.79 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/Transforms/ExprTypeConvert.cpp diff -u llvm/lib/Transforms/ExprTypeConvert.cpp:1.78 llvm/lib/Transforms/ExprTypeConvert.cpp:1.79 --- llvm/lib/Transforms/ExprTypeConvert.cpp:1.78 Fri Oct 10 12:51:40 2003 +++ llvm/lib/Transforms/ExprTypeConvert.cpp Wed Oct 15 11:48:29 2003 @@ -1271,7 +1271,7 @@ } ValueHandle::~ValueHandle() { - if (Operands[0]->use_size() == 1) { + if (Operands[0]->hasOneUse()) { Value *V = Operands[0]; Operands[0] = 0; // Drop use! From lattner at cs.uiuc.edu Wed Oct 15 11:49:16 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:16 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/IPO/InlineSimple.cpp Message-ID: <200310151648.LAA07144@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/IPO: InlineSimple.cpp updated: 1.53 -> 1.54 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+1 -1) Index: llvm/lib/Transforms/IPO/InlineSimple.cpp diff -u llvm/lib/Transforms/IPO/InlineSimple.cpp:1.53 llvm/lib/Transforms/IPO/InlineSimple.cpp:1.54 --- llvm/lib/Transforms/IPO/InlineSimple.cpp:1.53 Fri Oct 10 12:48:12 2003 +++ llvm/lib/Transforms/IPO/InlineSimple.cpp Wed Oct 15 11:48:29 2003 @@ -49,7 +49,7 @@ // If there is only one call of the function, and it has internal linkage, // make it almost guaranteed to be inlined. // - if (Callee->use_size() == 1 && Callee->hasInternalLinkage()) + if (Callee->hasOneUse() && Callee->hasInternalLinkage()) InlineCost -= 30000; // Add to the inline quality for properties that make the call valuable to From lattner at cs.uiuc.edu Wed Oct 15 11:49:19 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 11:49:19 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp InstructionCombining.cpp Reassociate.cpp Message-ID: <200310151648.LAA07155@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: CorrelatedExprs.cpp updated: 1.15 -> 1.16 InstructionCombining.cpp updated: 1.129 -> 1.130 Reassociate.cpp updated: 1.24 -> 1.25 --- Log message: Decrease usage of use_size() --- Diffs of the changes: (+16 -16) Index: llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp diff -u llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp:1.15 llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp:1.16 --- llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp:1.15 Fri Oct 10 12:50:50 2003 +++ llvm/lib/Transforms/Scalar/CorrelatedExprs.cpp Wed Oct 15 11:48:29 2003 @@ -379,7 +379,7 @@ // Check the common case first: empty block, or block with just a setcc. if (BB->size() == 1 || (BB->size() == 2 && &BB->front() == BI->getCondition() && - BI->getCondition()->use_size() == 1)) + BI->getCondition()->hasOneUse())) return true; // Check the more complex case now... Index: llvm/lib/Transforms/Scalar/InstructionCombining.cpp diff -u llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.129 llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.130 --- llvm/lib/Transforms/Scalar/InstructionCombining.cpp:1.129 Tue Oct 7 17:58:41 2003 +++ llvm/lib/Transforms/Scalar/InstructionCombining.cpp Wed Oct 15 11:48:29 2003 @@ -159,7 +159,7 @@ // isOnlyUse - Return true if this instruction will be deleted if we stop using // it. static bool isOnlyUse(Value *V) { - return V->use_size() == 1 || isa(V); + return V->hasOneUse() || isa(V); } // SimplifyCommutative - This performs a few simplifications for commutative @@ -238,7 +238,7 @@ // non-constant operand of the multiply. // static inline Value *dyn_castFoldableMul(Value *V) { - if (V->use_size() == 1 && V->getType()->isInteger()) + if (V->hasOneUse() && V->getType()->isInteger()) if (Instruction *I = dyn_cast(V)) if (I->getOpcode() == Instruction::Mul) if (isa(I->getOperand(1))) @@ -292,7 +292,7 @@ // Otherwise, if the LHS is not of the same opcode as the root, return. Instruction *LHSI = dyn_cast(LHS); - while (LHSI && LHSI->getOpcode() == Opcode && LHSI->use_size() == 1) { + while (LHSI && LHSI->getOpcode() == Opcode && LHSI->hasOneUse()) { // Should we apply this transform to the RHS? bool ShouldApply = F.shouldApply(LHSI->getOperand(1)); @@ -484,7 +484,7 @@ return BinaryOperator::createNot(Op1); if (BinaryOperator *Op1I = dyn_cast(Op1)) - if (Op1I->use_size() == 1) { + if (Op1I->hasOneUse()) { // Replace (x - (y - z)) with (x + (z - y)) if the (y - z) subexpression // is not used by anyone else... // @@ -749,7 +749,7 @@ if ((*AndRHS & *OpRHS)->isNullValue()) { // (X ^ C1) & C2 --> (X & C2) iff (C1&C2) == 0 return BinaryOperator::create(Instruction::And, X, AndRHS); - } else if (Op->use_size() == 1) { + } else if (Op->hasOneUse()) { // (X ^ C1) & C2 --> (X & C2) ^ (C1&C2) std::string OpName = Op->getName(); Op->setName(""); Instruction *And = BinaryOperator::create(Instruction::And, @@ -767,7 +767,7 @@ if (Together == AndRHS) // (X | C) & C --> C return ReplaceInstUsesWith(TheAnd, AndRHS); - if (Op->use_size() == 1 && Together != OpRHS) { + if (Op->hasOneUse() && Together != OpRHS) { // (X | C1) & C2 --> (X | (C1&C2)) & C2 std::string Op0Name = Op->getName(); Op->setName(""); Instruction *Or = BinaryOperator::create(Instruction::Or, X, @@ -778,7 +778,7 @@ } break; case Instruction::Add: - if (Op->use_size() == 1) { + if (Op->hasOneUse()) { // Adding a one to a single bit bit-field should be turned into an XOR // of the bit. First thing to check is to see if this AND is with a // single bit constant. @@ -987,7 +987,7 @@ if (BinaryOperator *Op0I = dyn_cast(Op0)) { // xor (setcc A, B), true = not (setcc A, B) = setncc A, B if (SetCondInst *SCI = dyn_cast(Op0I)) - if (RHS == ConstantBool::True && SCI->use_size() == 1) + if (RHS == ConstantBool::True && SCI->hasOneUse()) return new SetCondInst(SCI->getInverseCondition(), SCI->getOperand(0), SCI->getOperand(1)); @@ -1026,7 +1026,7 @@ } if (Instruction *Op0I = dyn_cast(Op0)) - if (Op0I->getOpcode() == Instruction::Or && Op0I->use_size() == 1) { + if (Op0I->getOpcode() == Instruction::Or && Op0I->hasOneUse()) { if (Op0I->getOperand(0) == Op1) // (B|A)^B == (A|B)^B cast(Op0I)->swapOperands(); if (Op0I->getOperand(1) == Op1) { // (A|B)^B == A & ~B @@ -1144,7 +1144,7 @@ return new SetCondInst(I.getOpcode(), BOp0, NegVal); else if (Value *NegVal = dyn_castNegVal(BOp0)) return new SetCondInst(I.getOpcode(), NegVal, BOp1); - else if (BO->use_size() == 1) { + else if (BO->hasOneUse()) { Instruction *Neg = BinaryOperator::createNeg(BOp1, BO->getName()); BO->setName(""); InsertNewInstBefore(Neg, I); @@ -1291,7 +1291,7 @@ // If the operand is an bitwise operator with a constant RHS, and the // shift is the only use, we can pull it out of the shift. - if (Op0->use_size() == 1) + if (Op0->hasOneUse()) if (BinaryOperator *Op0BO = dyn_cast(Op0)) if (ConstantInt *Op0C = dyn_cast(Op0BO->getOperand(1))) { bool isValid = true; // Valid only for And, Or, Xor @@ -1533,7 +1533,7 @@ // propagate the cast into the instruction. Also, only handle integral types // for now. if (Instruction *SrcI = dyn_cast(Src)) - if (SrcI->use_size() == 1 && Src->getType()->isIntegral() && + if (SrcI->hasOneUse() && Src->getType()->isIntegral() && CI.getType()->isInteger()) { // Don't mess with casts to bool here const Type *DestTy = CI.getType(); unsigned SrcBitSize = getTypeSizeInBits(Src->getType()); Index: llvm/lib/Transforms/Scalar/Reassociate.cpp diff -u llvm/lib/Transforms/Scalar/Reassociate.cpp:1.24 llvm/lib/Transforms/Scalar/Reassociate.cpp:1.25 --- llvm/lib/Transforms/Scalar/Reassociate.cpp:1.24 Mon Sep 22 16:57:56 2003 +++ llvm/lib/Transforms/Scalar/Reassociate.cpp Wed Oct 15 11:48:29 2003 @@ -126,7 +126,7 @@ // only expression using it... // if (BinaryOperator *LHSI = dyn_cast(LHS)) - if (LHSI->getOpcode() == I->getOpcode() && LHSI->use_size() == 1) { + if (LHSI->getOpcode() == I->getOpcode() && LHSI->hasOneUse()) { // If the rank of our current RHS is less than the rank of the LHS's LHS, // then we reassociate the two instructions... @@ -177,7 +177,7 @@ // we introduce tons of unnecessary negation instructions... // if (Instruction *I = dyn_cast(V)) - if (I->getOpcode() == Instruction::Add && I->use_size() == 1) { + if (I->getOpcode() == Instruction::Add && I->hasOneUse()) { Value *RHS = NegateValue(I->getOperand(1), BI); Value *LHS = NegateValue(I->getOperand(0), BI); @@ -242,7 +242,7 @@ Instruction *RHSI = dyn_cast(I->getOperand(1)); if (LHSI && (int)LHSI->getOpcode() == I->getOpcode() && RHSI && (int)RHSI->getOpcode() == I->getOpcode() && - RHSI->use_size() == 1) { + RHSI->hasOneUse()) { // Insert a new temporary instruction... (A+B)+C BinaryOperator *Tmp = BinaryOperator::create(I->getOpcode(), LHSI, RHSI->getOperand(0), From criswell at cs.uiuc.edu Wed Oct 15 11:54:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 11:54:02 2003 Subject: [llvm-commits] CVS: llvm/docs/Projects.html Message-ID: <200310151653.LAA04878@choi.cs.uiuc.edu> Changes in directory llvm/docs: Projects.html updated: 1.1 -> 1.2 --- Log message: Updated some of the information for the new autoconf changes. --- Diffs of the changes: (+5 -20) Index: llvm/docs/Projects.html diff -u llvm/docs/Projects.html:1.1 llvm/docs/Projects.html:1.2 --- llvm/docs/Projects.html:1.1 Thu Jul 3 10:37:52 2003 +++ llvm/docs/Projects.html Wed Oct 15 11:52:57 2003 @@ -31,15 +31,14 @@

For example, if the LLVM source tree is in - /usr/home/joe/src/llvm, and you configured it with - --with-objroot=/tmp when his home directory is - /usr/home/joe, then + /usr/home/joe/src/llvm, and you built LLVM in + /tmp/llvmobj, then LLVM_SRC_ROOT=/usr/home/joe/src/llvm and - LLVM_OBJ_ROOT=/tmp/src/llvm. + LLVM_OBJ_ROOT=/tmp/llvmobj.

  • - Add your source code to the source tree. + Add your source code to your source tree.

  • @@ -73,7 +72,7 @@ Libraries can be object files, archives, or dynamic libraries. The lib directory is just a good place for these as it places them all in a directory from which they can be linked - later on. + later.
    include
    @@ -203,19 +202,5 @@

    - -

    Caveats

    - - - Some caveats and known issues: -
      -
    1. - The projects system currently uses the $HOME environment - variable in determining where object files should go. If $HOME - is not set, then your path relative to the root directory may - be used to determine where your object files go. It is - therefore advised that your source directory reside underneath - your home directory. -
    From gaeke at cs.uiuc.edu Wed Oct 15 12:37:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Oct 15 12:37:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c Message-ID: <200310151736.MAA17318@apoc.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Shootout: heapsort.c updated: 1.1 -> 1.2 --- Log message: BSD has a standard C library function called heapsort... dumb, but at least there's an easy workaround. --- Diffs of the changes: (+2 -1) Index: llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c diff -u llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c:1.1 llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c:1.2 --- llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c:1.1 Fri Dec 14 10:57:14 2001 +++ llvm/test/Programs/SingleSource/Benchmarks/Shootout/heapsort.c Wed Oct 15 12:36:36 2003 @@ -1,11 +1,12 @@ /* -*- mode: c -*- - * $Id: heapsort.c,v 1.1 2001/12/14 16:57:14 lattner Exp $ + * $Id: heapsort.c,v 1.2 2003/10/15 17:36:36 gaeke Exp $ * http://www.bagley.org/~doug/shootout/ */ #include #include #include +#define heapsort benchmark_heapsort #define IM 139968 #define IA 3877 From criswell at cs.uiuc.edu Wed Oct 15 14:12:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:01 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/expectations.qmr Message-ID: <200310151911.OAA05387@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB: expectations.qmr (r1.4) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:10 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:10 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/QMTest/configuration llvm.py Message-ID: <200310151911.OAA05398@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/QMTest: configuration (r1.1) removed llvm.py (r1.12) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:15 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:15 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/bc.qms/feature.qms/basictest.qma calltest.qma casttest.qma cfgstructures.qma constexpr.qma constexprbad.qma constpointer.qma forwardreftest.qma globalvars.qma indirectcall.qma indirectcall2.qma properties.qma prototype.qma recursivetype.qma simplecalltest.qma small.qma smallest.qma testalloca.qma testconstants.qma testlogical.qma testmemory.qma testswitch.qma testvarargs.qma varargs.qma weirdnames.qma Message-ID: <200310151911.OAA05406@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/bc.qms/feature.qms: basictest.qma (r1.1) removed calltest.qma (r1.1) removed casttest.qma (r1.1) removed cfgstructures.qma (r1.1) removed constexpr.qma (r1.1) removed constexprbad.qma (r1.1) removed constpointer.qma (r1.1) removed forwardreftest.qma (r1.1) removed globalvars.qma (r1.1) removed indirectcall.qma (r1.1) removed indirectcall2.qma (r1.1) removed properties.qma (r1.1) removed prototype.qma (r1.1) removed recursivetype.qma (r1.1) removed simplecalltest.qma (r1.1) removed small.qma (r1.1) removed smallest.qma (r1.1) removed testalloca.qma (r1.1) removed testconstants.qma (r1.1) removed testlogical.qma (r1.1) removed testmemory.qma (r1.1) removed testswitch.qma (r1.1) removed testvarargs.qma (r1.1) removed varargs.qma (r1.1) removed weirdnames.qma (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:22 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:22 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/bc.qms/regression.qms/jello.qms/2002-12-16-argtest.qma 2003-01-04-argumentbug.qma 2003-01-04-looptest.qma 2003-01-09-sartest.qma 2003-01-10-fucom.qma 2003-01-15-alignmenttest.qma 2003-05-11-phiregallocbug.qma 2003-06-04-bzip2-bug.qma 2003-06-05-phibug.qma 2003-08-15-allocaassertion.qma 2003-08-21-environmenttest.qma 2003-08-23-deadblocktest.qma 2003-08-23-registerallocatephysreg.qma hello.qma hello2.qma simplesttest.qma simpletest.qma test-arith.qma test-branch.qma test-call.qma test-cast.qma test-constantexpr.qma test-fp.qma test-loadstore.qma test-logical.qma test-loop.qma test-malloc.qma test-phi.qma test-ret.qma test-setcond-fp.qma test-setcond-int.qma test-shift.qma Message-ID: <200310151911.OAA05414@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/bc.qms/regression.qms/jello.qms: 2002-12-16-argtest.qma (r1.2) removed 2003-01-04-argumentbug.qma (r1.1) removed 2003-01-04-looptest.qma (r1.1) removed 2003-01-09-sartest.qma (r1.1) removed 2003-01-10-fucom.qma (r1.1) removed 2003-01-15-alignmenttest.qma (r1.1) removed 2003-05-11-phiregallocbug.qma (r1.1) removed 2003-06-04-bzip2-bug.qma (r1.1) removed 2003-06-05-phibug.qma (r1.1) removed 2003-08-15-allocaassertion.qma (r1.1) removed 2003-08-21-environmenttest.qma (r1.1) removed 2003-08-23-deadblocktest.qma (r1.1) removed 2003-08-23-registerallocatephysreg.qma (r1.1) removed hello.qma (r1.1) removed hello2.qma (r1.1) removed simplesttest.qma (r1.1) removed simpletest.qma (r1.1) removed test-arith.qma (r1.1) removed test-branch.qma (r1.1) removed test-call.qma (r1.1) removed test-cast.qma (r1.1) removed test-constantexpr.qma (r1.1) removed test-fp.qma (r1.1) removed test-loadstore.qma (r1.1) removed test-logical.qma (r1.1) removed test-loop.qma (r1.1) removed test-malloc.qma (r1.1) removed test-phi.qma (r1.1) removed test-ret.qma (r1.1) removed test-setcond-fp.qma (r1.1) removed test-setcond-int.qma (r1.1) removed test-shift.qma (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:32 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:32 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/bc.qms/regression.qms/llc.qms/2002-04-14-unexpectedunsignedtype.qma 2002-04-16-stackframesizealignment.qma 2003-05-27-phifcmpd.qma 2003-05-27-useboolinotherbb.qma 2003-05-27-usefsubasbool.qma 2003-05-28-manyargs.qma 2003-05-30-badfoldgep.qma 2003-05-30-badpreselectphi.qma 2003-07-06-badintcmp.qma 2003-07-07-badlongconst.qma 2003-07-08-badcasttobool.qma 2003-07-29-badconstsbyte.qma badarg6.qma badcallarglr.qma badfoldgep.qma badlive.qma constindices.qma fwdtwice.qma negintconst.qma sched.qma select.qma spillccr.qma yyparse.qma Message-ID: <200310151911.OAA05422@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/bc.qms/regression.qms/llc.qms: 2002-04-14-unexpectedunsignedtype.qma (r1.1) removed 2002-04-16-stackframesizealignment.qma (r1.1) removed 2003-05-27-phifcmpd.qma (r1.1) removed 2003-05-27-useboolinotherbb.qma (r1.1) removed 2003-05-27-usefsubasbool.qma (r1.1) removed 2003-05-28-manyargs.qma (r1.1) removed 2003-05-30-badfoldgep.qma (r1.1) removed 2003-05-30-badpreselectphi.qma (r1.1) removed 2003-07-06-badintcmp.qma (r1.1) removed 2003-07-07-badlongconst.qma (r1.1) removed 2003-07-08-badcasttobool.qma (r1.1) removed 2003-07-29-badconstsbyte.qma (r1.1) removed badarg6.qma (r1.1) removed badcallarglr.qma (r1.1) removed badfoldgep.qma (r1.1) removed badlive.qma (r1.1) removed constindices.qma (r1.1) removed fwdtwice.qma (r1.1) removed negintconst.qma (r1.1) removed sched.qma (r1.1) removed select.qma (r1.1) removed spillccr.qma (r1.1) removed yyparse.qma (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:38 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:38 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/feature.qms/asm.qms/basictest.qmt calltest.qmt casttest.qmt cfgstructures.qmt constexpr.qmt constexprbad.qmt constpointer.qmt forwardreftest.qmt globalvars.qmt indirectcall.qmt indirectcall2.qmt properties.qmt prototype.qmt recursivetype.qmt simplecalltest.qmt small.qmt smallest.qmt testalloca.qmt testconstants.qmt testlogical.qmt testmemory.qmt testswitch.qmt testvarargs.qmt varargs.qmt weirdnames.qmt Message-ID: <200310151911.OAA05430@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/feature.qms/asm.qms: basictest.qmt (r1.1) removed calltest.qmt (r1.1) removed casttest.qmt (r1.1) removed cfgstructures.qmt (r1.1) removed constexpr.qmt (r1.1) removed constexprbad.qmt (r1.1) removed constpointer.qmt (r1.1) removed forwardreftest.qmt (r1.1) removed globalvars.qmt (r1.1) removed indirectcall.qmt (r1.1) removed indirectcall2.qmt (r1.1) removed properties.qmt (r1.1) removed prototype.qmt (r1.1) removed recursivetype.qmt (r1.1) removed simplecalltest.qmt (r1.1) removed small.qmt (r1.1) removed smallest.qmt (r1.1) removed testalloca.qmt (r1.1) removed testconstants.qmt (r1.1) removed testlogical.qmt (r1.1) removed testmemory.qmt (r1.1) removed testswitch.qmt (r1.1) removed testvarargs.qmt (r1.1) removed varargs.qmt (r1.1) removed weirdnames.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:45 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:45 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/feature.qms/asmdis.qms/basictest.qmt calltest.qmt casttest.qmt cfgstructures.qmt constexpr.qmt constexprbad.qmt constpointer.qmt forwardreftest.qmt globalvars.qmt indirectcall.qmt indirectcall2.qmt properties.qmt prototype.qmt recursivetype.qmt simplecalltest.qmt small.qmt smallest.qmt testalloca.qmt testconstants.qmt testlogical.qmt testmemory.qmt testswitch.qmt testvarargs.qmt varargs.qmt weirdnames.qmt Message-ID: <200310151911.OAA05444@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/feature.qms/asmdis.qms: basictest.qmt (r1.1) removed calltest.qmt (r1.1) removed casttest.qmt (r1.1) removed cfgstructures.qmt (r1.1) removed constexpr.qmt (r1.1) removed constexprbad.qmt (r1.1) removed constpointer.qmt (r1.1) removed forwardreftest.qmt (r1.1) removed globalvars.qmt (r1.1) removed indirectcall.qmt (r1.1) removed indirectcall2.qmt (r1.1) removed properties.qmt (r1.1) removed prototype.qmt (r1.1) removed recursivetype.qmt (r1.1) removed simplecalltest.qmt (r1.1) removed small.qmt (r1.1) removed smallest.qmt (r1.1) removed testalloca.qmt (r1.1) removed testconstants.qmt (r1.1) removed testlogical.qmt (r1.1) removed testmemory.qmt (r1.1) removed testswitch.qmt (r1.1) removed testvarargs.qmt (r1.1) removed varargs.qmt (r1.1) removed weirdnames.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:50 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:50 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/feature.qms/c-code.qms/basictest.qmt calltest.qmt casttest.qmt cfgstructures.qmt constexpr.qmt constexprbad.qmt constpointer.qmt forwardreftest.qmt globalvars.qmt indirectcall.qmt indirectcall2.qmt properties.qmt prototype.qmt recursivetype.qmt simplecalltest.qmt small.qmt smallest.qmt testalloca.qmt testconstants.qmt testlogical.qmt testmemory.qmt testswitch.qmt testvarargs.qmt varargs.qmt weirdnames.qmt Message-ID: <200310151911.OAA05452@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/feature.qms/c-code.qms: basictest.qmt (r1.1) removed calltest.qmt (r1.1) removed casttest.qmt (r1.1) removed cfgstructures.qmt (r1.1) removed constexpr.qmt (r1.1) removed constexprbad.qmt (r1.1) removed constpointer.qmt (r1.1) removed forwardreftest.qmt (r1.1) removed globalvars.qmt (r1.1) removed indirectcall.qmt (r1.1) removed indirectcall2.qmt (r1.1) removed properties.qmt (r1.1) removed prototype.qmt (r1.1) removed recursivetype.qmt (r1.1) removed simplecalltest.qmt (r1.1) removed small.qmt (r1.1) removed smallest.qmt (r1.1) removed testalloca.qmt (r1.1) removed testconstants.qmt (r1.1) removed testlogical.qmt (r1.1) removed testmemory.qmt (r1.1) removed testswitch.qmt (r1.1) removed testvarargs.qmt (r1.1) removed varargs.qmt (r1.1) removed weirdnames.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:12:56 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:12:56 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/feature.qms/mc-code.qms/basictest.qmt calltest.qmt casttest.qmt cfgstructures.qmt constexpr.qmt constexprbad.qmt constpointer.qmt forwardreftest.qmt globalvars.qmt indirectcall.qmt indirectcall2.qmt properties.qmt prototype.qmt recursivetype.qmt simplecalltest.qmt small.qmt smallest.qmt testalloca.qmt testconstants.qmt testlogical.qmt testmemory.qmt testswitch.qmt testvarargs.qmt varargs.qmt weirdnames.qmt Message-ID: <200310151911.OAA05460@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/feature.qms/mc-code.qms: basictest.qmt (r1.1) removed calltest.qmt (r1.1) removed casttest.qmt (r1.1) removed cfgstructures.qmt (r1.1) removed constexpr.qmt (r1.1) removed constexprbad.qmt (r1.1) removed constpointer.qmt (r1.1) removed forwardreftest.qmt (r1.1) removed globalvars.qmt (r1.1) removed indirectcall.qmt (r1.1) removed indirectcall2.qmt (r1.1) removed properties.qmt (r1.1) removed prototype.qmt (r1.1) removed recursivetype.qmt (r1.1) removed simplecalltest.qmt (r1.1) removed small.qmt (r1.1) removed smallest.qmt (r1.1) removed testalloca.qmt (r1.1) removed testconstants.qmt (r1.1) removed testlogical.qmt (r1.1) removed testmemory.qmt (r1.1) removed testswitch.qmt (r1.1) removed testvarargs.qmt (r1.1) removed varargs.qmt (r1.1) removed weirdnames.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:13:00 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:13:00 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/feature.qms/opt.qms/basictest.qmt calltest.qmt casttest.qmt cfgstructures.qmt constexpr.qmt constexprbad.qmt constpointer.qmt forwardreftest.qmt globalvars.qmt indirectcall.qmt indirectcall2.qmt properties.qmt prototype.qmt recursivetype.qmt simplecalltest.qmt small.qmt smallest.qmt testalloca.qmt testconstants.qmt testlogical.qmt testmemory.qmt testswitch.qmt testvarargs.qmt varargs.qmt weirdnames.qmt Message-ID: <200310151911.OAA05468@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/feature.qms/opt.qms: basictest.qmt (r1.1) removed calltest.qmt (r1.1) removed casttest.qmt (r1.1) removed cfgstructures.qmt (r1.1) removed constexpr.qmt (r1.1) removed constexprbad.qmt (r1.1) removed constpointer.qmt (r1.1) removed forwardreftest.qmt (r1.1) removed globalvars.qmt (r1.1) removed indirectcall.qmt (r1.1) removed indirectcall2.qmt (r1.1) removed properties.qmt (r1.1) removed prototype.qmt (r1.1) removed recursivetype.qmt (r1.1) removed simplecalltest.qmt (r1.1) removed small.qmt (r1.1) removed smallest.qmt (r1.1) removed testalloca.qmt (r1.1) removed testconstants.qmt (r1.1) removed testlogical.qmt (r1.1) removed testmemory.qmt (r1.1) removed testswitch.qmt (r1.1) removed testvarargs.qmt (r1.1) removed varargs.qmt (r1.1) removed weirdnames.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:13:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:13:04 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/analysis.qms/dominators.qms/2003-05-12-unreachablecode.qmt Message-ID: <200310151911.OAA05476@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/analysis.qms/dominators.qms: 2003-05-12-unreachablecode.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:13:09 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:13:09 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/analysis.qms/dsgraph.qms/2003-06-29-incompletetdpass.qmt 2003-06-29-nodecollapsing.qmt 2003-06-29-nodecollapsing2.qmt 2003-06-30-topdownresolve.qmt 2003-07-01-fieldcollapse.qmt 2003-07-16-constantexprcollapse.qmt buglobals.qmt constantize.qmt gcsetest.qmt globalsgraphfuncptr.qmt hardbucase.qmt incompletenode.qmt mustalias.qmt physicalsubtyping.qmt sccsimpleexample.qmt Message-ID: <200310151911.OAA05481@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/analysis.qms/dsgraph.qms: 2003-06-29-incompletetdpass.qmt (r1.1) removed 2003-06-29-nodecollapsing.qmt (r1.1) removed 2003-06-29-nodecollapsing2.qmt (r1.1) removed 2003-06-30-topdownresolve.qmt (r1.1) removed 2003-07-01-fieldcollapse.qmt (r1.1) removed 2003-07-16-constantexprcollapse.qmt (r1.1) removed buglobals.qmt (r1.1) removed constantize.qmt (r1.1) removed gcsetest.qmt (r1.1) removed globalsgraphfuncptr.qmt (r1.1) removed hardbucase.qmt (r1.1) removed incompletenode.qmt (r1.1) removed mustalias.qmt (r1.1) removed physicalsubtyping.qmt (r1.1) removed sccsimpleexample.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:13:14 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:13:14 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/analysis.qms/loopinfo.qms/2003-05-15-nestingproblem.qmt Message-ID: <200310151911.OAA05486@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/analysis.qms/loopinfo.qms: 2003-05-15-nestingproblem.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:01 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/assembler.qms/2002-01-24-badsymboltableassert.qmt 2002-01-24-valuerefineabstype.qmt 2002-02-19-typeparsing.qmt 2002-03-08-namecollision.qmt 2002-03-08-namecollision2.qmt 2002-04-04-purevirtmethcall.qmt 2002-04-04-purevirtmethcall2.qmt 2002-04-05-typeparsing.qmt 2002-04-07-hexfloatconstants.qmt 2002-04-07-infconstant.qmt 2002-04-29-namebinding.qmt 2002-05-02-invalidforwardref.qmt 2002-05-02-parseerror.qmt 2002-07-08-hugeperformanceproblem.qmt 2002-07-14-internallossage.qmt 2002-07-14-opaquetype.qmt 2002-07-25-parserassertionfailure.qmt 2002-07-25-quoteinstring.qmt 2002-07-25-returnptrfunction.qmt 2002-07-31-slashinstring.qmt 2002-08-15-castambiguity.qmt 2002-08-15-constantexprproblem.qmt 2002-08-15-unresolvedglobalreference.qmt 2002-08-16-constexprinlined.qmt 2002-08-19-bytecodereader.qmt 2002-08-22-dominanceproblem.qmt 2002-10-08-largearrayperformance.qmt 2002-10-13-constantencodingproblem.qmt 2002-10-15-nameclash.qmt 2002-12-! 15-globalresolve.qmt 2003-01-30-unsignedstring.qmt 2003-02-02-constglobal.qmt 2003-03-03-duplicateconstant.qmt 2003-04-15-constantinitassertion.qmt 2003-04-25-unresolvedglobalreference.qmt 2003-05-03-bytecodereaderproblem.qmt 2003-05-12-minintproblem.qmt 2003-05-15-assemblerproblem.qmt 2003-05-15-switchbug.qmt 2003-05-21-constantshiftexpr.qmt 2003-05-21-emptystructtest.qmt 2003-05-21-malformedshiftcrash.qmt 2003-05-21-malformedstructcrash.qmt 2003-06-17-invokedisassemble.qmt 2003-06-30-recursivetypeproblem.qmt constantexprfoldcast.qmt Message-ID: <200310151912.OAA05497@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/assembler.qms: 2002-01-24-badsymboltableassert.qmt (r1.1) removed 2002-01-24-valuerefineabstype.qmt (r1.1) removed 2002-02-19-typeparsing.qmt (r1.1) removed 2002-03-08-namecollision.qmt (r1.1) removed 2002-03-08-namecollision2.qmt (r1.1) removed 2002-04-04-purevirtmethcall.qmt (r1.1) removed 2002-04-04-purevirtmethcall2.qmt (r1.1) removed 2002-04-05-typeparsing.qmt (r1.1) removed 2002-04-07-hexfloatconstants.qmt (r1.1) removed 2002-04-07-infconstant.qmt (r1.1) removed 2002-04-29-namebinding.qmt (r1.1) removed 2002-05-02-invalidforwardref.qmt (r1.1) removed 2002-05-02-parseerror.qmt (r1.1) removed 2002-07-08-hugeperformanceproblem.qmt (r1.1) removed 2002-07-14-internallossage.qmt (r1.1) removed 2002-07-14-opaquetype.qmt (r1.1) removed 2002-07-25-parserassertionfailure.qmt (r1.1) removed 2002-07-25-quoteinstring.qmt (r1.1) removed 2002-07-25-returnptrfunction.qmt (r1.1) removed 2002-07-31-slashinstring.qmt (r1.1) removed 2002-08-15-castambiguity.qmt (r1.1) removed 2002-08-15-constantexprproblem.qmt (r1.1) removed 2002-08-15-unresolvedglobalreference.qmt (r1.1) removed 2002-08-16-constexprinlined.qmt (r1.1) removed 2002-08-19-bytecodereader.qmt (r1.1) removed 2002-08-22-dominanceproblem.qmt (r1.1) removed 2002-10-08-largearrayperformance.qmt (r1.1) removed 2002-10-13-constantencodingproblem.qmt (r1.1) removed 2002-10-15-nameclash.qmt (r1.1) removed 2002-12-15-globalresolve.qmt (r1.1) removed 2003-01-30-unsignedstring.qmt (r1.1) removed 2003-02-02-constglobal.qmt (r1.1) removed 2003-03-03-duplicateconstant.qmt (r1.1) removed 2003-04-15-constantinitassertion.qmt (r1.1) removed 2003-04-25-unresolvedglobalreference.qmt (r1.1) removed 2003-05-03-bytecodereaderproblem.qmt (r1.1) removed 2003-05-12-minintproblem.qmt (r1.1) removed 2003-05-15-assemblerproblem.qmt (r1.1) removed 2003-05-15-switchbug.qmt (r1.1) removed 2003-05-21-constantshiftexpr.qmt (r1.1) removed 2003-05-21-emptystructtest.qmt (r1.1) removed 2003-05-21-malformedshiftcrash.qmt (r1.1) removed 2003-05-21-malformedstructcrash.qmt (r1.1) removed 2003-06-17-invokedisassemble.qmt (r1.1) removed 2003-06-30-recursivetypeproblem.qmt (r1.1) removed constantexprfoldcast.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:05 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:05 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/bugpoint.qms/crash-basictest.qmt crash-narrowfunctiontest.qmt misopt-basictest.qmt remove_arguments_test.qmt Message-ID: <200310151912.OAA05502@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/bugpoint.qms: crash-basictest.qmt (r1.1) removed crash-narrowfunctiontest.qmt (r1.1) removed misopt-basictest.qmt (r1.1) removed remove_arguments_test.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:09 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:09 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/cfrontend.qms/2002-01-23-loadqisireloadfailure.qmt 2002-01-24-complexspaceintype.qmt 2002-01-24-handlecallinsnsegv.qmt 2002-02-13-conditionalincall.qmt 2002-02-13-reloadproblem.qmt 2002-02-13-typevarnamecollision.qmt 2002-02-13-unnamedlocal.qmt 2002-02-14-entrynodepreds.qmt 2002-02-16-renamingtest.qmt 2002-02-17-argumentaddress.qmt 2002-02-18-64bitconstant.qmt 2002-02-18-staticdata.qmt 2002-03-11-largecharinstring.qmt 2002-03-12-arrayinitialization.qmt 2002-03-12-structinitialize.qmt 2002-03-12-structinitializer.qmt 2002-03-14-brokenphinode.qmt 2002-03-14-brokenssa.qmt 2002-03-14-quotesinstrconst.qmt 2002-04-07-switchstmt.qmt 2002-04-08-localarray.qmt 2002-04-09-structretval.qmt 2002-04-10-structparameters.qmt 2002-05-23-staticvalues.qmt 2002-05-23-typenamecollision.qmt 2002-05-24-alloca.qmt 2002-06-25-fwriteinterfacefailure.qmt 2002-07-14-misclisttests.qmt 2002-07-14-misctests.qmt 2002-07-14-misctests2.qmt 2002-07-14-misctest! s3.qmt 2002-07-16-hardstringinit.qmt 2002-07-17-stringconstant.qmt 2002-07-29-casts.qmt 2002-07-30-subregsetassertion.qmt 2002-07-30-uniontest.qmt 2002-07-30-varargscallfailure.qmt 2002-07-31-badassert.qmt 2002-07-31-subregfailure.qmt 2002-08-02-uniontest.qmt 2002-08-19-recursivelocals.qmt 2002-09-08-pointershifts.qmt 2002-09-18-unionproblem.qmt 2002-09-19-starinlabel.qmt 2002-10-12-toomanyarguments.qmt 2002-11-07-redefinition.qmt 2002-12-15-globalbooltest.qmt 2002-12-15-globalconstanttest.qmt 2002-12-15-globalredefinition.qmt 2002-12-15-structparameters.qmt 2003-01-30-unioninit.qmt 2003-02-12-nonlocalgoto.qmt 2003-03-03-deferredtype.qmt 2003-06-22-unioncrash.qmt 2003-06-23-gcc-fold-infinite-recursion.qmt 2003-06-26-cfecrash.qmt 2003-06-29-multiplefunctiondefinition.qmt 2003-07-22-arrayaccesstypesafety.qmt 2003-08-06-builtinsetjmplongjmp.qmt 2003-08-17-deadcodeshortcircuit.qmt 2003-08-18-sigsetjmp.qmt 2003-08-18-structasvalue.qmt Message-ID: <200310151912.OAA05527@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/cfrontend.qms: 2002-01-23-loadqisireloadfailure.qmt (r1.1) removed 2002-01-24-complexspaceintype.qmt (r1.1) removed 2002-01-24-handlecallinsnsegv.qmt (r1.1) removed 2002-02-13-conditionalincall.qmt (r1.1) removed 2002-02-13-reloadproblem.qmt (r1.1) removed 2002-02-13-typevarnamecollision.qmt (r1.1) removed 2002-02-13-unnamedlocal.qmt (r1.1) removed 2002-02-14-entrynodepreds.qmt (r1.1) removed 2002-02-16-renamingtest.qmt (r1.1) removed 2002-02-17-argumentaddress.qmt (r1.1) removed 2002-02-18-64bitconstant.qmt (r1.1) removed 2002-02-18-staticdata.qmt (r1.1) removed 2002-03-11-largecharinstring.qmt (r1.1) removed 2002-03-12-arrayinitialization.qmt (r1.1) removed 2002-03-12-structinitialize.qmt (r1.1) removed 2002-03-12-structinitializer.qmt (r1.1) removed 2002-03-14-brokenphinode.qmt (r1.1) removed 2002-03-14-brokenssa.qmt (r1.1) removed 2002-03-14-quotesinstrconst.qmt (r1.1) removed 2002-04-07-switchstmt.qmt (r1.1) removed 2002-04-08-localarray.qmt (r1.1) removed 2002-04-09-structretval.qmt (r1.1) removed 2002-04-10-structparameters.qmt (r1.1) removed 2002-05-23-staticvalues.qmt (r1.1) removed 2002-05-23-typenamecollision.qmt (r1.1) removed 2002-05-24-alloca.qmt (r1.1) removed 2002-06-25-fwriteinterfacefailure.qmt (r1.1) removed 2002-07-14-misclisttests.qmt (r1.1) removed 2002-07-14-misctests.qmt (r1.1) removed 2002-07-14-misctests2.qmt (r1.1) removed 2002-07-14-misctests3.qmt (r1.1) removed 2002-07-16-hardstringinit.qmt (r1.1) removed 2002-07-17-stringconstant.qmt (r1.1) removed 2002-07-29-casts.qmt (r1.1) removed 2002-07-30-subregsetassertion.qmt (r1.1) removed 2002-07-30-uniontest.qmt (r1.1) removed 2002-07-30-varargscallfailure.qmt (r1.1) removed 2002-07-31-badassert.qmt (r1.1) removed 2002-07-31-subregfailure.qmt (r1.1) removed 2002-08-02-uniontest.qmt (r1.1) removed 2002-08-19-recursivelocals.qmt (r1.1) removed 2002-09-08-pointershifts.qmt (r1.1) removed 2002-09-18-unionproblem.qmt (r1.1) removed 2002-09-19-starinlabel.qmt (r1.1) removed 2002-10-12-toomanyarguments.qmt (r1.1) removed 2002-11-07-redefinition.qmt (r1.1) removed 2002-12-15-globalbooltest.qmt (r1.1) removed 2002-12-15-globalconstanttest.qmt (r1.1) removed 2002-12-15-globalredefinition.qmt (r1.1) removed 2002-12-15-structparameters.qmt (r1.1) removed 2003-01-30-unioninit.qmt (r1.1) removed 2003-02-12-nonlocalgoto.qmt (r1.1) removed 2003-03-03-deferredtype.qmt (r1.1) removed 2003-06-22-unioncrash.qmt (r1.1) removed 2003-06-23-gcc-fold-infinite-recursion.qmt (r1.1) removed 2003-06-26-cfecrash.qmt (r1.1) removed 2003-06-29-multiplefunctiondefinition.qmt (r1.1) removed 2003-07-22-arrayaccesstypesafety.qmt (r1.1) removed 2003-08-06-builtinsetjmplongjmp.qmt (r1.1) removed 2003-08-17-deadcodeshortcircuit.qmt (r1.1) removed 2003-08-18-sigsetjmp.qmt (r1.1) removed 2003-08-18-structasvalue.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:13 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:13 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/cbackend.qms/2002-05-16-namecollide.qmt 2002-05-21-missingreturn.qmt 2002-08-19-constantexpr.qmt 2002-08-19-constpointerref.qmt 2002-08-19-datapointer.qmt 2002-08-19-functionpointer.qmt 2002-08-19-hardconstantexpr.qmt 2002-08-20-recursivetypes.qmt 2002-08-20-unnamedargument.qmt 2002-08-26-indirectcalltest.qmt 2002-08-30-structureorderingtest.qmt 2002-09-20-arraytypefailure.qmt 2002-09-20-varargprototypes.qmt 2002-10-15-opaquetypeproblem.qmt 2002-10-16-external.qmt 2002-10-30-functionpointeralloca.qmt 2002-11-06-printescaped.qmt 2003-05-12-integersizewarning.qmt 2003-05-13-varargfunction.qmt 2003-05-31-missingstructname.qmt 2003-06-01-nullpointertype.qmt 2003-06-11-hexconstant.qmt 2003-06-11-literalstringproblem.qmt 2003-06-23-promotedexprs.qmt 2003-06-28-invokesupport.qmt 2003-06-28-linkonceglobalvars.qmt Message-ID: <200310151912.OAA05510@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/cbackend.qms: 2002-05-16-namecollide.qmt (r1.1) removed 2002-05-21-missingreturn.qmt (r1.1) removed 2002-08-19-constantexpr.qmt (r1.1) removed 2002-08-19-constpointerref.qmt (r1.1) removed 2002-08-19-datapointer.qmt (r1.1) removed 2002-08-19-functionpointer.qmt (r1.1) removed 2002-08-19-hardconstantexpr.qmt (r1.1) removed 2002-08-20-recursivetypes.qmt (r1.1) removed 2002-08-20-unnamedargument.qmt (r1.1) removed 2002-08-26-indirectcalltest.qmt (r1.1) removed 2002-08-30-structureorderingtest.qmt (r1.1) removed 2002-09-20-arraytypefailure.qmt (r1.1) removed 2002-09-20-varargprototypes.qmt (r1.1) removed 2002-10-15-opaquetypeproblem.qmt (r1.1) removed 2002-10-16-external.qmt (r1.1) removed 2002-10-30-functionpointeralloca.qmt (r1.1) removed 2002-11-06-printescaped.qmt (r1.1) removed 2003-05-12-integersizewarning.qmt (r1.1) removed 2003-05-13-varargfunction.qmt (r1.1) removed 2003-05-31-missingstructname.qmt (r1.1) removed 2003-06-01-nullpointertype.qmt (r1.1) removed 2003-06-11-hexconstant.qmt (r1.1) removed 2003-06-11-literalstringproblem.qmt (r1.1) removed 2003-06-23-promotedexprs.qmt (r1.1) removed 2003-06-28-invokesupport.qmt (r1.1) removed 2003-06-28-linkonceglobalvars.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:17 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:17 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/cxxfrontend.qms/2003-08-20-exceptionfail.qmt 2003-08-21-emptyclass.qmt 2003-08-24-cleanup.qmt 2003-08-27-typenamespaces.qmt 2003-08-28-forwardtype.qmt 2003-08-28-saveexprbug.qmt 2003-08-29-argpassingbug.qmt 2003-08-31-structlayout.qmt 2003-09-22-compositeexprvalue.qmt 2003-09-29-argumentnumbermismatch.qmt 2003-09-30-nestedfunctiondecl.qmt Message-ID: <200310151912.OAA05535@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/cxxfrontend.qms: 2003-08-20-exceptionfail.qmt (r1.1) removed 2003-08-21-emptyclass.qmt (r1.1) removed 2003-08-24-cleanup.qmt (r1.1) removed 2003-08-27-typenamespaces.qmt (r1.1) removed 2003-08-28-forwardtype.qmt (r1.1) removed 2003-08-28-saveexprbug.qmt (r1.1) removed 2003-08-29-argpassingbug.qmt (r1.1) removed 2003-08-31-structlayout.qmt (r1.1) removed 2003-09-22-compositeexprvalue.qmt (r1.1) removed 2003-09-29-argumentnumbermismatch.qmt (r1.1) removed 2003-09-30-nestedfunctiondecl.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:21 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:21 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/linker.qms/2002-07-17-globalfail.qmt 2002-07-17-linktest2.qmt 2002-08-20-constantexpr.qmt 2003-01-30-linkerrename.qmt 2003-01-30-linkertyperename.qmt 2003-04-21-linkage.qmt 2003-04-23-linkoncelost.qmt 2003-04-26-nullptrlinkproblem.qmt 2003-05-15-typeproblem.qmt 2003-05-31-linkerrename.qmt 2003-06-02-typeresolveproblem.qmt 2003-06-02-typeresolveproblem2.qmt 2003-08-20-opaquetyperesolve.qmt 2003-08-23-globalvarlinking.qmt 2003-08-23-recursiveopaquetyperesolve.qmt 2003-08-24-inheritptrsize.qmt 2003-08-28-typeresolvesglobal.qmt 2003-08-28-typeresolvesglobal2.qmt 2003-08-28-typeresolvesglobal3.qmt appendinglinkage.qmt appendinglinkage2.qmt linkonce.qmt testlink1.qmt Message-ID: <200310151912.OAA05554@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/linker.qms: 2002-07-17-globalfail.qmt (r1.1) removed 2002-07-17-linktest2.qmt (r1.1) removed 2002-08-20-constantexpr.qmt (r1.1) removed 2003-01-30-linkerrename.qmt (r1.1) removed 2003-01-30-linkertyperename.qmt (r1.1) removed 2003-04-21-linkage.qmt (r1.1) removed 2003-04-23-linkoncelost.qmt (r1.1) removed 2003-04-26-nullptrlinkproblem.qmt (r1.1) removed 2003-05-15-typeproblem.qmt (r1.1) removed 2003-05-31-linkerrename.qmt (r1.1) removed 2003-06-02-typeresolveproblem.qmt (r1.1) removed 2003-06-02-typeresolveproblem2.qmt (r1.1) removed 2003-08-20-opaquetyperesolve.qmt (r1.1) removed 2003-08-23-globalvarlinking.qmt (r1.1) removed 2003-08-23-recursiveopaquetyperesolve.qmt (r1.1) removed 2003-08-24-inheritptrsize.qmt (r1.1) removed 2003-08-28-typeresolvesglobal.qmt (r1.1) removed 2003-08-28-typeresolvesglobal2.qmt (r1.1) removed 2003-08-28-typeresolvesglobal3.qmt (r1.1) removed appendinglinkage.qmt (r1.1) removed appendinglinkage2.qmt (r1.1) removed linkonce.qmt (r1.1) removed testlink1.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:25 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:25 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/jello.qms/2002-12-16-argtest.qmt 2002-12-23-localraproblem.qmt 2002-12-23-subproblem.qmt 2003-01-04-argumentbug.qmt 2003-01-04-looptest.qmt 2003-01-04-phitest.qmt 2003-01-09-sartest.qmt 2003-01-10-fucom.qmt 2003-01-15-alignmenttest.qmt 2003-05-06-livenessclobber.qmt 2003-05-07-argumenttest.qmt 2003-05-11-phiregallocbug.qmt 2003-06-04-bzip2-bug.qmt 2003-06-05-phibug.qmt 2003-08-03-callargliveranges.qmt 2003-08-04-physreglivefailure.qmt 2003-08-15-allocaassertion.qmt 2003-08-21-environmenttest.qmt 2003-08-23-deadblocktest.qmt 2003-08-23-registerallocatephysreg.qmt hello.qmt hello2.qmt simplesttest.qmt simpletest.qmt test-arith.qmt test-branch.qmt test-call.qmt test-cast.qmt test-constantexpr.qmt test-fp.qmt test-loadstore.qmt test-logical.qmt test-loop.qmt test-malloc.qmt test-phi.qmt test-ret.qmt test-setcond-fp.qmt test-setcond-int.qmt test-shift.qmt Message-ID: <200310151912.OAA05546@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/jello.qms: 2002-12-16-argtest.qmt (r1.1) removed 2002-12-23-localraproblem.qmt (r1.1) removed 2002-12-23-subproblem.qmt (r1.1) removed 2003-01-04-argumentbug.qmt (r1.1) removed 2003-01-04-looptest.qmt (r1.1) removed 2003-01-04-phitest.qmt (r1.1) removed 2003-01-09-sartest.qmt (r1.1) removed 2003-01-10-fucom.qmt (r1.1) removed 2003-01-15-alignmenttest.qmt (r1.1) removed 2003-05-06-livenessclobber.qmt (r1.1) removed 2003-05-07-argumenttest.qmt (r1.1) removed 2003-05-11-phiregallocbug.qmt (r1.1) removed 2003-06-04-bzip2-bug.qmt (r1.1) removed 2003-06-05-phibug.qmt (r1.1) removed 2003-08-03-callargliveranges.qmt (r1.1) removed 2003-08-04-physreglivefailure.qmt (r1.1) removed 2003-08-15-allocaassertion.qmt (r1.1) removed 2003-08-21-environmenttest.qmt (r1.1) removed 2003-08-23-deadblocktest.qmt (r1.1) removed 2003-08-23-registerallocatephysreg.qmt (r1.1) removed hello.qmt (r1.1) removed hello2.qmt (r1.1) removed simplesttest.qmt (r1.1) removed simpletest.qmt (r1.1) removed test-arith.qmt (r1.1) removed test-branch.qmt (r1.1) removed test-call.qmt (r1.1) removed test-cast.qmt (r1.1) removed test-constantexpr.qmt (r1.1) removed test-fp.qmt (r1.1) removed test-loadstore.qmt (r1.1) removed test-logical.qmt (r1.1) removed test-loop.qmt (r1.1) removed test-malloc.qmt (r1.1) removed test-phi.qmt (r1.1) removed test-ret.qmt (r1.1) removed test-setcond-fp.qmt (r1.1) removed test-setcond-int.qmt (r1.1) removed test-shift.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:29 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:29 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/llc.qms/2002-04-14-unexpectedunsignedtype.qmt 2002-04-16-stackframesizealignment.qmt 2003-05-27-phifcmpd.qmt 2003-05-27-useboolinotherbb.qmt 2003-05-27-usefsubasbool.qmt 2003-05-28-manyargs.qmt 2003-05-30-badfoldgep.qmt 2003-05-30-badpreselectphi.qmt 2003-07-06-badintcmp.qmt 2003-07-07-badlongconst.qmt 2003-07-08-badcasttobool.qmt 2003-07-29-badconstsbyte.qmt badarg6.qmt badcallarglr.qmt badfoldgep.qmt badlive.qmt constindices.qmt fwdtwice.qmt negintconst.qmt sched.qmt select.qmt spillccr.qmt yyparse.qmt Message-ID: <200310151912.OAA05562@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/llc.qms: 2002-04-14-unexpectedunsignedtype.qmt (r1.1) removed 2002-04-16-stackframesizealignment.qmt (r1.1) removed 2003-05-27-phifcmpd.qmt (r1.1) removed 2003-05-27-useboolinotherbb.qmt (r1.1) removed 2003-05-27-usefsubasbool.qmt (r1.1) removed 2003-05-28-manyargs.qmt (r1.1) removed 2003-05-30-badfoldgep.qmt (r1.1) removed 2003-05-30-badpreselectphi.qmt (r1.1) removed 2003-07-06-badintcmp.qmt (r1.1) removed 2003-07-07-badlongconst.qmt (r1.1) removed 2003-07-08-badcasttobool.qmt (r1.1) removed 2003-07-29-badconstsbyte.qmt (r1.1) removed badarg6.qmt (r1.1) removed badcallarglr.qmt (r1.1) removed badfoldgep.qmt (r1.1) removed badlive.qmt (r1.1) removed constindices.qmt (r1.1) removed fwdtwice.qmt (r1.1) removed negintconst.qmt (r1.1) removed sched.qmt (r1.1) removed select.qmt (r1.1) removed spillccr.qmt (r1.1) removed yyparse.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:33 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:33 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/other.qms/2002-01-31-callgraph.qmt 2002-01-31-postdomset-2.qmt 2002-01-31-postdomset.qmt 2002-02-24-inlinebrokephinodes.qmt 2002-03-11-constpropcrash.qmt 2002-03-11-exprassertion.qmt 2002-03-14-valuetolarge.qmt 2002-08-02-domsetproblem.qmt 2003-02-19-loopinfonestingbug.qmt Message-ID: <200310151912.OAA05573@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/other.qms: 2002-01-31-callgraph.qmt (r1.1) removed 2002-01-31-postdomset-2.qmt (r1.1) removed 2002-01-31-postdomset.qmt (r1.1) removed 2002-02-24-inlinebrokephinodes.qmt (r1.1) removed 2002-03-11-constpropcrash.qmt (r1.1) removed 2002-03-11-exprassertion.qmt (r1.1) removed 2002-03-14-valuetolarge.qmt (r1.1) removed 2002-08-02-domsetproblem.qmt (r1.1) removed 2003-02-19-loopinfonestingbug.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:37 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:37 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/tablegen.qms/2003-08-03-passcode.qmt bitsinitoverflow.qmt cstylecomment.qmt generallist.qmt include.qmt intbitinit.qmt listconversion.qmt tree.qmt treenames.qmt unterminatedcomment.qmt Message-ID: <200310151912.OAA05578@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/tablegen.qms: 2003-08-03-passcode.qmt (r1.1) removed bitsinitoverflow.qmt (r1.1) removed cstylecomment.qmt (r1.1) removed generallist.qmt (r1.1) removed include.qmt (r1.1) removed intbitinit.qmt (r1.1) removed listconversion.qmt (r1.1) removed tree.qmt (r1.1) removed treenames.qmt (r1.1) removed unterminatedcomment.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:41 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:41 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/basicaa.qms/2003-02-26-accesssizetest.qmt 2003-03-04-gepcrash.qmt 2003-04-22-gepproblem.qmt 2003-04-25-gepcrash.qmt 2003-05-21-gep-problem.qmt 2003-06-01-aliascrash.qmt 2003-07-03-basicaacrash.qmt 2003-09-19-localargument.qmt featuretest.qmt gcsetest.qmt licmtest.qmt Message-ID: <200310151912.OAA05592@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/basicaa.qms: 2003-02-26-accesssizetest.qmt (r1.1) removed 2003-03-04-gepcrash.qmt (r1.1) removed 2003-04-22-gepproblem.qmt (r1.1) removed 2003-04-25-gepcrash.qmt (r1.1) removed 2003-05-21-gep-problem.qmt (r1.1) removed 2003-06-01-aliascrash.qmt (r1.1) removed 2003-07-03-basicaacrash.qmt (r1.1) removed 2003-09-19-localargument.qmt (r1.1) removed featuretest.qmt (r1.1) removed gcsetest.qmt (r1.1) removed licmtest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:45 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:45 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/adce.qms/2002-01-31-usestuckaround.qmt 2002-05-22-phitest.qmt 2002-05-23-zeroargphitest.qmt 2002-05-28-crash-distilled.qmt 2002-05-28-crash.qmt 2002-07-17-assertionfailure.qmt 2002-07-17-phiassertion.qmt 2002-07-29-segfault.qmt 2003-01-22-predecessorproblem.qmt 2003-04-25-phipostdominateproblem.qmt 2003-06-11-invalidcfg.qmt 2003-06-24-badsuccessor.qmt 2003-06-24-basicfunctionality.qmt 2003-09-10-unwindinstfail.qmt 2003-09-15-infloopcrash.qmt adcetest.qmt basictest.qmt basictest1.qmt basictest2.qmt Message-ID: <200310151912.OAA05586@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/adce.qms: 2002-01-31-usestuckaround.qmt (r1.1) removed 2002-05-22-phitest.qmt (r1.1) removed 2002-05-23-zeroargphitest.qmt (r1.1) removed 2002-05-28-crash-distilled.qmt (r1.1) removed 2002-05-28-crash.qmt (r1.1) removed 2002-07-17-assertionfailure.qmt (r1.1) removed 2002-07-17-phiassertion.qmt (r1.1) removed 2002-07-29-segfault.qmt (r1.1) removed 2003-01-22-predecessorproblem.qmt (r1.1) removed 2003-04-25-phipostdominateproblem.qmt (r1.1) removed 2003-06-11-invalidcfg.qmt (r1.1) removed 2003-06-24-badsuccessor.qmt (r1.1) removed 2003-06-24-basicfunctionality.qmt (r1.1) removed 2003-09-10-unwindinstfail.qmt (r1.1) removed 2003-09-15-infloopcrash.qmt (r1.1) removed adcetest.qmt (r1.1) removed basictest.qmt (r1.1) removed basictest1.qmt (r1.1) removed basictest2.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:49 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:49 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/constantmerge.qms/2002-09-23-cprupdate.qmt Message-ID: <200310151912.OAA05599@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/constantmerge.qms: 2002-09-23-cprupdate.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:53 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:53 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/constprop.qms/2002-05-03-dividebyzeroexception.qmt 2002-05-03-notoperator.qmt 2002-09-03-setcc-bools.qmt 2003-05-12-divideerror.qmt basictest.qmt logicaltest.qmt nottest.qmt phi.qmt remtest.qmt Message-ID: <200310151912.OAA05607@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/constprop.qms: 2002-05-03-dividebyzeroexception.qmt (r1.2) removed 2002-05-03-notoperator.qmt (r1.2) removed 2002-09-03-setcc-bools.qmt (r1.2) removed 2003-05-12-divideerror.qmt (r1.2) removed basictest.qmt (r1.2) removed logicaltest.qmt (r1.2) removed nottest.qmt (r1.2) removed phi.qmt (r1.2) removed remtest.qmt (r1.2) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:14:57 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:14:57 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/correlatedexprs.qms/2002-09-23-phiupdatebug.qmt 2002-10-03-phipropogate.qmt 2002-10-04-forwardingbug.qmt 2002-10-07-dominatorproblem.qmt 2002-10-07-noimmediatedominator.qmt 2002-10-08-dominatortest.qmt 2002-10-08-dominatortest2.qmt basictest.qmt branchtest.qmt looptest.qmt nullpointer.qmt whet.qmt Message-ID: <200310151912.OAA05618@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/correlatedexprs.qms: 2002-09-23-phiupdatebug.qmt (r1.1) removed 2002-10-03-phipropogate.qmt (r1.1) removed 2002-10-04-forwardingbug.qmt (r1.1) removed 2002-10-07-dominatorproblem.qmt (r1.1) removed 2002-10-07-noimmediatedominator.qmt (r1.1) removed 2002-10-08-dominatortest.qmt (r1.1) removed 2002-10-08-dominatortest2.qmt (r1.1) removed basictest.qmt (r1.1) removed branchtest.qmt (r1.1) removed looptest.qmt (r1.1) removed nullpointer.qmt (r1.1) removed whet.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:02 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/deadargelim.qms/basictest.qmt Message-ID: <200310151912.OAA05624@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/deadargelim.qms: basictest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:07 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:07 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/decomposemultidimrefs.qms/multidim.qmt Message-ID: <200310151912.OAA05631@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/decomposemultidimrefs.qms: multidim.qmt (r1.2) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:11 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:11 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/functionresolve.qms/2002-08-19-resolveglobalvars.qmt 2002-08-19-resolveglobalvarseasier.qmt 2002-11-07-retmismatch.qmt 2002-11-09-externfn.qmt 2003-04-18-forwarddeclglobal.qmt 2003-05-21-missingarguments.qmt 2003-05-31-allinternaldecls.qmt 2003-05-31-funcpointerresolve.qmt 2003-05-31-internaldecl.qmt 2003-07-23-cpr-reference.qmt 2003-08-23-argumentwarning.qmt basictest.qmt retmismatch1.qmt retmismatch2.qmt retmismatch3.qmt Message-ID: <200310151912.OAA05644@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/functionresolve.qms: 2002-08-19-resolveglobalvars.qmt (r1.1) removed 2002-08-19-resolveglobalvarseasier.qmt (r1.1) removed 2002-11-07-retmismatch.qmt (r1.1) removed 2002-11-09-externfn.qmt (r1.1) removed 2003-04-18-forwarddeclglobal.qmt (r1.1) removed 2003-05-21-missingarguments.qmt (r1.1) removed 2003-05-31-allinternaldecls.qmt (r1.1) removed 2003-05-31-funcpointerresolve.qmt (r1.1) removed 2003-05-31-internaldecl.qmt (r1.1) removed 2003-07-23-cpr-reference.qmt (r1.1) removed 2003-08-23-argumentwarning.qmt (r1.1) removed basictest.qmt (r1.1) removed retmismatch1.qmt (r1.1) removed retmismatch2.qmt (r1.1) removed retmismatch3.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:15 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:15 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/dsaanalysis.qms/arraymerge.qmt arraytest.qmt badcases.qmt basictest.qmt fieldmerge.qmt goodcases.qmt indcalltest.qmt misctests.qmt physicalsubtype.qmt recursion.qmt simplest-test.qmt simpletest.qmt structpadding.qmt Message-ID: <200310151912.OAA05636@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/dsaanalysis.qms: arraymerge.qmt (r1.1) removed arraytest.qmt (r1.1) removed badcases.qmt (r1.1) removed basictest.qmt (r1.1) removed fieldmerge.qmt (r1.1) removed goodcases.qmt (r1.1) removed indcalltest.qmt (r1.1) removed misctests.qmt (r1.1) removed physicalsubtype.qmt (r1.1) removed recursion.qmt (r1.1) removed simplest-test.qmt (r1.1) removed simpletest.qmt (r1.1) removed structpadding.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:20 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:20 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/gcse.qms/2002-05-14-operandswap.qmt 2002-05-21-noshareddominator.qmt 2003-06-13-loadstoreeliminate.qmt gcsetests.qmt rle-eliminate.qmt rle-preserve-volatile.qmt rle-preserve.qmt Message-ID: <200310151912.OAA05652@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/gcse.qms: 2002-05-14-operandswap.qmt (r1.1) removed 2002-05-21-noshareddominator.qmt (r1.1) removed 2003-06-13-loadstoreeliminate.qmt (r1.1) removed gcsetests.qmt (r1.1) removed rle-eliminate.qmt (r1.1) removed rle-preserve-volatile.qmt (r1.1) removed rle-preserve.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:24 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:24 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/globaldce.qms/2002-07-17-castref.qmt 2002-07-17-constantref.qmt 2002-08-17-functiondge.qmt 2002-08-17-worklisttest.qmt 2002-09-12-redeletion.qmt 2003-07-01-selfreference.qmt basicvariabletest.qmt Message-ID: <200310151912.OAA05657@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/globaldce.qms: 2002-07-17-castref.qmt (r1.1) removed 2002-07-17-constantref.qmt (r1.1) removed 2002-08-17-functiondge.qmt (r1.1) removed 2002-08-17-worklisttest.qmt (r1.1) removed 2002-09-12-redeletion.qmt (r1.1) removed 2003-07-01-selfreference.qmt (r1.1) removed basicvariabletest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:29 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:29 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/instcombine.qms/2002-03-11-instcombinehang.qmt 2002-05-14-subfailure.qmt 2002-05-14-touchdeletedinst.qmt 2002-08-02-casttest.qmt 2002-09-17-getelementptrcrash.qmt 2002-12-05-missedconstprop.qmt 2003-05-26-castmiscompile.qmt 2003-05-27-constexprcrash.qmt 2003-06-05-branchinvertinfloop.qmt 2003-06-22-constantexprcrash.qmt 2003-07-21-externalconstant.qmt 2003-08-12-allocanonnull.qmt 2003-09-09-volatileloadelim.qmt add.qmt and.qmt call.qmt cast-set.qmt cast.qmt div.qmt getelementptr.qmt load.qmt malloc.qmt mul.qmt not.qmt or.qmt phi.qmt pow.qmt rem.qmt set.qmt setcc-strength-reduce.qmt shift.qmt sub.qmt xor.qmt Message-ID: <200310151912.OAA05681@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/instcombine.qms: 2002-03-11-instcombinehang.qmt (r1.1) removed 2002-05-14-subfailure.qmt (r1.1) removed 2002-05-14-touchdeletedinst.qmt (r1.1) removed 2002-08-02-casttest.qmt (r1.1) removed 2002-09-17-getelementptrcrash.qmt (r1.1) removed 2002-12-05-missedconstprop.qmt (r1.1) removed 2003-05-26-castmiscompile.qmt (r1.1) removed 2003-05-27-constexprcrash.qmt (r1.1) removed 2003-06-05-branchinvertinfloop.qmt (r1.1) removed 2003-06-22-constantexprcrash.qmt (r1.1) removed 2003-07-21-externalconstant.qmt (r1.1) removed 2003-08-12-allocanonnull.qmt (r1.1) removed 2003-09-09-volatileloadelim.qmt (r1.1) removed add.qmt (r1.1) removed and.qmt (r1.1) removed call.qmt (r1.1) removed cast-set.qmt (r1.1) removed cast.qmt (r1.1) removed div.qmt (r1.1) removed getelementptr.qmt (r1.1) removed load.qmt (r1.1) removed malloc.qmt (r1.1) removed mul.qmt (r1.1) removed not.qmt (r1.1) removed or.qmt (r1.1) removed phi.qmt (r1.1) removed pow.qmt (r1.1) removed rem.qmt (r1.1) removed set.qmt (r1.1) removed setcc-strength-reduce.qmt (r1.1) removed shift.qmt (r1.1) removed sub.qmt (r1.1) removed xor.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:33 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:33 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/indvarssimplify.qms/2002-09-09-pointerindvar.qmt 2003-04-16-expranalysis.qmt alloca_test.qmt basictest.qmt Message-ID: <200310151912.OAA05662@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/indvarssimplify.qms: 2002-09-09-pointerindvar.qmt (r1.1) removed 2003-04-16-expranalysis.qmt (r1.1) removed alloca_test.qmt (r1.1) removed basictest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:38 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:38 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/inline.qms/2003-09-14-inlinevalue.qmt 2003-09-22-phinodesinexceptiondest.qmt 2003-09-22-phinodesinnormalinvokedest.qmt alloca_test.qmt basictest.qmt cfg_preserve_test.qmt inline_dce.qmt invoke_test-1.qmt invoke_test-2.qmt invoke_test-3.qmt Message-ID: <200310151912.OAA05667@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/inline.qms: 2003-09-14-inlinevalue.qmt (r1.1) removed 2003-09-22-phinodesinexceptiondest.qmt (r1.1) removed 2003-09-22-phinodesinnormalinvokedest.qmt (r1.1) removed alloca_test.qmt (r1.1) removed basictest.qmt (r1.1) removed cfg_preserve_test.qmt (r1.1) removed inline_dce.qmt (r1.1) removed invoke_test-1.qmt (r1.1) removed invoke_test-2.qmt (r1.1) removed invoke_test-3.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:42 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:42 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/licm.qms/2003-02-26-loopexitnotdominated.qmt 2003-02-27-nestedloopexitblocks.qmt 2003-02-27-preheaderexitnodeupdate.qmt 2003-02-27-preheaderproblem.qmt 2003-02-27-storesinkphis.qmt 2003-02-28-promotedifferenttype.qmt 2003-05-02-loadhoist.qmt 2003-08-04-trappinginsthoist.qmt 2003-08-04-trappinginstokhoist.qmt basictest.qmt no-preheader-test.qmt scalar_promote.qmt Message-ID: <200310151912.OAA05715@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/licm.qms: 2003-02-26-loopexitnotdominated.qmt (r1.1) removed 2003-02-27-nestedloopexitblocks.qmt (r1.1) removed 2003-02-27-preheaderexitnodeupdate.qmt (r1.1) removed 2003-02-27-preheaderproblem.qmt (r1.1) removed 2003-02-27-storesinkphis.qmt (r1.1) removed 2003-02-28-promotedifferenttype.qmt (r1.1) removed 2003-05-02-loadhoist.qmt (r1.1) removed 2003-08-04-trappinginsthoist.qmt (r1.1) removed 2003-08-04-trappinginstokhoist.qmt (r1.1) removed basictest.qmt (r1.1) removed no-preheader-test.qmt (r1.1) removed scalar_promote.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:46 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:46 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/levelraise.qms/2002-02-11-arrayshape.qmt 2002-02-14-badassertion.qmt 2002-03-11-calls.qmt 2002-03-14-convertabletogephang.qmt 2002-03-20-badcodegen.qmt 2002-03-20-crash.qmt 2002-03-21-missedraise.qmt 2002-03-21-missedraise2.qmt 2002-03-21-missedraise3.qmt 2002-04-09-missedraise.qmt 2002-04-16-missedraise.qmt 2002-05-02-badcastelimination.qmt 2002-05-02-missedraise.qmt 2002-05-10-loadpeephole.qmt 2002-05-23-missedraise.qmt 2002-07-16-missedraise.qmt 2002-07-16-raisecrash.qmt 2002-07-16-raisecrash2.qmt 2002-07-16-sourceanddestcrash.qmt 2002-07-18-missedallocaraise.qmt 2002-07-31-assertionfailure.qmt 2002-09-10-pointeradds.qmt 2002-10-02-signextensionproblem.qmt 2002-10-08-varargcall.qmt 2002-10-08-varargcallinfloop.qmt 2002-11-04-constantsharing.qmt 2002-11-13-pointerfunction.qmt 2003-01-22-gepproblem.qmt 2003-01-30-shiftcrash.qmt 2003-02-13-callraise.qmt 2003-05-01-callcast.qmt 2003-06-07-emptyarraytest.qmt 2003-! 06-25-expranalysis.qmt Message-ID: <200310151912.OAA05701@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/levelraise.qms: 2002-02-11-arrayshape.qmt (r1.1) removed 2002-02-14-badassertion.qmt (r1.1) removed 2002-03-11-calls.qmt (r1.1) removed 2002-03-14-convertabletogephang.qmt (r1.1) removed 2002-03-20-badcodegen.qmt (r1.1) removed 2002-03-20-crash.qmt (r1.1) removed 2002-03-21-missedraise.qmt (r1.1) removed 2002-03-21-missedraise2.qmt (r1.1) removed 2002-03-21-missedraise3.qmt (r1.1) removed 2002-04-09-missedraise.qmt (r1.1) removed 2002-04-16-missedraise.qmt (r1.1) removed 2002-05-02-badcastelimination.qmt (r1.1) removed 2002-05-02-missedraise.qmt (r1.1) removed 2002-05-10-loadpeephole.qmt (r1.1) removed 2002-05-23-missedraise.qmt (r1.1) removed 2002-07-16-missedraise.qmt (r1.1) removed 2002-07-16-raisecrash.qmt (r1.1) removed 2002-07-16-raisecrash2.qmt (r1.1) removed 2002-07-16-sourceanddestcrash.qmt (r1.1) removed 2002-07-18-missedallocaraise.qmt (r1.1) removed 2002-07-31-assertionfailure.qmt (r1.1) removed 2002-09-10-pointeradds.qmt (r1.1) removed 2002-10-02-signextensionproblem.qmt (r1.1) removed 2002-10-08-varargcall.qmt (r1.1) removed 2002-10-08-varargcallinfloop.qmt (r1.1) removed 2002-11-04-constantsharing.qmt (r1.1) removed 2002-11-13-pointerfunction.qmt (r1.1) removed 2003-01-22-gepproblem.qmt (r1.1) removed 2003-01-30-shiftcrash.qmt (r1.1) removed 2003-02-13-callraise.qmt (r1.1) removed 2003-05-01-callcast.qmt (r1.1) removed 2003-06-07-emptyarraytest.qmt (r1.1) removed 2003-06-25-expranalysis.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:51 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:51 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/loopprehreaders.qms/2003-04-25-assertfail.qmt 2003-05-12-preheaderexitofchild.qmt 2003-08-15-preheadersfail.qmt basictest.qmt hardertest.qmt Message-ID: <200310151912.OAA05720@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/loopprehreaders.qms: 2003-04-25-assertfail.qmt (r1.1) removed 2003-05-12-preheaderexitofchild.qmt (r1.1) removed 2003-08-15-preheadersfail.qmt (r1.1) removed basictest.qmt (r1.1) removed hardertest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:15:56 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:15:56 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/lowerswitch.qms/2003-05-01-phiproblem.qmt 2003-08-23-emptyswitch.qmt Message-ID: <200310151912.OAA05730@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/lowerswitch.qms: 2003-05-01-phiproblem.qmt (r1.1) removed 2003-08-23-emptyswitch.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:01 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/lowersetjmp.qms/simpletest.qmt Message-ID: <200310151912.OAA05725@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/lowersetjmp.qms: simpletest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:05 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:05 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/mem2reg.qms/2002-03-28-uninitializedval.qmt 2002-05-01-shouldnotpromotethisalloca.qmt 2003-04-10-dfnotfound.qmt 2003-04-18-deadblockproblem.qmt 2003-04-24-multipleidenticalsuccessors.qmt 2003-06-26-iterativepromote.qmt differingtypes.qmt promotememtoregister.qmt Message-ID: <200310151912.OAA05735@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/mem2reg.qms: 2002-03-28-uninitializedval.qmt (r1.1) removed 2002-05-01-shouldnotpromotethisalloca.qmt (r1.1) removed 2003-04-10-dfnotfound.qmt (r1.1) removed 2003-04-18-deadblockproblem.qmt (r1.1) removed 2003-04-24-multipleidenticalsuccessors.qmt (r1.1) removed 2003-06-26-iterativepromote.qmt (r1.1) removed differingtypes.qmt (r1.1) removed promotememtoregister.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:10 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:10 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/pruneeh.qms/2003-09-14-externalcall.qmt recursivetest.qmt simpletest.qmt Message-ID: <200310151912.OAA05755@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/pruneeh.qms: 2003-09-14-externalcall.qmt (r1.2) removed recursivetest.qmt (r1.2) removed simpletest.qmt (r1.2) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:15 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:15 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/pinodeinserter.qms/substitutetest.qmt test.qmt Message-ID: <200310151912.OAA05740@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/pinodeinserter.qms: substitutetest.qmt (r1.1) removed test.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:20 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:20 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/profilepaths.qms/2002-05-22-castcrash.qmt Message-ID: <200310151912.OAA05750@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/profilepaths.qms: 2002-05-22-castcrash.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:24 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:24 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/pre.qms/basictest.qmt Message-ID: <200310151912.OAA05745@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/pre.qms: basictest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:29 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:29 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/reassociate.qms/2002-05-15-agressivesubmove.qmt 2002-05-15-missedtree.qmt 2002-05-15-subreassociate.qmt 2002-05-15-subreassociate2.qmt 2002-07-09-dominanceproblem.qmt 2003-08-12-infiniteloop.qmt basictest.qmt basictest2.qmt looptest.qmt otherops.qmt subtest.qmt Message-ID: <200310151912.OAA05760@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/reassociate.qms: 2002-05-15-agressivesubmove.qmt (r1.1) removed 2002-05-15-missedtree.qmt (r1.1) removed 2002-05-15-subreassociate.qmt (r1.1) removed 2002-05-15-subreassociate2.qmt (r1.1) removed 2002-07-09-dominanceproblem.qmt (r1.1) removed 2003-08-12-infiniteloop.qmt (r1.1) removed basictest.qmt (r1.1) removed basictest2.qmt (r1.1) removed looptest.qmt (r1.1) removed otherops.qmt (r1.1) removed subtest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:34 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:34 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/scalarrepl.qms/2003-05-29-arrayfail.qmt 2003-05-30-invalidindices.qmt 2003-05-30-multilevel.qmt 2003-09-12-incorrectpromote.qmt arraytest.qmt badarray.qmt basictest.qmt Message-ID: <200310151912.OAA05766@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/scalarrepl.qms: 2003-05-29-arrayfail.qmt (r1.1) removed 2003-05-30-invalidindices.qmt (r1.1) removed 2003-05-30-multilevel.qmt (r1.1) removed 2003-09-12-incorrectpromote.qmt (r1.1) removed arraytest.qmt (r1.1) removed badarray.qmt (r1.1) removed basictest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:38 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:38 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/sccp.qms/2002-05-02-edgefailure.qmt 2002-05-02-misssecondinst.qmt 2002-05-20-missedincomingvalue.qmt 2002-05-21-invalidsimplify.qmt 2002-08-30-getelementptrtest.qmt 2003-06-24-overdefinedphivalue.qmt 2003-08-26-invokehandling.qmt basictest.qmt sccptest.qmt Message-ID: <200310151912.OAA05771@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/sccp.qms: 2002-05-02-edgefailure.qmt (r1.1) removed 2002-05-02-misssecondinst.qmt (r1.1) removed 2002-05-20-missedincomingvalue.qmt (r1.1) removed 2002-05-21-invalidsimplify.qmt (r1.1) removed 2002-08-30-getelementptrtest.qmt (r1.1) removed 2003-06-24-overdefinedphivalue.qmt (r1.1) removed 2003-08-26-invokehandling.qmt (r1.1) removed basictest.qmt (r1.1) removed sccptest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:44 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:44 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/simplifycfg.qms/2002-05-05-emptyblockmerge.qmt 2002-05-21-phielimination.qmt 2002-06-24-phinode.qmt 2002-09-24-phiassertion.qmt 2003-03-07-dominateproblem.qmt 2003-08-05-invokecrash.qmt 2003-08-05-mishandleinvoke.qmt 2003-08-17-branchfold.qmt 2003-08-17-branchfoldordering.qmt 2003-08-17-foldswitch.qmt basictest.qmt branch-fold-test.qmt equalphiedgeblockmerge.qmt invokeeliminate.qmt phiblockmerge.qmt phiblockmerge2.qmt Message-ID: <200310151912.OAA05776@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/simplifycfg.qms: 2002-05-05-emptyblockmerge.qmt (r1.1) removed 2002-05-21-phielimination.qmt (r1.1) removed 2002-06-24-phinode.qmt (r1.1) removed 2002-09-24-phiassertion.qmt (r1.1) removed 2003-03-07-dominateproblem.qmt (r1.1) removed 2003-08-05-invokecrash.qmt (r1.1) removed 2003-08-05-mishandleinvoke.qmt (r1.1) removed 2003-08-17-branchfold.qmt (r1.1) removed 2003-08-17-branchfoldordering.qmt (r1.1) removed 2003-08-17-foldswitch.qmt (r1.1) removed basictest.qmt (r1.1) removed branch-fold-test.qmt (r1.1) removed equalphiedgeblockmerge.qmt (r1.1) removed invokeeliminate.qmt (r1.1) removed phiblockmerge.qmt (r1.1) removed phiblockmerge2.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:49 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:49 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/tailcallelim.qms/ackermann.qmt Message-ID: <200310151912.OAA05781@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/tailcallelim.qms: ackermann.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:54 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:54 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/transforms.qms/taildup.qms/2003-06-24-simpleloop.qmt 2003-07-22-infiniteloop.qmt basictest.qmt phiupdatetest.qmt Message-ID: <200310151912.OAA05786@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/transforms.qms/taildup.qms: 2003-06-24-simpleloop.qmt (r1.1) removed 2003-07-22-infiniteloop.qmt (r1.1) removed basictest.qmt (r1.1) removed phiupdatetest.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 14:16:59 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 14:16:59 2003 Subject: [llvm-commits] CVS: llvm/test/QMTestDB/regression.qms/verifier.qms/2002-04-13-rettypes.qmt 2002-11-05-getelementptrpointers.qmt ambiguousphi.qmt phigrouping.qmt selfreferential.qmt Message-ID: <200310151912.OAA05791@choi.cs.uiuc.edu> Changes in directory llvm/test/QMTestDB/regression.qms/verifier.qms: 2002-04-13-rettypes.qmt (r1.1) removed 2002-11-05-getelementptrpointers.qmt (r1.1) removed ambiguousphi.qmt (r1.1) removed phigrouping.qmt (r1.1) removed selfreferential.qmt (r1.1) removed --- Log message: Removing old QMTest database. It has been replaced by the new LLVM specific one. --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 15:01:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 15:01:01 2003 Subject: [llvm-commits] CVS: llvm-www/releases/download.html Message-ID: <200310152000.PAA06611@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: download.html added (r1.1) --- Log message: Adding template for the LLVM download page. --- Diffs of the changes: (+46 -0) Index: llvm-www/releases/download.html diff -c /dev/null llvm-www/releases/download.html:1.1 *** /dev/null Wed Oct 15 15:00:15 2003 --- llvm-www/releases/download.html Wed Oct 15 15:00:05 2003 *************** *** 0 **** --- 1,46 ---- + + + LLVM Download Page + + + + +
    +

    + LLVM Download Page +

    +
    + +
    + + If you signed up for the LLVM Announcements list, you should receive a + confirmation email. If you don't, you can register for the mailing list at + + http://mail.cs.uiuc.edu/mailman/listinfo/llvm-announce + . + +
    + +

    + LLVM 1.0 +

    + + Please read the Release Notes before + downloading: +

    + +

      + +
    + +
  • LLVM +
  • GCC Front End for x86 +
  • GCC Front End for Sparc + + + + From criswell at cs.uiuc.edu Wed Oct 15 15:02:00 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 15:02:00 2003 Subject: [llvm-commits] CVS: llvm-www/releases/index.html Message-ID: <200310152001.PAA06642@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: index.html updated: 1.1 -> 1.2 --- Log message: Changed this to the registration for download page. The submit and clear form buttons are cancelled out for now. --- Diffs of the changes: (+61 -1) Index: llvm-www/releases/index.html diff -u llvm-www/releases/index.html:1.1 llvm-www/releases/index.html:1.2 --- llvm-www/releases/index.html:1.1 Wed Oct 1 17:37:32 2003 +++ llvm-www/releases/index.html Wed Oct 15 15:01:27 2003 @@ -1,2 +1,62 @@ + + +LLVM Registration Page + + + + +
    +

    +LLVM Registration Page +

    +
    + +
    + +Welcome to the LLVM registration page! Please complete the following form +below to download a copy of the LLVM software. + +
    +First Name (required):
    +
    +

    + +Last Name (required):
    +
    +

    + +Email Address (required):
    +
    +

    + +Organizational Affiliation:
    +
    +

    + +Position/Title:
    +
    +

    + +Subscribe to LLVM Announcements List (default is yes):
    + Yes
    + No
    + +Password for LLVM Announcements List:
    + Password
    + Confirm Password
    +

    + +What plans, if any, do you have for using LLVM:
    +
    +

    + + + +

    + + + -LLVM 1.0 Release (date) From gaeke at cs.uiuc.edu Wed Oct 15 15:43:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Oct 15 15:43:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.cpp Message-ID: <200310152042.PAA03557@gally.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.cpp updated: 1.17 -> 1.18 --- Log message: Flush output after writing out the list of function names. --- Diffs of the changes: (+1 -0) Index: llvm/tools/bugpoint/BugDriver.cpp diff -u llvm/tools/bugpoint/BugDriver.cpp:1.17 llvm/tools/bugpoint/BugDriver.cpp:1.18 --- llvm/tools/bugpoint/BugDriver.cpp:1.17 Tue Oct 14 15:52:55 2003 +++ llvm/tools/bugpoint/BugDriver.cpp Wed Oct 15 15:42:48 2003 @@ -170,4 +170,5 @@ if (i) std::cout << ", "; std::cout << Funcs[i]->getName(); } + std::cout << std::flush; } From gaeke at cs.uiuc.edu Wed Oct 15 15:48:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Oct 15 15:48:02 2003 Subject: [llvm-commits] CVS: llvm/lib/Support/SystemUtils.cpp Message-ID: <200310152047.PAA03864@gally.cs.uiuc.edu> Changes in directory llvm/lib/Support: SystemUtils.cpp updated: 1.16 -> 1.17 --- Log message: Fix up error message. --- Diffs of the changes: (+2 -1) Index: llvm/lib/Support/SystemUtils.cpp diff -u llvm/lib/Support/SystemUtils.cpp:1.16 llvm/lib/Support/SystemUtils.cpp:1.17 --- llvm/lib/Support/SystemUtils.cpp:1.16 Mon Sep 29 17:40:07 2003 +++ llvm/lib/Support/SystemUtils.cpp Wed Oct 15 15:46:58 2003 @@ -125,9 +125,10 @@ RedirectFD(StdErrFile, 2); execv(ProgramPath.c_str(), (char *const *)Args); - std::cerr << "Error executing program '" << ProgramPath; + std::cerr << "Error executing program: '" << ProgramPath; for (; *Args; ++Args) std::cerr << " " << *Args; + std::cerr << "'\n"; exit(1); default: break; From brukman at cs.uiuc.edu Wed Oct 15 16:36:00 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Oct 15 16:36:00 2003 Subject: [llvm-commits] CVS: llvm-www/status/ Message-ID: <200310152135.QAA31516@zion.cs.uiuc.edu> Changes in directory llvm-www/status: --- Log message: Directory /home/vadve/shared/InternalCVS/llvm-www/status added to the repository --- Diffs of the changes: (+0 -0) From brukman at cs.uiuc.edu Wed Oct 15 16:38:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Oct 15 16:38:01 2003 Subject: [llvm-commits] CVS: llvm-www/status/index.html status.css Message-ID: <200310152137.QAA31554@zion.cs.uiuc.edu> Changes in directory llvm-www/status: index.html added (r1.1) status.css added (r1.1) --- Log message: Converted into a table from its former life as the 'llvm-user' project. The status has not been updated for many programs because I need to retest them all. --- Diffs of the changes: (+281 -0) Index: llvm-www/status/index.html diff -c /dev/null llvm-www/status/index.html:1.1 *** /dev/null Wed Oct 15 16:37:07 2003 --- llvm-www/status/index.html Wed Oct 15 16:36:56 2003 *************** *** 0 **** --- 1,263 ---- + + + LLVM: status of compiling off-the-shelf programs + + + + + You should be able to compile and run programs with the following: + +
    + % setenv CC llvm-gcc
    + % ./configure
    + % make
    + 
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ProgramVersionDate testedStatusNotes
    coreutils5.015 Oct 2003WORKSapply this patch after + running ./configure and it all compiles, however, with many warnings: +
    gccld: Cannot find ypsec
    passes own tests.
    bison + 1.87515 Oct 2003WORKSpasses its own regression test suite
    ed0.215 Oct 2003FAILSExample session: +
    + % ./ed
    + e /etc/hosts
    + [ ed should print # of lines in file, but doesn't ]
    + 
    + Ed is the standard Unix editor!
    mutt1.4.1i14 Oct 2003WORKSProblem with linking: all globals are defined in + main.c and externed everywhere else. Unfortunately, + the global dead code elimination is eager to delete all those globals from + main.c because they aren't used in that file. For now, the + solution is to recompile main.c separately without global dead + code elimination, and relink mutt: +
      +
    1. rm -f main.o
    2. +
    3. gmake -n main.o
      + This will tell you what switches are used by llvm-gcc to compile the + file.
    4. +
    5. Re-run the command specifying -S instead of + -c to make main.s
    6. +
    7. llvm-as < main.s | opt -funcresolve > main.o
    8. +
    9. gmake     # re-link mutt +
    siod??apply this Makefile patch and then run + make linux_llvm
    enscript1.6.1passes its own regression test suite
    gawk3.1.3passes its own regression test suite
    gnugo5.06passes its own regression test suite
    grep2.5compiles but with lots of warnings of the form:
    + ReadArchiveBuffer: WARNING: Skipping unknown file: getu
    gzip1.2.4a
    recode3.6passes its own regression test suite
    wget1.829 Aug 2003
    sed4.0.729 Aug 2003passes its own regression test suite
    gnuchess5.06requires the pthread library, run with:
    +
    lli -load=/lib/libpthread.so.0 gnuchess.bc [gnuchess options]
    + Does not seem to be playing nice with xboard.
    nano1.2.1requires libncurses, run with:
    +
    lli -load=/usr/lib/libncurses.so nano.bc [nano options]
    +
    xboard4.2.6requires a bunch of X libraries to link with, so the command line should be: +
    + lli -load=/usr/X11R6/lib/libXaw.so  \
    +     -load=/usr/X11R6/lib/libXmu.so  \
    +     -load=/usr/X11R6/lib/libXt.so   \
    +     -load=/usr/X11R6/lib/libXext.so \
    +     -load=/usr/X11R6/lib/libXpm.so  \
    +     -load=/usr/X11R6/lib/libSM.so   \
    +     -load=/usr/X11R6/lib/libICE.so  \
    +     -load=/usr/X11R6/lib/libX11.so  \
    +     xboard.bc [xboard options]
    + 
    screen3.9.1529 Aug 2003Requires patch. The issue with + the types char* vs. unsigned char* has been resolved, and + the patch has been accepted into screen
    emacs21.31 Sep 2003Error: invalid integral type size
    ruby1.8.028 Aug 2003FAILSminiruby: WARNING: cannot resolve `__builtin_frame_address'
    + + + + + + + Index: llvm-www/status/status.css diff -c /dev/null llvm-www/status/status.css:1.1 *** /dev/null Wed Oct 15 16:37:07 2003 --- llvm-www/status/status.css Wed Oct 15 16:36:56 2003 *************** *** 0 **** --- 1,18 ---- + body { background: white; text-color: black } + + /* table */ + /* table headers */ + th.program {} + th.version {} + th.date {} + th.status {} + th.notes {} + + /* table cells */ + td.program, td.version, td.date, td.status { text-align: center } + td.notes {} + + /* status */ + .failure { color: red; font-weight: bold } + .success { color: green; font-weight: bold } + .iffy { color: orange; font-weight: bold } From brukman at cs.uiuc.edu Wed Oct 15 16:41:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Wed Oct 15 16:41:01 2003 Subject: [llvm-commits] CVS: llvm-www/.cvsignore Message-ID: <200310152140.QAA31630@zion.cs.uiuc.edu> Changes in directory llvm-www: .cvsignore added (r1.1) --- Log message: Ignore symlinks and cvsweb, which we do not have revision control for. --- Diffs of the changes: (+3 -0) Index: llvm-www/.cvsignore diff -c /dev/null llvm-www/.cvsignore:1.1 *** /dev/null Wed Oct 15 16:40:35 2003 --- llvm-www/.cvsignore Wed Oct 15 16:40:25 2003 *************** *** 0 **** --- 1,3 ---- + ChrisLLVM + cvsweb + index.html From lattner at cs.uiuc.edu Wed Oct 15 16:49:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 16:49:01 2003 Subject: [llvm-commits] CVS: llvm/tools/gccas/gccas.cpp Message-ID: <200310152148.QAA14228@apoc.cs.uiuc.edu> Changes in directory llvm/tools/gccas: gccas.cpp updated: 1.77 -> 1.78 --- Log message: The levelraise pass is a broken old piece of crufty code that should be left on the side of the road without a second thought. It is preventing forward progress, so for now, we will disable it by default. --- Diffs of the changes: (+2 -1) Index: llvm/tools/gccas/gccas.cpp diff -u llvm/tools/gccas/gccas.cpp:1.77 llvm/tools/gccas/gccas.cpp:1.78 --- llvm/tools/gccas/gccas.cpp:1.77 Fri Oct 10 13:18:53 2003 +++ llvm/tools/gccas/gccas.cpp Wed Oct 15 16:48:38 2003 @@ -58,7 +58,8 @@ addPass(PM, createFunctionInliningPass()); // Inline small functions addPass(PM, createInstructionCombiningPass()); // Cleanup code for raise - addPass(PM, createRaisePointerReferencesPass());// Recover type information + // FIXME: levelraise pass disabled until it can be rewritten at a later date. + //addPass(PM, createRaisePointerReferencesPass());// Recover type information addPass(PM, createTailDuplicationPass()); // Simplify cfg by copying code addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas From lattner at cs.uiuc.edu Wed Oct 15 16:51:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 16:51:02 2003 Subject: [llvm-commits] CVS: llvm/tools/gccas/gccas.cpp Message-ID: <200310152150.QAA14259@apoc.cs.uiuc.edu> Changes in directory llvm/tools/gccas: gccas.cpp updated: 1.78 -> 1.79 --- Log message: Give this file a proper header --- Diffs of the changes: (+1 -2) Index: llvm/tools/gccas/gccas.cpp diff -u llvm/tools/gccas/gccas.cpp:1.78 llvm/tools/gccas/gccas.cpp:1.79 --- llvm/tools/gccas/gccas.cpp:1.78 Wed Oct 15 16:48:38 2003 +++ llvm/tools/gccas/gccas.cpp Wed Oct 15 16:49:57 2003 @@ -1,5 +1,4 @@ -//===----------------------------------------------------------------------===// -// LLVM 'GCCAS' UTILITY +//===-- gccas.cpp - The "optimizing assembler" used by the GCC frontend ---===// // // This utility is designed to be used by the GCC frontend for creating bytecode // files from its intermediate LLVM assembly. The requirements for this utility From lattner at cs.uiuc.edu Wed Oct 15 16:56:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 16:56:01 2003 Subject: [llvm-commits] CVS: llvm/include/Support/ilist Message-ID: <200310152155.QAA07684@neo.cs.uiuc.edu> Changes in directory llvm/include/Support: ilist updated: 1.11 -> 1.12 --- Log message: This file uses assert and doesn't include anything which already #includes --- Diffs of the changes: (+1 -0) Index: llvm/include/Support/ilist diff -u llvm/include/Support/ilist:1.11 llvm/include/Support/ilist:1.12 --- llvm/include/Support/ilist:1.11 Tue Sep 30 13:37:23 2003 +++ llvm/include/Support/ilist Wed Oct 15 16:55:37 2003 @@ -33,6 +33,7 @@ #include #include +#include template class iplist; template class ilist_iterator; From lattner at cs.uiuc.edu Wed Oct 15 17:07:23 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 17:07:23 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/Makefile.programs Message-ID: <200310152206.RAA07754@neo.cs.uiuc.edu> Changes in directory llvm/test/Programs: Makefile.programs updated: 1.95 -> 1.96 --- Log message: Fix bugpoint-gccas --- Diffs of the changes: (+2 -1) Index: llvm/test/Programs/Makefile.programs diff -u llvm/test/Programs/Makefile.programs:1.95 llvm/test/Programs/Makefile.programs:1.96 --- llvm/test/Programs/Makefile.programs:1.95 Sun Sep 21 16:23:21 2003 +++ llvm/test/Programs/Makefile.programs Wed Oct 15 17:06:26 2003 @@ -214,7 +214,8 @@ $(LGCCAS) /dev/null -o /dev/null -debug-pass=Arguments > $@.1 2>&1 sed 's/Pass Arguments: //' < $@.1 > $@ Output/gccld-pass-args: $(TOOLS)/gccld - $(LGCCLD) /dev/null -o /dev/null -debug-pass=Arguments > $@.1 2>&1 + $(LLVMAS) < /dev/null > Output/gccld.test.bc + $(LGCCLD) Output/gccld.test.bc -o Output/gccld.test-out -debug-pass=Arguments > $@.1 2>&1 sed 's/Pass Arguments: //' < $@.1 > $@ From lattner at cs.uiuc.edu Wed Oct 15 17:10:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 17:10:02 2003 Subject: [llvm-commits] CVS: llvm/lib/CodeGen/RegAlloc/IGNode.h Message-ID: <200310152209.RAA07782@neo.cs.uiuc.edu> Changes in directory llvm/lib/CodeGen/RegAlloc: IGNode.h updated: 1.16 -> 1.17 --- Log message: #include vector which we will need here soon --- Diffs of the changes: (+1 -0) Index: llvm/lib/CodeGen/RegAlloc/IGNode.h diff -u llvm/lib/CodeGen/RegAlloc/IGNode.h:1.16 llvm/lib/CodeGen/RegAlloc/IGNode.h:1.17 --- llvm/lib/CodeGen/RegAlloc/IGNode.h:1.16 Tue Sep 23 23:29:52 2003 +++ llvm/lib/CodeGen/RegAlloc/IGNode.h Wed Oct 15 17:09:32 2003 @@ -25,6 +25,7 @@ #define IGNODE_H #include "LiveRange.h" +#include class RegClass; //---------------------------------------------------------------------------- From lattner at cs.uiuc.edu Wed Oct 15 17:10:11 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 17:10:11 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/SchedGraphCommon.h Message-ID: <200310152209.RAA07801@neo.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: SchedGraphCommon.h updated: 1.5 -> 1.6 --- Log message: We'll need this soon as well --- Diffs of the changes: (+1 -0) Index: llvm/include/llvm/CodeGen/SchedGraphCommon.h diff -u llvm/include/llvm/CodeGen/SchedGraphCommon.h:1.5 llvm/include/llvm/CodeGen/SchedGraphCommon.h:1.6 --- llvm/include/llvm/CodeGen/SchedGraphCommon.h:1.5 Tue Sep 30 13:37:44 2003 +++ llvm/include/llvm/CodeGen/SchedGraphCommon.h Wed Oct 15 17:09:46 2003 @@ -9,6 +9,7 @@ #define LLVM_CODEGEN_SCHEDGRAPHCOMMON_H #include "llvm/Value.h" +#include class SchedGraphEdge; class SchedGraphNode; From lattner at cs.uiuc.edu Wed Oct 15 17:11:05 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 17:11:05 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/DerivedTypes.h Message-ID: <200310152210.RAA07824@neo.cs.uiuc.edu> Changes in directory llvm/include/llvm: DerivedTypes.h updated: 1.44 -> 1.45 --- Log message: Vector is my friend, do you like vector? --- Diffs of the changes: (+1 -0) Index: llvm/include/llvm/DerivedTypes.h diff -u llvm/include/llvm/DerivedTypes.h:1.44 llvm/include/llvm/DerivedTypes.h:1.45 --- llvm/include/llvm/DerivedTypes.h:1.44 Thu Oct 9 15:35:09 2003 +++ llvm/include/llvm/DerivedTypes.h Wed Oct 15 17:10:10 2003 @@ -12,6 +12,7 @@ #define LLVM_DERIVED_TYPES_H #include "llvm/Type.h" +#include template class TypeMap; class FunctionValType; From lattner at cs.uiuc.edu Wed Oct 15 17:11:15 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Wed Oct 15 17:11:15 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/User.h Message-ID: <200310152210.RAA07831@neo.cs.uiuc.edu> Changes in directory llvm/include/llvm: User.h updated: 1.24 -> 1.25 --- Log message: lalala --- Diffs of the changes: (+1 -0) Index: llvm/include/llvm/User.h diff -u llvm/include/llvm/User.h:1.24 llvm/include/llvm/User.h:1.25 --- llvm/include/llvm/User.h:1.24 Sun Oct 12 22:29:26 2003 +++ llvm/include/llvm/User.h Wed Oct 15 17:09:57 2003 @@ -13,6 +13,7 @@ #define LLVM_USER_H #include "llvm/Value.h" +#include class User : public Value { User(const User &); // Do not implement From criswell at cs.uiuc.edu Wed Oct 15 20:44:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:44:01 2003 Subject: [llvm-commits] CVS: llvm/projects/sample/autoconf/ Message-ID: <200310160143.UAA03531@choi.cs.uiuc.edu> Changes in directory llvm/projects/sample/autoconf: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/projects/sample/autoconf added to the repository --- Diffs of the changes: (+0 -0) From criswell at cs.uiuc.edu Wed Oct 15 20:45:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:45:02 2003 Subject: [llvm-commits] CVS: llvm/projects/sample/autoconf/aclocal.m4 config.guess config.sub configure.ac install-sh ltmain.sh mkinstalldirs Message-ID: <200310160144.UAA03559@choi.cs.uiuc.edu> Changes in directory llvm/projects/sample/autoconf: aclocal.m4 added (r1.1) config.guess added (r1.1) config.sub added (r1.1) configure.ac added (r1.1) install-sh added (r1.1) ltmain.sh added (r1.1) mkinstalldirs added (r1.1) --- Log message: Adding autoconf support for the sample project. --- Diffs of the changes: (+15751 -0) Index: llvm/projects/sample/autoconf/aclocal.m4 diff -c /dev/null llvm/projects/sample/autoconf/aclocal.m4:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/aclocal.m4 Wed Oct 15 20:44:19 2003 *************** *** 0 **** --- 1,6168 ---- + # libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- + ## Copyright 1996, 1997, 1998, 1999, 2000, 2001 + ## Free Software Foundation, Inc. + ## Originally by Gordon Matzigkeit , 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 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, write to the Free Software + ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + ## + ## 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. + + # serial 47 AC_PROG_LIBTOOL + + + # AC_PROVIDE_IFELSE(MACRO-NAME, IF-PROVIDED, IF-NOT-PROVIDED) + # ----------------------------------------------------------- + # If this macro is not defined by Autoconf, define it here. + m4_ifdef([AC_PROVIDE_IFELSE], + [], + [m4_define([AC_PROVIDE_IFELSE], + [m4_ifdef([AC_PROVIDE_$1], + [$2], [$3])])]) + + + # AC_PROG_LIBTOOL + # --------------- + AC_DEFUN([AC_PROG_LIBTOOL], + [AC_REQUIRE([_AC_PROG_LIBTOOL])dnl + dnl If AC_PROG_CXX has already been expanded, run AC_LIBTOOL_CXX + dnl immediately, otherwise, hook it in at the end of AC_PROG_CXX. + AC_PROVIDE_IFELSE([AC_PROG_CXX], + [AC_LIBTOOL_CXX], + [define([AC_PROG_CXX], defn([AC_PROG_CXX])[AC_LIBTOOL_CXX + ])]) + dnl And a similar setup for Fortran 77 support + AC_PROVIDE_IFELSE([AC_PROG_F77], + [AC_LIBTOOL_F77], + [define([AC_PROG_F77], defn([AC_PROG_F77])[AC_LIBTOOL_F77 + ])]) + + dnl Quote A][M_PROG_GCJ so that aclocal doesn't bring it in needlessly. + dnl If either AC_PROG_GCJ or A][M_PROG_GCJ have already been expanded, run + dnl AC_LIBTOOL_GCJ immediately, otherwise, hook it in at the end of both. + AC_PROVIDE_IFELSE([AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ], + [AC_LIBTOOL_GCJ], + [ifdef([AC_PROG_GCJ], + [define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([A][M_PROG_GCJ], + [define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[AC_LIBTOOL_GCJ])]) + ifdef([LT_AC_PROG_GCJ], + [define([LT_AC_PROG_GCJ], + defn([LT_AC_PROG_GCJ])[AC_LIBTOOL_GCJ])])])]) + ])])# AC_PROG_LIBTOOL + + + # _AC_PROG_LIBTOOL + # ---------------- + AC_DEFUN([_AC_PROG_LIBTOOL], + [AC_REQUIRE([AC_LIBTOOL_SETUP])dnl + AC_BEFORE([$0],[AC_LIBTOOL_CXX])dnl + AC_BEFORE([$0],[AC_LIBTOOL_F77])dnl + AC_BEFORE([$0],[AC_LIBTOOL_GCJ])dnl + + # This can be used to rebuild libtool when needed + LIBTOOL_DEPS="$ac_aux_dir/ltmain.sh" + + # Always use our own libtool. + LIBTOOL='$(SHELL) $(top_builddir)/mklib' + AC_SUBST(LIBTOOL)dnl + + # Prevent multiple expansion + define([AC_PROG_LIBTOOL], []) + ])# _AC_PROG_LIBTOOL + + + # AC_LIBTOOL_SETUP + # ---------------- + AC_DEFUN([AC_LIBTOOL_SETUP], + [AC_PREREQ(2.50)dnl + AC_REQUIRE([AC_ENABLE_SHARED])dnl + AC_REQUIRE([AC_ENABLE_STATIC])dnl + AC_REQUIRE([AC_ENABLE_FAST_INSTALL])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_CANONICAL_BUILD])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_PROG_LD])dnl + AC_REQUIRE([AC_PROG_LD_RELOAD_FLAG])dnl + AC_REQUIRE([AC_PROG_NM])dnl + + AC_REQUIRE([AC_PROG_LN_S])dnl + AC_REQUIRE([AC_DEPLIBS_CHECK_METHOD])dnl + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + AC_REQUIRE([AC_OBJEXT])dnl + AC_REQUIRE([AC_EXEEXT])dnl + dnl + + AC_LIBTOOL_SYS_MAX_CMD_LEN + AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + AC_LIBTOOL_OBJDIR + + AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + _LT_AC_PROG_ECHO_BACKSLASH + + 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 + + # Sed substitution that helps us do robust quoting. It backslashifies + # metacharacters that are still active within double-quoted strings. + Xsed='sed -e s/^X//' + [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 avoid accidental globbing in evaled expressions + no_glob_subst='s/\*/\\\*/g' + + # Constants: + rm="rm -f" + + # Global variables: + default_ofile=mklib + can_build_shared=yes + + # All known linkers require a `.a' archive for static linking (except M$VC, + # which needs '.lib'). + libext=a + ltmain="$ac_aux_dir/ltmain.sh" + ofile="$default_ofile" + with_gnu_ld="$lt_cv_prog_gnu_ld" + + AC_CHECK_TOOL(AR, ar, false) + AC_CHECK_TOOL(RANLIB, ranlib, :) + AC_CHECK_TOOL(STRIP, strip, :) + + old_CC="$CC" + old_CFLAGS="$CFLAGS" + + # Set sane defaults for various variables + test -z "$AR" && AR=ar + test -z "$AR_FLAGS" && AR_FLAGS=cru + test -z "$AS" && AS=as + test -z "$CC" && CC=cc + test -z "$LTCC" && LTCC=$CC + test -z "$DLLTOOL" && DLLTOOL=dlltool + test -z "$LD" && LD=ld + test -z "$LN_S" && LN_S="ln -s" + test -z "$MAGIC_CMD" && MAGIC_CMD=file + test -z "$NM" && NM=nm + test -z "$SED" && SED=sed + test -z "$OBJDUMP" && OBJDUMP=objdump + test -z "$RANLIB" && RANLIB=: + test -z "$STRIP" && STRIP=: + test -z "$ac_objext" && ac_objext=o + + # Determine commands to create old-style static archives. + old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs$old_deplibs' + old_postinstall_cmds='chmod 644 $oldlib' + old_postuninstall_cmds= + + if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="\$RANLIB -t \$oldlib~$old_postinstall_cmds" + ;; + *) + old_postinstall_cmds="\$RANLIB \$oldlib~$old_postinstall_cmds" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" + fi + + # Only perform the check for file, if the check method requires it + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + AC_PATH_MAGIC + fi + ;; + esac + + AC_PROVIDE_IFELSE([AC_LIBTOOL_DLOPEN], enable_dlopen=yes, enable_dlopen=no) + AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], + enable_win32_dll=yes, enable_win32_dll=no) + + AC_ARG_ENABLE([libtool-lock], + [AC_HELP_STRING([--disable-libtool-lock], + [avoid locking (might break parallel builds)])]) + test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + + AC_ARG_WITH([pic], + [AC_HELP_STRING([--with-pic], + [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], + [pic_mode="$withval"], + [pic_mode=default]) + test -z "$pic_mode" && pic_mode=default + + # Use C for the default configuration in the libtool script + tagname= + AC_LIBTOOL_LANG_C_CONFIG + _LT_AC_TAGCONFIG + ])# AC_LIBTOOL_SETUP + + + # _LT_AC_SYS_COMPILER + # ------------------- + AC_DEFUN([_LT_AC_SYS_COMPILER], + [AC_REQUIRE([AC_PROG_CC])dnl + + # If no C compiler was specified, use CC. + LTCC=${LTCC-"$CC"} + + # Allow CC to be a program name with arguments. + compiler=$CC + ])# _LT_AC_SYS_COMPILER + + + # _LT_AC_SYS_LIBPATH_AIX + # ---------------------- + # 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. + AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX], + [AC_LINK_IFELSE(AC_LANG_PROGRAM,[ + aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } + }'` + # Check for a 64-bit object if we didn't find anything. + if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } + }'`; fi],[]) + if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + ])# _LT_AC_SYS_LIBPATH_AIX + + + # _LT_AC_SHELL_INIT(ARG) + # ---------------------- + AC_DEFUN([_LT_AC_SHELL_INIT], + [ifdef([AC_DIVERSION_NOTICE], + [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)], + [AC_DIVERT_PUSH(NOTICE)]) + $1 + AC_DIVERT_POP + ])# _LT_AC_SHELL_INIT + + + # _LT_AC_PROG_ECHO_BACKSLASH + # -------------------------- + # Add some code to the start of the generated configure script which + # will find an echo command which doesn't interpret backslashes. + AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH], + [_LT_AC_SHELL_INIT([ + # Check that we are running under the correct shell. + SHELL=${CONFIG_SHELL-/bin/sh} + + case X$ECHO in + X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','` + ;; + esac + + echo=${ECHO-echo} + if test "X[$]1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test "X[$]1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : + elif test "X`($echo '\t') 2>/dev/null`" = 'X\t' ; then + # Yippee, $echo works! + : + else + # Restart under the correct shell. + exec $SHELL "[$]0" --no-reexec ${1+"[$]@"} + fi + + if test "X[$]1" = X--fallback-echo; then + # used as fallback echo + shift + cat </dev/null && + echo_test_string="`eval $cmd`" && + (test "X$echo_test_string" = "X$echo_test_string") 2>/dev/null + then + break + fi + done + fi + + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$echo" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`(print -r '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`(print -r "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + echo='print -r' + elif (test -f /bin/ksh || test -f /bin/ksh$ac_exeext) && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"} + else + # Try using printf. + echo='printf %s\n' + if test "X`($echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + echo="$CONFIG_SHELL [$]0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + echo="$CONFIG_SHELL [$]0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do + if (test "X$echo_test_string" = "X`eval $cmd`") 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "[$]0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"} + else + # Oops. We lost completely, so just stick with echo. + echo=echo + fi + fi + fi + fi + fi + fi + + # Copy echo and quote the copy suitably for passing to libtool from + # the Makefile, instead of quoting the original, which is used later. + ECHO=$echo + if test "X$ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then + ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo" + fi + + AC_SUBST(ECHO) + ])])# _LT_AC_PROG_ECHO_BACKSLASH + + + # _LT_AC_LOCK + # ----------- + AC_DEFUN([_LT_AC_LOCK], + [AC_ARG_ENABLE([libtool-lock], + [AC_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 __oline__ "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-*linux*|ppc*-*linux*|powerpc*-*linux*|s390*-*linux*|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-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*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-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*) + 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_TRY_LINK([],[],[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 + ;; + AC_PROVIDE_IFELSE([AC_LIBTOOL_WIN32_DLL], + [*-*-cygwin* | *-*-mingw* | *-*-pw32*) + AC_CHECK_TOOL(DLLTOOL, dlltool, false) + AC_CHECK_TOOL(AS, as, false) + AC_CHECK_TOOL(OBJDUMP, objdump, false) + ;; + ]) + esac + + need_locks="$enable_libtool_lock" + + ])# _LT_AC_LOCK + + + # AC_LIBTOOL_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, + # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) + # ---------------------------------------------------------------- + # Check whether the given compiler option works + AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], + [AC_CACHE_CHECK([$1], [$2], + [$2=no + ifelse([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + printf "$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}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $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 + if test ! -s conftest.err; then + $2=yes + fi + fi + $rm conftest* + ]) + + if test x"[$]$2" = xyes; then + ifelse([$5], , :, [$5]) + else + ifelse([$6], , :, [$6]) + fi + ])# AC_LIBTOOL_COMPILER_OPTION + + + # AC_LIBTOOL_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, + # [ACTION-SUCCESS], [ACTION-FAILURE]) + # ------------------------------------------------------------ + # Check whether the given compiler option works + AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], + [AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + printf "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The compiler 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 + else + $2=yes + fi + fi + $rm conftest* + LDFLAGS="$save_LDFLAGS" + ]) + + if test x"[$]$2" = xyes; then + ifelse([$4], , :, [$4]) + else + ifelse([$5], , :, [$5]) + fi + ])# AC_LIBTOOL_LINKER_OPTION + + + # AC_LIBTOOL_SYS_MAX_CMD_LEN + # -------------------------- + AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], + [# 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 + testring="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*) + # 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; + ;; + + *) + # 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"`$CONFIG_SHELL [$]0 --fallback-echo "X$testring" 2>/dev/null` \ + = "XX$testring") >/dev/null 2>&1 && + new_result=`expr "X$testring" : ".*" 2>&1` && + lt_cv_sys_max_cmd_len=$new_result && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + testring=$testring$testring + done + testring= + # 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` + ;; + 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 + ])# AC_LIBTOOL_SYS_MAX_CMD_LEN + + + # _LT_AC_CHECK_DLFCN + # -------------------- + AC_DEFUN([_LT_AC_CHECK_DLFCN], + [AC_CHECK_HEADERS(dlfcn.h)dnl + ])# _LT_AC_CHECK_DLFCN + + + # _LT_AC_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, + # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) + # ------------------------------------------------------------------ + AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF], + [AC_REQUIRE([_LT_AC_CHECK_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 < + #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 + + #ifdef __cplusplus + extern "C" void exit (int); + #endif + + void fnord() { int i=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; + /* dlclose (self); */ + } + + exit (status); + }] + EOF + if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) $1 ;; + x$lt_dlneed_uscore) $2 ;; + x$lt_unknown|x*) $3 ;; + esac + else : + # compilation failed + $3 + fi + fi + rm -fr conftest* + ])# _LT_AC_TRY_DLOPEN_SELF + + + # AC_LIBTOOL_DLOPEN_SELF + # ------------------- + AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], + [AC_REQUIRE([_LT_AC_CHECK_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*) + 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="-dld"], + [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="-dld"]) + ]) + ]) + ]) + ]) + ]) + ;; + 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" + 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_AC_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 + LDFLAGS="$LDFLAGS $link_static_flag" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_AC_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 + ])# AC_LIBTOOL_DLOPEN_SELF + + + # AC_LIBTOOL_PROG_CC_C_O([TAGNAME]) + # --------------------------------- + # Check to see if options -c and -o are simultaneously supported by compiler + AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O], + [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)], + [_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no + $rm -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + printf "$lt_simple_compile_test_code" > conftest.$ac_ext + + # According to Tom Tromey, Ian Lance Taylor reported there are C compilers + # that will create temporary files in the current directory regardless of + # the output directory. Thus, making CWD read-only will cause this test + # to fail, enabling locking or at least warning the user not to do parallel + # builds. + chmod -w . + + 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}? :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $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:__oline__: \$? = $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 + if test ! -s out/conftest.err; then + _LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes + fi + fi + chmod u+w . + $rm conftest* out/* + rmdir out + cd .. + rmdir conftest + $rm conftest* + ]) + ])# AC_LIBTOOL_PROG_CC_C_O + + + # AC_LIBTOOL_SYS_HARD_LINK_LOCKS([TAGNAME]) + # ----------------------------------------- + # Check to see if we can do hard links to lock some files if needed + AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], + [AC_REQUIRE([_LT_AC_LOCK])dnl + + hard_links="nottested" + if test "$_LT_AC_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 + ])# AC_LIBTOOL_SYS_HARD_LINK_LOCKS + + + # AC_LIBTOOL_OBJDIR + # ----------------- + AC_DEFUN([AC_LIBTOOL_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 + ])# AC_LIBTOOL_OBJDIR + + + # AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH([TAGNAME]) + # ---------------------------------------------- + # Check hardcoding attributes. + AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], + [AC_MSG_CHECKING([how to hardcode library paths into programs]) + _LT_AC_TAGVAR(hardcode_action, $1)= + if test -n "$_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)" || \ + test -n "$_LT_AC_TAGVAR(runpath_var $1)" || \ + test "X$_LT_AC_TAGVAR(hardcode_automatic, $1)"="Xyes" ; then + + # We can hardcode non-existant directories. + if test "$_LT_AC_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_AC_TAGVAR(hardcode_shlibpath_var, $1)" != no && + test "$_LT_AC_TAGVAR(hardcode_minus_L, $1)" != no; then + # Linking always hardcodes the temporary library directory. + _LT_AC_TAGVAR(hardcode_action, $1)=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + _LT_AC_TAGVAR(hardcode_action, $1)=immediate + fi + else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + _LT_AC_TAGVAR(hardcode_action, $1)=unsupported + fi + AC_MSG_RESULT([$_LT_AC_TAGVAR(hardcode_action, $1)]) + + if test "$_LT_AC_TAGVAR(hardcode_action, $1)" = relink; 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 + ])# AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH + + + # AC_LIBTOOL_SYS_LIB_STRIP + # ------------------------ + AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP], + [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" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac + fi + ])# AC_LIBTOOL_SYS_LIB_STRIP + + + # AC_LIBTOOL_SYS_DYNAMIC_LINKER + # ----------------------------- + # PORTME Fill in your ld.so characteristics + AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER], + [AC_MSG_CHECKING([dynamic linker characteristics]) + library_names_spec= + libname_spec='lib$name' + soname_spec= + shrext=".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" + if test "$GCC" = yes; then + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | grep ';' >/dev/null ; then + # 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. + 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 + else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" + fi + 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 + 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' + ;; + + aix4* | aix5*) + version_type=linux + 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*) + 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=`$echo "X$lib" | $Xsed -e '\''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' + ;; + + beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + + bsdi4*) + version_type=linux + 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*) + version_type=windows + shrext=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32*) + 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' + 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="/lib /lib/w32api /usr/lib /usr/local/lib" + ;; + mingw*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if echo "$sys_lib_search_path_spec" | [grep ';[c-zC-Z]:/' >/dev/null]; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + 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 + ;; + 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 + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # 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 + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. + library_names_spec='${libname}${release}${versuffix}$shared_ext ${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='$(test .$module = .yes && echo .so || echo .dylib)' + # Apple's gcc prints 'gcc -print-search-dirs' doesn't operate the same. + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + sys_lib_search_path_spec=`$CC -print-search-dirs | tr "\n" "$PATH_SEPARATOR" | sed -e 's/libraries:/@libraries:/' | tr "@" "\n" | grep "^libraries:" | sed -e "s/^libraries://" -e "s,=/,/,g" -e "s,$PATH_SEPARATOR, ,g" -e "s,.*,& /lib /usr/lib /usr/local/lib,g"` + fi + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + + dgux*) + version_type=linux + 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 + ;; + + freebsd1*) + dynamic_linker=no + ;; + + freebsd*) + objformat=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout` + 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 + ;; + *) # from 3.2 on + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + esac + ;; + + gnu*) + version_type=linux + 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 + 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='.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='.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='.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' + ;; + + irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + 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 Linux ELF. + linux*) + version_type=linux + 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 + # 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 + + # 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}${release}${shared_ext} ${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 + 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=linux + 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 + ;; + + openbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + 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=".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" + ;; + + sco3.2v5*) + version_type=osf + 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 + ;; + + solaris*) + version_type=linux + 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.2uw2* | sysv4.3* | sysv5*) + version_type=linux + 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 + export_dynamic_flag_spec='${wl}-Blargedynsym' + 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 + 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 + ;; + + uts4*) + version_type=linux + 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 + ])# AC_LIBTOOL_SYS_DYNAMIC_LINKER + + + # _LT_AC_TAGCONFIG + # ---------------- + AC_DEFUN([_LT_AC_TAGCONFIG], + [AC_ARG_WITH([tags], + [AC_HELP_STRING([--with-tags@<:@=TAGS@:>@], + [include additional configurations @<:@automatic@:>@])], + [tagnames="$withval"]) + + if test -f "$ltmain" && test -n "$tagnames"; then + if test ! -f "${ofile}"; then + AC_MSG_WARN([output file `$ofile' does not exist]) + fi + + if test -z "$LTCC"; then + eval "`$SHELL ${ofile} --config | grep '^LTCC='`" + if test -z "$LTCC"; then + AC_MSG_WARN([output file `$ofile' does not look like a libtool script]) + else + AC_MSG_WARN([using `LTCC=$LTCC', extracted from `$ofile']) + fi + fi + + # Extract list of available tagged configurations in $ofile. + # Note that this assumes the entire list is on one line. + available_tags=`grep "^available_tags=" "${ofile}" | $SED -e 's/available_tags=\(.*$\)/\1/' -e 's/\"//g'` + + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for tagname in $tagnames; do + IFS="$lt_save_ifs" + # Check whether tagname contains only valid characters + case `$echo "X$tagname" | $Xsed -e 's:[[-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890,/]]::g'` in + "") ;; + *) AC_MSG_ERROR([invalid tag name: $tagname]) + ;; + esac + + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "${ofile}" > /dev/null + then + AC_MSG_ERROR([tag name \"$tagname\" already exists]) + fi + + # Update the list of available tags. + if test -n "$tagname"; then + echo appending configuration tag \"$tagname\" to $ofile + + case $tagname in + CXX) + if test -n "$CXX" && test "X$CXX" != "Xno"; then + AC_LIBTOOL_LANG_CXX_CONFIG + else + tagname="" + fi + ;; + + F77) + if test -n "$F77" && test "X$F77" != "Xno"; then + AC_LIBTOOL_LANG_F77_CONFIG + else + tagname="" + fi + ;; + + GCJ) + if test -n "$GCJ" && test "X$GCJ" != "Xno"; then + AC_LIBTOOL_LANG_GCJ_CONFIG + else + tagname="" + fi + ;; + + RC) + AC_LIBTOOL_LANG_RC_CONFIG + ;; + + *) + AC_MSG_ERROR([Unsupported tag name: $tagname]) + ;; + esac + + # Append the new tag name to the list of available tags. + if test -n "$tagname" ; then + available_tags="$available_tags $tagname" + fi + fi + done + IFS="$lt_save_ifs" + + # Now substitute the updated list of available tags. + if eval "sed -e 's/^available_tags=.*\$/available_tags=\"$available_tags\"/' \"$ofile\" > \"${ofile}T\""; then + mv "${ofile}T" "$ofile" + chmod +x "$ofile" + else + rm -f "${ofile}T" + AC_MSG_ERROR([unable to update list of available tagged configurations.]) + fi + fi + ])# _LT_AC_TAGCONFIG + + + # AC_LIBTOOL_DLOPEN + # ----------------- + # enable checks for dlopen support + AC_DEFUN([AC_LIBTOOL_DLOPEN], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP]) + ])# AC_LIBTOOL_DLOPEN + + + # AC_LIBTOOL_WIN32_DLL + # -------------------- + # declare package support for building win32 dll's + AC_DEFUN([AC_LIBTOOL_WIN32_DLL], + [AC_BEFORE([$0], [AC_LIBTOOL_SETUP]) + ])# AC_LIBTOOL_WIN32_DLL + + + # AC_ENABLE_SHARED([DEFAULT]) + # --------------------------- + # implement the --enable-shared flag + # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. + AC_DEFUN([AC_ENABLE_SHARED], + [define([AC_ENABLE_SHARED_DEFAULT], ifelse($1, no, no, yes))dnl + AC_ARG_ENABLE([shared], + [AC_HELP_STRING([--enable-shared@<:@=PKGS@:>@], + [build shared libraries @<:@default=]AC_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=]AC_ENABLE_SHARED_DEFAULT) + ])# AC_ENABLE_SHARED + + + # AC_DISABLE_SHARED + # ----------------- + #- set the default shared flag to --disable-shared + AC_DEFUN([AC_DISABLE_SHARED], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_ENABLE_SHARED(no) + ])# AC_DISABLE_SHARED + + + # AC_ENABLE_STATIC([DEFAULT]) + # --------------------------- + # implement the --enable-static flag + # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. + AC_DEFUN([AC_ENABLE_STATIC], + [define([AC_ENABLE_STATIC_DEFAULT], ifelse($1, no, no, yes))dnl + AC_ARG_ENABLE([static], + [AC_HELP_STRING([--enable-static@<:@=PKGS@:>@], + [build static libraries @<:@default=]AC_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=]AC_ENABLE_STATIC_DEFAULT) + ])# AC_ENABLE_STATIC + + + # AC_DISABLE_STATIC + # ----------------- + # set the default static flag to --disable-static + AC_DEFUN([AC_DISABLE_STATIC], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_ENABLE_STATIC(no) + ])# AC_DISABLE_STATIC + + + # AC_ENABLE_FAST_INSTALL([DEFAULT]) + # --------------------------------- + # implement the --enable-fast-install flag + # DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'. + AC_DEFUN([AC_ENABLE_FAST_INSTALL], + [define([AC_ENABLE_FAST_INSTALL_DEFAULT], ifelse($1, no, no, yes))dnl + AC_ARG_ENABLE([fast-install], + [AC_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], + [optimize for fast installation @<:@default=]AC_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=]AC_ENABLE_FAST_INSTALL_DEFAULT) + ])# AC_ENABLE_FAST_INSTALL + + + # AC_DISABLE_FAST_INSTALL + # ----------------------- + # set the default to --disable-fast-install + AC_DEFUN([AC_DISABLE_FAST_INSTALL], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_ENABLE_FAST_INSTALL(no) + ])# AC_DISABLE_FAST_INSTALL + + + # AC_LIBTOOL_PICMODE([MODE]) + # -------------------------- + # implement the --with-pic flag + # MODE is either `yes' or `no'. If omitted, it defaults to `both'. + AC_DEFUN([AC_LIBTOOL_PICMODE], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + pic_mode=ifelse($#,1,$1,default) + ])# AC_LIBTOOL_PICMODE + + + # AC_PROG_EGREP + # ------------- + # This is predefined starting with Autoconf 2.54, so this conditional + # definition can be removed once we require Autoconf 2.54 or later. + m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP], + [AC_CACHE_CHECK([for egrep], [ac_cv_prog_egrep], + [if echo a | (grep -E '(a|b)') >/dev/null 2>&1 + then ac_cv_prog_egrep='grep -E' + else ac_cv_prog_egrep='egrep' + fi]) + EGREP=$ac_cv_prog_egrep + AC_SUBST([EGREP]) + ])]) + + + # AC_PATH_TOOL_PREFIX + # ------------------- + # find a file program which can recognise shared library + AC_DEFUN([AC_PATH_TOOL_PREFIX], + [AC_REQUIRE([AC_PROG_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="ifelse([$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 <&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 at gnu.org + + 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 + ])# AC_PATH_TOOL_PREFIX + + + # AC_PATH_MAGIC + # ------------- + # find a file program which can recognise a shared library + AC_DEFUN([AC_PATH_MAGIC], + [AC_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 + AC_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) + else + MAGIC_CMD=: + fi + fi + ])# AC_PATH_MAGIC + + + # AC_PROG_LD + # ---------- + # find the path to the GNU or non-GNU linker + AC_DEFUN([AC_PROG_LD], + [AC_ARG_WITH([gnu-ld], + [AC_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]) + AC_REQUIRE([LT_AC_PROG_SED])dnl + AC_REQUIRE([AC_PROG_CC])dnl + AC_REQUIRE([AC_CANONICAL_HOST])dnl + AC_REQUIRE([AC_CANONICAL_BUILD])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 path 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 GNU ld's 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; 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)/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 + ;; + + 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]) 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 + ;; + + irix5* | irix6* | nonstopux*) + case $host_os in + irix5* | nonstopux*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" + ;; + *) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[[1234]] dynamic lib MIPS - version 1" + ;; + esac + lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` + lt_cv_deplibs_check_method=pass_all + ;; + + # This must be Linux ELF. + linux*) + case $host_cpu in + alpha* | hppa* | i*86 | ia64* | m68* | mips | mipsel | powerpc* | sparc* | s390* | sh*) + lt_cv_deplibs_check_method=pass_all ;; + *) + # glibc up to 2.1.1 does not perform some relocations on ARM + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; + esac + lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` + ;; + + 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=unknown + ;; + + openbsd*) + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB shared object' + else + lt_cv_deplibs_check_method='file_magic OpenBSD.* shared library' + fi + ;; + + osf3* | osf4* | osf5*) + # this will be overridden with pass_all, but let us keep it just in case + lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' + lt_cv_file_magic_test_file=/shlib/libc.so + lt_cv_deplibs_check_method=pass_all + ;; + + sco3.2v5*) + lt_cv_deplibs_check_method=pass_all + ;; + + solaris*) + lt_cv_deplibs_check_method=pass_all + lt_cv_file_magic_test_file=/lib/libc.so + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + 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 + ;; + esac + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ]) + 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 + ])# AC_DEPLIBS_CHECK_METHOD + + + # AC_PROG_NM + # ---------- + # find the path to a BSD-compatible name lister + AC_DEFUN([AC_PROG_NM], + [AC_CACHE_CHECK([for BSD-compatible nm], lt_cv_path_NM, + [if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" + else + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/${ac_tool_prefix}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" + test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm + fi]) + NM="$lt_cv_path_NM" + ])# AC_PROG_NM + + + # AC_CHECK_LIBM + # ------------- + # check for math library + AC_DEFUN([AC_CHECK_LIBM], + [AC_REQUIRE([AC_CANONICAL_HOST])dnl + LIBM= + case $host in + *-*-beos* | *-*-cygwin* | *-*-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_CHECK_LIBM + + + # AC_LIBLTDL_CONVENIENCE([DIRECTORY]) + # ----------------------------------- + # sets LIBLTDL to the link flags for the libltdl convenience library and + # LTDLINCL to the include flags for the libltdl header and adds + # --enable-ltdl-convenience to the configure arguments. Note that LIBLTDL + # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If + # DIRECTORY is not provided, it is assumed to be `libltdl'. LIBLTDL will + # be prefixed with '${top_builddir}/' and LTDLINCL will be prefixed with + # '${top_srcdir}/' (note the single quotes!). If your package is not + # flat and you're not using automake, define top_builddir and + # top_srcdir appropriately in the Makefiles. + AC_DEFUN([AC_LIBLTDL_CONVENIENCE], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + case $enable_ltdl_convenience in + no) AC_MSG_ERROR([this package needs a convenience libltdl]) ;; + "") enable_ltdl_convenience=yes + ac_configure_args="$ac_configure_args --enable-ltdl-convenience" ;; + esac + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdlc.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" + ])# AC_LIBLTDL_CONVENIENCE + + + # AC_LIBLTDL_INSTALLABLE([DIRECTORY]) + # ----------------------------------- + # sets LIBLTDL to the link flags for the libltdl installable library and + # LTDLINCL to the include flags for the libltdl header and adds + # --enable-ltdl-install to the configure arguments. Note that LIBLTDL + # and LTDLINCL are not AC_SUBSTed, nor is AC_CONFIG_SUBDIRS called. If + # DIRECTORY is not provided and an installed libltdl is not found, it is + # assumed to be `libltdl'. LIBLTDL will be prefixed with '${top_builddir}/' + # and LTDLINCL will be prefixed with '${top_srcdir}/' (note the single + # quotes!). If your package is not flat and you're not using automake, + # define top_builddir and top_srcdir appropriately in the Makefiles. + # In the future, this macro may have to be called after AC_PROG_LIBTOOL. + AC_DEFUN([AC_LIBLTDL_INSTALLABLE], + [AC_BEFORE([$0],[AC_LIBTOOL_SETUP])dnl + AC_CHECK_LIB(ltdl, lt_dlinit, + [test x"$enable_ltdl_install" != xyes && enable_ltdl_install=no], + [if test x"$enable_ltdl_install" = xno; then + AC_MSG_WARN([libltdl not installed, but installation disabled]) + else + enable_ltdl_install=yes + fi + ]) + if test x"$enable_ltdl_install" = x"yes"; then + ac_configure_args="$ac_configure_args --enable-ltdl-install" + LIBLTDL='${top_builddir}/'ifelse($#,1,[$1],['libltdl'])/libltdl.la + LTDLINCL='-I${top_srcdir}/'ifelse($#,1,[$1],['libltdl']) + else + ac_configure_args="$ac_configure_args --enable-ltdl-install=no" + LIBLTDL="-lltdl" + LTDLINCL= + fi + # For backwards non-gettext consistent compatibility... + INCLTDL="$LTDLINCL" + ])# AC_LIBLTDL_INSTALLABLE + + + # AC_LIBTOOL_CXX + # -------------- + # enable support for C++ libraries + AC_DEFUN([AC_LIBTOOL_CXX], + [AC_REQUIRE([_LT_AC_LANG_CXX]) + ])# AC_LIBTOOL_CXX + + + # _LT_AC_LANG_CXX + # --------------- + AC_DEFUN([_LT_AC_LANG_CXX], + [AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AC_PROG_CXXCPP]) + _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,CXX" | sed 's/^,//'`]) + ])# _LT_AC_LANG_CXX + + + # AC_LIBTOOL_F77 + # -------------- + # enable support for Fortran 77 libraries + AC_DEFUN([AC_LIBTOOL_F77], + [AC_REQUIRE([_LT_AC_LANG_F77]) + ])# AC_LIBTOOL_F77 + + + # _LT_AC_LANG_F77 + # --------------- + AC_DEFUN([_LT_AC_LANG_F77], + [AC_REQUIRE([AC_PROG_F77]) + _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,F77" | sed 's/^,//'`]) + ])# _LT_AC_LANG_F77 + + + # AC_LIBTOOL_GCJ + # -------------- + # enable support for GCJ libraries + AC_DEFUN([AC_LIBTOOL_GCJ], + [AC_REQUIRE([_LT_AC_LANG_GCJ]) + ])# AC_LIBTOOL_GCJ + + + # _LT_AC_LANG_GCJ + # --------------- + AC_DEFUN([_LT_AC_LANG_GCJ], + [AC_PROVIDE_IFELSE([AC_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],[], + [AC_PROVIDE_IFELSE([LT_AC_PROG_GCJ],[], + [ifdef([AC_PROG_GCJ],[AC_REQUIRE([AC_PROG_GCJ])], + [ifdef([A][M_PROG_GCJ],[AC_REQUIRE([A][M_PROG_GCJ])], + [AC_REQUIRE([A][C_PROG_GCJ_OR_A][M_PROG_GCJ])])])])])]) + _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,GCJ" | sed 's/^,//'`]) + ])# _LT_AC_LANG_GCJ + + + # AC_LIBTOOL_RC + # -------------- + # enable support for Windows resource files + AC_DEFUN([AC_LIBTOOL_RC], + [AC_REQUIRE([LT_AC_PROG_RC]) + _LT_AC_SHELL_INIT([tagnames=`echo "$tagnames,RC" | sed 's/^,//'`]) + ])# AC_LIBTOOL_RC + + + # AC_LIBTOOL_LANG_C_CONFIG + # ------------------------ + # Ensure that the configuration vars for the C compiler are + # suitably defined. Those variables are subsequently used by + # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. + AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG], [_LT_AC_LANG_C_CONFIG]) + AC_DEFUN([_LT_AC_LANG_C_CONFIG], + [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_AC_TAGVAR(objext, $1)=$objext + + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;\n" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(){return(0);}\n' + + _LT_AC_SYS_COMPILER + + # + # Check for any special shared library compilation flags. + # + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)= + if test "$GCC" = no; then + case $host_os in + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_cc_shlib, $1)='-belf' + ;; + esac + fi + if test -n "$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)"; then + AC_MSG_WARN([`$CC' requires `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to build shared libraries]) + if echo "$old_CC $old_CFLAGS " | grep "[[ ]]$]_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)[[[ ]]" >/dev/null; then : + else + AC_MSG_WARN([add `$_LT_AC_TAGVAR(lt_prog_cc_shlib, $1)' to the CC or CFLAGS env variable and reconfigure]) + _LT_AC_TAGVAR(lt_cv_prog_cc_can_build_shared, $1)=no + fi + fi + + + # + # Check to make sure the static flag actually works. + # + AC_LIBTOOL_LINKER_OPTION([if $compiler static flag $_LT_AC_TAGVAR(lt_prog_compiler_static, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_static_works, $1), + $_LT_AC_TAGVAR(lt_prog_compiler_static, $1), + [], + [_LT_AC_TAGVAR(lt_prog_compiler_static, $1)=]) + + + ## 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... + AC_LIBTOOL_PROG_COMPILER_NO_RTTI($1) + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_DLOPEN_SELF($1) + + # Report which librarie types wil 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 + ;; + + aix4*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + darwin* | rhapsody*) + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. Also zsh mangles + # `"' quotes if we put them in here... so don't! + output_verbose_link_cmd='echo' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring' + _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + 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]) + + AC_LIBTOOL_CONFIG($1) + + AC_LANG_POP + CC="$lt_save_CC" + ])# AC_LIBTOOL_LANG_C_CONFIG + + + # AC_LIBTOOL_LANG_CXX_CONFIG + # -------------------------- + # Ensure that the configuration vars for the C compiler are + # suitably defined. Those variables are subsequently used by + # AC_LIBTOOL_CONFIG to write the compiler configuration to `libtool'. + AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG], [_LT_AC_LANG_CXX_CONFIG(CXX)]) + AC_DEFUN([_LT_AC_LANG_CXX_CONFIG], + [AC_LANG_PUSH(C++) + AC_REQUIRE([AC_PROG_CXX]) + AC_REQUIRE([AC_PROG_CXXCPP]) + + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds + _LT_AC_TAGVAR(no_undefined_flag, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + + # Dependencies to place before and after the object being linked: + _LT_AC_TAGVAR(predep_objects, $1)= + _LT_AC_TAGVAR(postdep_objects, $1)= + _LT_AC_TAGVAR(predeps, $1)= + _LT_AC_TAGVAR(postdeps, $1)= + _LT_AC_TAGVAR(compiler_lib_search_path, $1)= + + # Source file extension for C++ test sources. + ac_ext=cc + + # Object file extension for compiled C++ test sources. + objext=o + _LT_AC_TAGVAR(objext, $1)=$objext + + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;\n" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }\n' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + _LT_AC_SYS_COMPILER + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + 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 + 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 + unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + _LT_AC_TAGVAR(compiler, $1)=$CC + cc_basename=`$echo X"$compiler" | $Xsed -e 's%^.*/%%'` + + # We don't want -fno-exception wen compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + else + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + AC_PROG_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared $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 "\-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_AC_TAGVAR(ld_shlibs, $1)=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aix4* | aix5*) + 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]].*|aix5*) + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + 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 + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + darwin* | rhapsody*) + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + esac + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -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' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' + + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + fi + ;; + + dgux*) + case $cc_basename in + ec++) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + ghcx) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before switch to ELF + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + freebsd-elf*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + freebsd*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + ;; + gnu*) + ;; + hpux9*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + _LT_AC_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; echo $list' + ;; + *) + if test "$GXX" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + esac + fi + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + *) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + ;; + aCC) + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_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; echo $list' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case "$host_cpu" in + ia64*|hppa*64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $linker_flags $libobjs $deplibs' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + irix5* | irix6*) + case $cc_basename in + CC) + # SGI C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${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_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` -o $lib' + fi + fi + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + esac + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + linux*) + 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_AC_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_AC_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; echo $list' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath,$libdir' + _LT_AC_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_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc) + # Intel C++ + with_gnu_ld=yes + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic' + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + cxx) + # Compaq C++ + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + esac + ;; + lynxos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + m88k*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + mvs*) + case $cc_basename in + cxx) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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::"' + ;; + osf3*) + 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' + + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && echo ${wl}-set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_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" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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 "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + 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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + _LT_AC_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' + ;; + RCC) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + cxx) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib' + _LT_AC_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 $objdir/so_locations -o $lib~ + $rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + _LT_AC_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=`echo $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; echo $list' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${objdir}/so_locations -o $lib' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_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 "\-L"' + + else + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + ;; + psos*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + sco*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case $cc_basename in + CC) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + lcc) + # Lucid + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -zdefs' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -nolib -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + _LT_AC_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} -nolib ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$rm $lib.exp' + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The C++ compiler is used as linker so we must use $wl + # flag to pass the commands to the underlying system + # linker. + # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + # 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 -G $CFLAGS -v conftest.$objext 2>&1 | grep "\-[[LR]]"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; echo $list' + + # 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_AC_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_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_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs' + if $CC --version | grep -v '^2\.7' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_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 \"\-L\"" + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + _LT_AC_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 \"\-L\"" + fi + + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir' + fi + ;; + esac + ;; + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + ;; + vxworks*) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + *) + # FIXME: insert proper C++ library support + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) + test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no + + _LT_AC_TAGVAR(GCC, $1)="$GXX" + _LT_AC_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... + AC_LIBTOOL_POSTDEP_PREDEP($1) + AC_LIBTOOL_PROG_COMPILER_PIC($1) + AC_LIBTOOL_PROG_CC_C_O($1) + AC_LIBTOOL_SYS_HARD_LINK_LOCKS($1) + AC_LIBTOOL_PROG_LD_SHLIBS($1) + AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH($1) + AC_LIBTOOL_SYS_LIB_STRIP + AC_LIBTOOL_SYS_DYNAMIC_LINKER($1) + AC_LIBTOOL_DLOPEN_SELF($1) + + AC_LIBTOOL_CONFIG($1) + + AC_LANG_POP + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ldcxx=$with_gnu_ld + 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 + ])# AC_LIBTOOL_LANG_CXX_CONFIG + + # AC_LIBTOOL_POSTDEP_PREDEP([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. + AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP],[ + 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... + ifelse([$1],[],[cat > conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext < conftest.$ac_ext <> "$cfgfile" + ifelse([$1], [], + [#! $SHELL + + # `$echo "$cfgfile" | sed 's%^.*/%%'` - Provide generalized library-building support services. + # Generated automatically by $PROGRAM (GNU $PACKAGE $VERSION$TIMESTAMP) + # NOTE: Changes made to this file will be lost: look at ltmain.sh. + # + # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 + # Free Software Foundation, Inc. + # + # This file is part of GNU Libtool: + # Originally by Gordon Matzigkeit , 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 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, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # 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. + + # 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 s/^X//" + + # The HP-UX ksh and POSIX shell print the target directory to stdout + # if CDPATH is set. + if test "X\${CDPATH+set}" = Xset; then CDPATH=:; export CDPATH; fi + + # The names of the tagged configurations supported by this script. + available_tags= + + # ### BEGIN LIBTOOL CONFIG], + [# ### BEGIN LIBTOOL TAG CONFIG: $tagname]) + + # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: + + # Shell to use when invoking shell scripts. + SHELL=$lt_SHELL + + # Whether or not to build shared libraries. + build_libtool_libs=$enable_shared + + # Whether or not to build static libraries. + build_old_libs=$enable_static + + # Whether or not to add -lc for building shared libraries. + build_libtool_need_lc=$_LT_AC_TAGVAR(archive_cmds_need_lc, $1) + + # Whether or not to disallow shared libs when runtime libs are static + allow_libtool_libs_with_static_runtimes=$_LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1) + + # Whether or not to optimize for fast installation. + fast_install=$enable_fast_install + + # The host system. + host_alias=$host_alias + host=$host + + # An echo program that does not interpret backslashes. + echo=$lt_echo + + # The archiver. + AR=$lt_AR + AR_FLAGS=$lt_AR_FLAGS + + # A C compiler. + LTCC=$lt_LTCC + + # A language-specific compiler. + CC=$lt_[]_LT_AC_TAGVAR(compiler, $1) + + # Is the compiler the GNU C compiler? + with_gcc=$_LT_AC_TAGVAR(GCC, $1) + + # An ERE matcher. + EGREP=$lt_EGREP + + # The linker used to build libraries. + LD=$lt_[]_LT_AC_TAGVAR(LD, $1) + + # Whether we need hard or soft links. + LN_S=$lt_LN_S + + # A BSD-compatible nm program. + NM=$lt_NM + + # A symbol stripping program + STRIP=$STRIP + + # Used to examine libraries when file_magic_cmd begins "file" + MAGIC_CMD=$MAGIC_CMD + + # Used on cygwin: DLL creation program. + DLLTOOL="$DLLTOOL" + + # Used on cygwin: object dumper. + OBJDUMP="$OBJDUMP" + + # Used on cygwin: assembler. + AS="$AS" + + # The name of the directory that contains temporary libtool files. + objdir=$objdir + + # How to create reloadable object files. + reload_flag=$lt_reload_flag + reload_cmds=$lt_reload_cmds + + # How to pass a linker flag through the compiler. + wl=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_wl, $1) + + # Object file suffix (normally "o"). + objext="$ac_objext" + + # Old archive suffix (normally "a"). + libext="$libext" + + # Shared library suffix (normally ".so"). + shrext='$shrext' + + # Executable file suffix (normally ""). + exeext="$exeext" + + # Additional compiler flags for building library objects. + pic_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) + pic_mode=$pic_mode + + # What is the maximum length of a command? + max_cmd_len=$lt_cv_sys_max_cmd_len + + # Does compiler simultaneously support -c and -o options? + compiler_c_o=$lt_[]_LT_AC_TAGVAR(lt_cv_prog_compiler_c_o, $1) + + # Must we lock files when doing compilation ? + need_locks=$lt_need_locks + + # 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 + + # 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 + + # Compiler flag to prevent dynamic linking. + link_static_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_static, $1) + + # Compiler flag to turn off builtin functions. + no_builtin_flag=$lt_[]_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) + + # Compiler flag to allow reflexive dlopens. + export_dynamic_flag_spec=$lt_[]_LT_AC_TAGVAR(export_dynamic_flag_spec, $1) + + # Compiler flag to generate shared objects directly from archives. + whole_archive_flag_spec=$lt_[]_LT_AC_TAGVAR(whole_archive_flag_spec, $1) + + # Compiler flag to generate thread-safe objects. + thread_safe_flag_spec=$lt_[]_LT_AC_TAGVAR(thread_safe_flag_spec, $1) + + # Library versioning type. + version_type=$version_type + + # 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 + + # Commands used to build and install an old-style archive. + RANLIB=$lt_RANLIB + old_archive_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_cmds, $1) + old_postinstall_cmds=$lt_old_postinstall_cmds + old_postuninstall_cmds=$lt_old_postuninstall_cmds + + # Create an old-style archive from a shared archive. + old_archive_from_new_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_new_cmds, $1) + + # Create a temporary old-style archive to link instead of a shared archive. + old_archive_from_expsyms_cmds=$lt_[]_LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1) + + # Commands used to build and install a shared archive. + archive_cmds=$lt_[]_LT_AC_TAGVAR(archive_cmds, $1) + archive_expsym_cmds=$lt_[]_LT_AC_TAGVAR(archive_expsym_cmds, $1) + postinstall_cmds=$lt_postinstall_cmds + postuninstall_cmds=$lt_postuninstall_cmds + + # Commands used to build a loadable module (assumed same as above if empty) + module_cmds=$lt_[]_LT_AC_TAGVAR(module_cmds, $1) + module_expsym_cmds=$lt_[]_LT_AC_TAGVAR(module_expsym_cmds, $1) + + # Commands to strip libraries. + old_striplib=$lt_old_striplib + striplib=$lt_striplib + + # Dependencies to place before the objects being linked to create a + # shared library. + predep_objects=$lt_[]_LT_AC_TAGVAR(predep_objects, $1) + + # Dependencies to place after the objects being linked to create a + # shared library. + postdep_objects=$lt_[]_LT_AC_TAGVAR(postdep_objects, $1) + + # Dependencies to place before the objects being linked to create a + # shared library. + predeps=$lt_[]_LT_AC_TAGVAR(predeps, $1) + + # Dependencies to place after the objects being linked to create a + # shared library. + postdeps=$lt_[]_LT_AC_TAGVAR(postdeps, $1) + + # The library search path used internally by the compiler when linking + # a shared library. + compiler_lib_search_path=$lt_[]_LT_AC_TAGVAR(compiler_lib_search_path, $1) + + # 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 + + # Flag that allows shared libraries with undefined symbols to be built. + allow_undefined_flag=$lt_[]_LT_AC_TAGVAR(allow_undefined_flag, $1) + + # Flag that forces no undefined symbols. + no_undefined_flag=$lt_[]_LT_AC_TAGVAR(no_undefined_flag, $1) + + # Commands used to finish a libtool library installation in a directory. + finish_cmds=$lt_finish_cmds + + # Same as above, but a single script fragment to be evaled but not shown. + finish_eval=$lt_finish_eval + + # 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 + + # This is the shared library runtime path variable. + runpath_var=$runpath_var + + # This is the shared library path variable. + shlibpath_var=$shlibpath_var + + # Is shlibpath searched before the hard-coded library search path? + shlibpath_overrides_runpath=$shlibpath_overrides_runpath + + # How to hardcode a shared library path into an executable. + hardcode_action=$_LT_AC_TAGVAR(hardcode_action, $1) + + # Whether we should hardcode library paths into libraries. + hardcode_into_libs=$hardcode_into_libs + + # Flag to hardcode \$libdir into a binary during linking. + # This must work even if \$libdir does not exist. + hardcode_libdir_flag_spec=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) + + # If ld is used when linking, flag to hardcode \$libdir into + # a binary during linking. This must work even if \$libdir does + # not exist. + hardcode_libdir_flag_spec_ld=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1) + + # Whether we need a single -rpath flag with a separated argument. + hardcode_libdir_separator=$lt_[]_LT_AC_TAGVAR(hardcode_libdir_separator, $1) + + # Set to yes if using DIR/libNAME${shared_ext} during linking hardcodes DIR into the + # resulting binary. + hardcode_direct=$_LT_AC_TAGVAR(hardcode_direct, $1) + + # Set to yes if using the -LDIR flag during linking hardcodes DIR into the + # resulting binary. + hardcode_minus_L=$_LT_AC_TAGVAR(hardcode_minus_L, $1) + + # Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into + # the resulting binary. + hardcode_shlibpath_var=$_LT_AC_TAGVAR(hardcode_shlibpath_var, $1) + + # 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=$_LT_AC_TAGVAR(hardcode_automatic, $1) + + # Variables whose values should be saved in libtool wrapper scripts and + # restored at relink time. + variables_saved_for_relink="$variables_saved_for_relink" + + # Whether libtool must link a program against all its dependency libraries. + link_all_deplibs=$_LT_AC_TAGVAR(link_all_deplibs, $1) + + # 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 + + # Fix the shell variable \$srcfile for the compiler. + fix_srcfile_path="$_LT_AC_TAGVAR(fix_srcfile_path, $1)" + + # Set to yes if exported symbols are required. + always_export_symbols=$_LT_AC_TAGVAR(always_export_symbols, $1) + + # The commands to list exported symbols. + export_symbols_cmds=$lt_[]_LT_AC_TAGVAR(export_symbols_cmds, $1) + + # The commands to extract the exported symbol list from a shared archive. + extract_expsyms_cmds=$lt_extract_expsyms_cmds + + # Symbols that should not be listed in the preloaded symbols. + exclude_expsyms=$lt_[]_LT_AC_TAGVAR(exclude_expsyms, $1) + + # Symbols that must always be exported. + include_expsyms=$lt_[]_LT_AC_TAGVAR(include_expsyms, $1) + + ifelse([$1],[], + [# ### END LIBTOOL CONFIG], + [# ### END LIBTOOL TAG CONFIG: $tagname]) + + __EOF__ + + ifelse([$1],[], [ + case $host_os in + aix3*) + cat <<\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 + EOF + ;; + esac + + # 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) + + mv -f "$cfgfile" "$ofile" || \ + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + ]) + else + # If there is no Makefile yet, we rely on a make rule to execute + # `config.status --recheck' to rerun these tests and create the + # libtool script then. + test -f Makefile && make "$ltmain" + fi + ])# AC_LIBTOOL_CONFIG + + + # AC_LIBTOOL_PROG_COMPILER_NO_RTTI([TAGNAME]) + # ------------------------------------------- + AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], + [AC_REQUIRE([_LT_AC_SYS_COMPILER])dnl + + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= + + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' + + AC_LIBTOOL_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], + lt_cv_prog_compiler_rtti_exceptions, + [-fno-rtti -fno-exceptions], [], + [_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) + fi + ])# AC_LIBTOOL_PROG_COMPILER_NO_RTTI + + + # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + # --------------------------------- + AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], + [AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_PROG_NM]) + AC_REQUIRE([AC_OBJEXT]) + # 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]]*\)' + + # Transform the above into a raw symbol and a C symbol. + symxfrm='\1 \2\3 \3' + + # Transform an extracted symbol line into a proper C declaration + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^. .* \(.*\)$/extern int \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\\\", (lt_ptr) 0},/p' -e 's/^$symcode \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + + # Define system-specific variables. + case $host_os in + aix*) + symcode='[[BCDT]]' + ;; + cygwin* | mingw* | pw32*) + symcode='[[ABCDGISTW]]' + ;; + hpux*) # Its linker distinguishes data from code symbols + if test "$host_cpu" = ia64; then + symcode='[[ABCDEGRST]]' + fi + lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (lt_ptr) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (lt_ptr) \&\2},/p'" + ;; + irix* | nonstopux*) + symcode='[[BCDEGRST]]' + ;; + osf*) + symcode='[[BCDEGQRST]]' + ;; + solaris* | sysv5*) + symcode='[[BDT]]' + ;; + sysv4) + symcode='[[DFNSTU]]' + ;; + esac + + # 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 + + # If we're using GNU nm, then use its standard symbol codes. + case `$NM -V 2>&1` in + *GNU* | *'with BFD'*) + symcode='[[ABCDGISTW]]' ;; + esac + + # Try without a prefix undercore, then with it. + for ac_symprfx in "" "_"; do + + # Write the raw and C identifiers. + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*\($ac_symprfx\)$sympat$opt_cr$/$symxfrm/p'" + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext < $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 < conftest.$ac_ext + #ifdef __cplusplus + extern "C" { + #endif + + EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | grep -v main >> conftest.$ac_ext' + + cat <> conftest.$ac_ext + #if defined (__STDC__) && __STDC__ + # define lt_ptr_t void * + #else + # define lt_ptr_t char * + # define const + #endif + + /* The mapping between symbol names and symbols. */ + const struct { + const char *name; + lt_ptr_t address; + } + lt_preloaded_symbols[[]] = + { + EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (lt_ptr_t) \&\2},/" < "$nlist" | grep -v main >> conftest.$ac_ext + cat <<\EOF >> conftest.$ac_ext + {0, (lt_ptr_t) 0} + }; + + #ifdef __cplusplus + } + #endif + EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$_LT_AC_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_save_LIBS" + CFLAGS="$lt_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 -f 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 + ]) # AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE + + + # AC_LIBTOOL_PROG_COMPILER_PIC([TAGNAME]) + # --------------------------------------- + AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC], + [_LT_AC_TAGVAR(lt_prog_compiler_wl, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)= + + AC_MSG_CHECKING([for $compiler option to produce PIC]) + ifelse([$1],[CXX],[ + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | os2* | pw32*) + # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + hpux*) + # 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*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + case $host_os in + aix4* | aix5*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68) + # Green Hills C++ Compiler + # _LT_AC_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 + ;; + dgux*) + case $cc_basename in + ec++) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + ghcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + freebsd*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + fi + ;; + aCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)="${ac_cv_prog_cc_wl}-a ${ac_cv_prog_cc_wl}archive" + case "$host_cpu" in + hppa*64*|ia64*) + # +Z the default + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux*) + case $cc_basename in + KCC) + # KAI C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + icpc) + # Intel C++ + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + cxx) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd*) + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' + ;; + RCC) + # Rational C++ 2.4.1 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + cxx) + # Digital/Compaq C++ + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + sco*) + case $cc_basename in + CC) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + *) + ;; + esac + ;; + solaris*) + case $cc_basename in + CC) + # Sun C++ 4.2, 5.x and Centerline C++ + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + ;; + gcx) + # Green Hills C++ Compiler + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC) + # Sun C++ 4.x + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + lcc) + # Lucid + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + ;; + *) + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC) + # NonStop-UX NCC 3.20 + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + ;; + *) + ;; + esac + ;; + unixware*) + ;; + vxworks*) + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi + ], + [ + if test "$GCC" = yes; then + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + amigaos*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' + ;; + + beos* | cygwin* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | pw32* | os2*) + # 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_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + enable_shared=no + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic + fi + ;; + + hpux*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + else + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | pw32* | os2*) + # 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_AC_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + _LT_AC_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_AC_TAGVAR(lt_prog_compiler_pic, $1)='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # PIC (with -KPIC) is the default. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + newsos6) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + linux*) + case $CC in + icc|ecc) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-static' + ;; + ccc) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All Alpha code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + esac + ;; + + osf3* | osf4* | osf5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + # All OSF/1 code is PIC. + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kpic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-dn' + ;; + + solaris*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sunos4*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + _LT_AC_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + fi + ;; + + uts4*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)='-pic' + _LT_AC_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' + ;; + + *) + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no + ;; + esac + fi + ]) + AC_MSG_RESULT([$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)]) + + # + # Check to make sure the PIC flag actually works. + # + if test -n "$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)"; then + AC_LIBTOOL_COMPILER_OPTION([if $compiler PIC flag $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) works], + _LT_AC_TAGVAR(lt_prog_compiler_pic_works, $1), + [$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])], [], + [case $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1) in + "" | " "*) ;; + *) _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)" ;; + esac], + [_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + _LT_AC_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) + fi + case "$host_os" in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)= + ;; + *) + _LT_AC_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_AC_TAGVAR(lt_prog_compiler_pic, $1)ifelse([$1],[],[ -DPIC],[ifelse([$1],[CXX],[ -DPIC],[])])" + ;; + esac + ]) + + + # AC_LIBTOOL_PROG_LD_SHLIBS([TAGNAME]) + # ------------------------------------ + # See if the linker supports building shared libraries. + AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS], + [AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) + ifelse([$1],[CXX],[ + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix4* | aix5*) + # 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 + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_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_AC_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds" + ;; + cygwin* | mingw*) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + ;; + *) + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + ],[ + runpath_var= + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=no + _LT_AC_TAGVAR(archive_cmds, $1)= + _LT_AC_TAGVAR(archive_expsym_cmds, $1)= + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)= + _LT_AC_TAGVAR(old_archive_from_expsyms_cmds, $1)= + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)= + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + _LT_AC_TAGVAR(thread_safe_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)= + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(link_all_deplibs, $1)=unknown + _LT_AC_TAGVAR(hardcode_automatic, $1)=no + _LT_AC_TAGVAR(module_cmds, $1)= + _LT_AC_TAGVAR(module_expsym_cmds, $1)= + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + _LT_AC_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_AC_TAGVAR(exclude_expsyms, $1)="_GLOBAL_OFFSET_TABLE_" + # 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. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32*) + # 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 + ;; + openbsd*) + with_gnu_ld=no + ;; + esac + + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # See if GNU ld supports shared libraries. + case $host_os in + aix3* | aix4* | aix5*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&2 + + *** Warning: the GNU linker, at least up to release 2.9.1, 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 modify your PATH + *** so that a non-GNU linker is found, and then restart. + + EOF + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + + # Samuel A. Falvo II reports + # that the semantics of dynamic libraries on AmigaOS, at least up + # to version 4, is to share data among multiple programs linked + # with the same dynamic library. Since this doesn't match the + # behavior of shared libraries on other platforms, we can't use + # them. + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + beos*) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + _LT_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + cygwin* | mingw* | pw32*) + # _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, + # as there is no search path for DLLs. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=no + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGS]] /s/.* \([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]] /s/.* //'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--image-base=0x10000000 ${wl}--out-implib,$lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + _LT_AC_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}--image-base=0x10000000 ${wl}--out-implib,$lib' + else + ld_shlibs=no + fi + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris* | sysv5*) + if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then + _LT_AC_TAGVAR(ld_shlibs, $1)=no + cat <&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. + + EOF + elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + + sunos4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + _LT_AC_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_AC_TAGVAR(ld_shlibs, $1)=no + fi + ;; + esac + + if test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = yes; then + runpath_var=LD_RUN_PATH + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir' + _LT_AC_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_AC_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)= + fi + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + if test "$GCC" = yes && test -z "$link_static_flag"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + _LT_AC_TAGVAR(hardcode_direct, $1)=unsupported + fi + ;; + + aix4* | aix5*) + 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 + if $NM -V 2>&1 | grep 'GNU' > /dev/null; then + _LT_AC_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\[$]2 == "T") || (\[$]2 == "D") || (\[$]2 == "B")) && ([substr](\[$]3,1,1) != ".")) { print \[$]3 } }'\'' | sort -u > $export_symbols' + else + _LT_AC_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]].*|aix5*) + 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_AC_TAGVAR(archive_cmds, $1)='' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=':' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + + 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 + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + else + # We have old collect2 + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)= + fi + esac + shared_flag='-shared' + 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 + + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + _LT_AC_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_AC_TAGVAR(allow_undefined_flag, $1)='-berok' + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then echo "${wl}${allow_undefined_flag}"; else :; fi` '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib' + _LT_AC_TAGVAR(allow_undefined_flag, $1)="-z nodefs" + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$no_entry_flag \${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an empty executable. + _LT_AC_SYS_LIBPATH_AIX + _LT_AC_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_AC_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok' + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok' + # -bexpall does not export symbols beginning with underscore (_) + _LT_AC_TAGVAR(always_export_symbols, $1)=yes + # Exported symbols can be pulled into shared objects from archives + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)=' ' + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + # This is similar to how AIX traditionally builds it's shared libraries. + _LT_AC_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs $compiler_flags ${wl}-bE:$export_symbols ${wl}-bnoentry${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + _LT_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + # see comment about different semantics on the GNU ld section + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + + bsdi4*) + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic + ;; + + cygwin* | mingw* | pw32*) + # 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. + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' + _LT_AC_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=".dll" + # FIXME: Setting linknames here is a bad hack. + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `echo "$deplibs" | $SED -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + _LT_AC_TAGVAR(old_archive_From_new_cmds, $1)='true' + # FIXME: Should let the user specify the lib program. + _LT_AC_TAGVAR(old_archive_cmds, $1)='lib /OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + _LT_AC_TAGVAR(enable_shared_with_static_runtimes, $1)=yes + ;; + + darwin* | rhapsody*) + if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + case "$host_os" in + rhapsody* | darwin1.[[012]]) + _LT_AC_TAGVAR(allow_undefined_flag, $1)='-undefined suppress' + ;; + *) # Darwin 1.3 on + test -z ${LD_TWOLEVEL_NAMESPACE} && _LT_AC_TAGVAR(allow_undefined_flag, $1)='-flat_namespace -undefined suppress' + ;; + esac + # FIXME: Relying on posixy $() will cause problems for + # cross-compilation, but unfortunately the echo tests do not + # yet detect zsh echo's removal of \ escapes. Also zsh mangles + # `"' quotes if we put them in here... so don't! + lt_int_apple_cc_single_mod=no + output_verbose_link_cmd='echo' + if $CC -dumpspecs 2>&1 | grep 'single_module' >/dev/null ; then + lt_int_apple_cc_single_mod=yes + fi + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -r ${wl}-bind_at_load -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' + fi + _LT_AC_TAGVAR(module_cmds, $1)='$CC -bundle ${wl}-bind_at_load $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags' + # Don't fix this by using the ld -exported_symbols_list flag, it doesn't exist in older darwin ld's + if test "X$lt_int_apple_cc_single_mod" = Xyes ; then + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -dynamiclib -single_module $allow_undefined_flag -o $lib $libobjs $deplibs $compiler_flags -install_name $rpath/$soname $verstring~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + else + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -r ${wl}-bind_at_load -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~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + _LT_AC_TAGVAR(module_expsym_cmds, $1)='sed -e "s,#.*,," -e "s,^[ ]*,," -e "s,^\(..*\),_&," < $export_symbols > $output_objdir/${libname}-symbols.expsym~$CC -bundle $allow_undefined_flag -o $lib $libobjs $deplibs$compiler_flags~nmedit -s $output_objdir/${libname}-symbols.expsym ${lib}' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_automatic, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=unsupported + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-all_load $convenience' + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + fi + ;; + + dgux*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + freebsd1*) + _LT_AC_TAGVAR(ld_shlibs, $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_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + hpux9*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$rm $output_objdir/$soname~$CC -shared -fPIC ${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_AC_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_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + ;; + + hpux10* | hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case "$host_cpu" in + hppa*64*|ia64*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname -o $lib $libobjs $deplibs $linker_flags' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + case "$host_cpu" in + hppa*64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + ia64*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + *) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_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_AC_TAGVAR(hardcode_minus_L, $1)=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(link_all_deplibs, $1)=yes + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | grep __ELF__ >/dev/null; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + newsos6) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + openbsd*) + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E' + else + case $host_os in + openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + ;; + *) + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir' + ;; + esac + fi + ;; + + os2*) + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(allow_undefined_flag, $1)=unsupported + _LT_AC_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_AC_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*' + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && echo ${wl}-set_version ${wl}$verstring` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir' + else + _LT_AC_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -shared${allow_undefined_flag} $libobjs $deplibs $linker_flags -msym -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${output_objdir}/so_locations -o $lib' + _LT_AC_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~ + $LD -shared${allow_undefined_flag} -input $lib.exp $linker_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && echo -set_version $verstring` -update_registry ${objdir}/so_locations -o $lib~$rm $lib.exp' + + # Both c and cxx compiler support -rpath directly + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' + fi + _LT_AC_TAGVAR(hardcode_libdir_separator, $1)=: + ;; + + sco3.2v5*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport' + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ;; + + solaris*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + _LT_AC_TAGVAR(archive_expsym_cmds, $1)='$echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~$echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$rm $lib.exp' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + case $host_os in + solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; + *) # Supported since Solaris 2.6 (maybe 2.5.1?) + _LT_AC_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; + esac + _LT_AC_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_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=yes + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4) + case $host_vendor in + sni) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' + _LT_AC_TAGVAR(hardcode_direct, $1)=no + ;; + motorola) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv4.3*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + _LT_AC_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + _LT_AC_TAGVAR(ld_shlibs, $1)=yes + fi + ;; + + sysv4.2uw2*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_direct, $1)=yes + _LT_AC_TAGVAR(hardcode_minus_L, $1)=no + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + hardcode_runpath_var=yes + runpath_var=LD_RUN_PATH + ;; + + sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[[78]]* | unixware7*) + _LT_AC_TAGVAR(no_undefined_flag, $1)='${wl}-z ${wl}text' + if test "$GCC" = yes; then + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + else + _LT_AC_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + runpath_var='LD_RUN_PATH' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + sysv5*) + _LT_AC_TAGVAR(no_undefined_flag, $1)=' -z text' + # $CC -shared without GNU ld will not create a library from C++ + # object files and a static libstdc++, better avoid it by now + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_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' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)= + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + runpath_var='LD_RUN_PATH' + ;; + + uts4*) + _LT_AC_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + _LT_AC_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' + _LT_AC_TAGVAR(hardcode_shlibpath_var, $1)=no + ;; + + *) + _LT_AC_TAGVAR(ld_shlibs, $1)=no + ;; + esac + fi + ]) + AC_MSG_RESULT([$_LT_AC_TAGVAR(ld_shlibs, $1)]) + test "$_LT_AC_TAGVAR(ld_shlibs, $1)" = 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 + + # + # Do we need to explicitly link libc? + # + case "x$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)" in + x|xyes) + # Assume -lc should be added + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $_LT_AC_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_MSG_CHECKING([whether -lc should be explicitly linked in]) + $rm conftest* + printf "$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_AC_TAGVAR(lt_prog_compiler_wl, $1) + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$_LT_AC_TAGVAR(allow_undefined_flag, $1) + _LT_AC_TAGVAR(allow_undefined_flag, $1)= + if AC_TRY_EVAL(_LT_AC_TAGVAR(archive_cmds, $1) 2\>\&1 \| grep \" -lc \" \>/dev/null 2\>\&1) + then + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=no + else + _LT_AC_TAGVAR(archive_cmds_need_lc, $1)=yes + fi + _LT_AC_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $rm conftest* + AC_MSG_RESULT([$_LT_AC_TAGVAR(archive_cmds_need_lc, $1)]) + ;; + esac + fi + ;; + esac + ])# AC_LIBTOOL_PROG_LD_SHLIBS + + + # _LT_AC_FILE_LTDLL_C + # ------------------- + # Be careful that the start marker always follows a newline. + AC_DEFUN([_LT_AC_FILE_LTDLL_C], [ + # /* ltdll.c starts here */ + # #define WIN32_LEAN_AND_MEAN + # #include + # #undef WIN32_LEAN_AND_MEAN + # #include + # + # #ifndef __CYGWIN__ + # # ifdef __CYGWIN32__ + # # define __CYGWIN__ __CYGWIN32__ + # # endif + # #endif + # + # #ifdef __cplusplus + # extern "C" { + # #endif + # BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved); + # #ifdef __cplusplus + # } + # #endif + # + # #ifdef __CYGWIN__ + # #include + # DECLARE_CYGWIN_DLL( DllMain ); + # #endif + # HINSTANCE __hDllInstance_base; + # + # BOOL APIENTRY + # DllMain (HINSTANCE hInst, DWORD reason, LPVOID reserved) + # { + # __hDllInstance_base = hInst; + # return TRUE; + # } + # /* ltdll.c ends here */ + ])# _LT_AC_FILE_LTDLL_C + + + # _LT_AC_TAGVAR(VARNAME, [TAGNAME]) + # --------------------------------- + AC_DEFUN([_LT_AC_TAGVAR], [ifelse([$2], [], [$1], [$1_$2])]) + + + # old names + AC_DEFUN([AM_PROG_LIBTOOL], [AC_PROG_LIBTOOL]) + AC_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) + AC_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) + AC_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) + AC_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) + AC_DEFUN([AM_PROG_LD], [AC_PROG_LD]) + AC_DEFUN([AM_PROG_NM], [AC_PROG_NM]) + + # This is just to silence aclocal about the macro not being used + ifelse([AC_DISABLE_FAST_INSTALL]) + + AC_DEFUN([LT_AC_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj, no) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS) + ]) + + AC_DEFUN([LT_AC_PROG_RC], + [AC_CHECK_TOOL(RC, windres, no) + ]) + + ############################################################ + # 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. # + ############################################################ + # LT_AC_PROG_SED + # -------------- + # Check for a fully-functional sed program, that truncates + # as few characters as possible. Prefer GNU sed if found. + AC_DEFUN([LT_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 + 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 && break + 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_MSG_RESULT([$SED]) + ]) + ############################################################################# + # Additional Macros + ############################################################################# + + # + # Check for C++ namespace support. This is from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_namespaces.html + # + AC_DEFUN([AC_CXX_NAMESPACES], + [AC_CACHE_CHECK(whether the compiler implements namespaces, + ac_cv_cxx_namespaces, + [AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([namespace Outer { namespace Inner { int i = 0; }}], + [using namespace Outer::Inner; return i;], + ac_cv_cxx_namespaces=yes, ac_cv_cxx_namespaces=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_namespaces" = yes; then + AC_DEFINE(HAVE_NAMESPACES,,[define if the compiler implements namespaces]) + fi + ]) + + # + # Check for hash_map extension. This is from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_map.html + # + AC_DEFUN([AC_CXX_HAVE_EXT_HASH_MAP], + [AC_CACHE_CHECK(whether the compiler has ext/hash_map, + ac_cv_cxx_have_ext_hash_map, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[hash_map t; return 0;], + ac_cv_cxx_have_ext_hash_map=std, ac_cv_cxx_have_ext_hash_map=no) + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace __gnu_cxx; + #endif],[hash_map t; return 0;], + ac_cv_cxx_have_ext_hash_map=gnu, ac_cv_cxx_have_ext_hash_map=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_ext_hash_map" = std; then + AC_DEFINE(HAVE_STD_EXT_HASH_MAP,,[define if the compiler has ext/hash_map]) + fi + if test "$ac_cv_cxx_have_ext_hash_map" = gnu; then + AC_DEFINE(HAVE_GNU_EXT_HASH_MAP,,[define if the compiler has ext/hash_map]) + fi + ]) + + # + # Check for hash_set extension. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html + # + AC_DEFUN([AC_CXX_HAVE_EXT_HASH_SET], + [AC_CACHE_CHECK(whether the compiler has ext/hash_set, + ac_cv_cxx_have_ext_hash_set, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[hash_set t; return 0;], + ac_cv_cxx_have_ext_hash_set=std, ac_cv_cxx_have_ext_hash_set=no) + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace __gnu_cxx; + #endif],[hash_set t; return 0;], + ac_cv_cxx_have_ext_hash_set=gnu, ac_cv_cxx_have_ext_hash_set=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_ext_hash_set" = std; then + AC_DEFINE(HAVE_STD_EXT_HASH_SET,,[define if the compiler has ext/hash_set in std]) + fi + if test "$ac_cv_cxx_have_ext_hash_set" = gnu; then + AC_DEFINE(HAVE_GNU_EXT_HASH_SET,,[define if the compiler has ext/hash_set in __gnu_cc]) + fi + ]) + + # + # Check for standard iterator extension. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html + # + AC_DEFUN([AC_CXX_HAVE_STD_ITERATOR], + [AC_CACHE_CHECK(whether the compiler has the standard iterator, + ac_cv_cxx_have_std_iterator, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[iterator t; return 0;], + ac_cv_cxx_have_std_iterator=yes, ac_cv_cxx_have_std_iterator=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_std_iterator" = yes; then + AC_DEFINE(HAVE_STD_ITERATOR,,[define if the compiler has STL iterators]) + fi + ]) + + # + # Check for bidirectional iterator extension. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html + # + AC_DEFUN([AC_CXX_HAVE_BI_ITERATOR], + [AC_CACHE_CHECK(whether the compiler has the bidirectional iterator, + ac_cv_cxx_have_bi_iterator, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[bidirectional_iterator t; return 0;], + ac_cv_cxx_have_bi_iterator=yes, ac_cv_cxx_have_bi_iterator=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_bi_iterator" = yes; then + AC_DEFINE(HAVE_BI_ITERATOR,,[define if the compiler has bidirectional iterator]) + fi + ]) + + # + # Check for forward iterator extension. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_hash_set.html + # + AC_DEFUN([AC_CXX_HAVE_FWD_ITERATOR], + [AC_CACHE_CHECK(whether the compiler has forward iterators, + ac_cv_cxx_have_fwd_iterator, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[forward_iterator t; return 0;], + ac_cv_cxx_have_fwd_iterator=yes, ac_cv_cxx_have_fwd_iterator=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_fwd_iterator" = yes; then + AC_DEFINE(HAVE_FWD_ITERATOR,,[define if the compiler has STL iterators]) + fi + ]) + + # + # Check for slist extension. This is from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html + # + AC_DEFUN([AC_CXX_HAVE_EXT_SLIST], + [AC_CACHE_CHECK(whether the compiler has ext/slist, + ac_cv_cxx_have_ext_slist, + [AC_REQUIRE([AC_CXX_NAMESPACES]) + AC_LANG_SAVE + AC_LANG_CPLUSPLUS + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace std; + #endif],[slist s; return 0;], + ac_cv_cxx_have_ext_slist=std, ac_cv_cxx_have_ext_slist=no) + AC_TRY_COMPILE([#include + #ifdef HAVE_NAMESPACES + using namespace __gnu_cxx; + #endif],[slist s; return 0;], + ac_cv_cxx_have_ext_slist=gnu, ac_cv_cxx_have_ext_slist=no) + + AC_LANG_RESTORE + ]) + if test "$ac_cv_cxx_have_ext_slist" = std; then + AC_DEFINE(HAVE_EXT_SLIST,std,[define if the compiler has ext/slist]) + fi + if test "$ac_cv_cxx_have_ext_slist" = gnu; then + AC_DEFINE(HAVE_EXT_SLIST,gnu,[define if the compiler has ext/slist]) + fi + ]) + + # + # Check for FLEX. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_namespaces.html + # + AC_DEFUN([AC_PROG_FLEX], + [AC_CACHE_CHECK(, + ac_cv_has_flex, + [AC_PROG_LEX() + ]) + if test "$LEX" != "flex"; then + AC_MSG_ERROR([flex not found but required]) + fi + ]) + + # + # Check for Bison. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_namespaces.html + # + AC_DEFUN([AC_PROG_BISON], + [AC_CACHE_CHECK(, + ac_cv_has_bison, + [AC_PROG_YACC() + ]) + if test "$YACC" != "bison -y"; then + AC_MSG_ERROR([bison not found but required]) + else + AC_SUBST(YACC,[bison],[location of bison]) + fi + ]) + + # + # Check for GNU Make. This is from + # http://www.gnu.org/software/ac-archive/htmldoc/check_gnu_make.html + # + AC_DEFUN( + [CHECK_GNU_MAKE], [ AC_CACHE_CHECK( for GNU make,_cv_gnu_make_command, + _cv_gnu_make_command='' ; + dnl Search all the common names for GNU make + for a in "$MAKE" make gmake gnumake ; do + if test -z "$a" ; then continue ; fi ; + if ( sh -c "$a --version" 2> /dev/null | grep GNU 2>&1 > /dev/null ) ; then + _cv_gnu_make_command=$a ; + break; + fi + done ; + ) ; + dnl If there was a GNU version, then set @ifGNUmake@ to the empty string, '#' otherwise + if test "x$_cv_gnu_make_command" != "x" ; then + ifGNUmake='' ; + else + ifGNUmake='#' ; + AC_MSG_RESULT("Not found"); + fi + AC_SUBST(ifGNUmake) + ] ) + + # + # Check for the ability to mmap a file. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html + # + AC_DEFUN([AC_FUNC_MMAP_FILE], + [AC_CACHE_CHECK(for mmap of files, + ac_cv_func_mmap_file, + [AC_LANG_SAVE + AC_LANG_C + AC_TRY_RUN([ + #ifdef HAVE_SYS_MMAN_H + #include + #endif + + #ifdef HAVE_SYS_TYPES_H + #include + #endif + + #ifdef HAVE_FCNTL_H + #include + #endif + + int fd; + int main () { + fd = creat ("foo",0777); fd = (int) mmap (0, 1, PROT_READ, MAP_SHARED, fd, 0); unlink ("foo"); return (fd != MAP_FAILED);}], + ac_cv_func_mmap_file=yes, ac_cv_func_mmap_file=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_func_mmap_file" = yes; then + AC_DEFINE(HAVE_MMAP_FILE) + AC_SUBST(MMAP_FILE,[yes]) + fi + ]) + + # + # Check for anonymous mmap macros. This is modified from + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html + # + AC_DEFUN([AC_HEADER_MMAP_ANONYMOUS], + [AC_CACHE_CHECK(for MAP_ANONYMOUS vs. MAP_ANON, + ac_cv_header_mmap_anon, + [AC_LANG_SAVE + AC_LANG_C + AC_TRY_COMPILE([#include + #include + #include ], + [mmap (0, 1, PROT_READ, MAP_ANONYMOUS, -1, 0); return (0);], + ac_cv_header_mmap_anon=yes, ac_cv_header_mmap_anon=no) + AC_LANG_RESTORE + ]) + if test "$ac_cv_header_mmap_anon" = yes; then + AC_DEFINE(HAVE_MMAP_ANONYMOUS) + fi + ]) + + # + # Configure a Makefile without clobbering it if it exists and is not out of + # date. This is modified from: + # http://www.gnu.org/software/ac-archive/htmldoc/ac_cxx_have_ext_slist.html + # + AC_DEFUN([AC_CONFIG_MAKEFILE], + [AC_CONFIG_COMMANDS($1,${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/$1 $1,${srcdir}/autoconf/mkinstalldirs `dirname $1`) + ]) + + Index: llvm/projects/sample/autoconf/config.guess diff -c /dev/null llvm/projects/sample/autoconf/config.guess:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/config.guess Wed Oct 15 20:44:19 2003 *************** *** 0 **** --- 1,1388 ---- + #! /bin/sh + # Attempt to guess a canonical system name. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + + timestamp='2003-02-22' + + # 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, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # 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 to . Submit a context + # diff and a properly formatted 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. + # + # The plan is that this can be called by configure scripts if you + # don't specify an explicit build system type. + + 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 + 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 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # 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 -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || + { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || + { 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 ;' + + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. + # (ghazi at 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 tupples: *-*-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 ;; + *) 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 __ELF__ >/dev/null + 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 0 ;; + amiga:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + arc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mac68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + macppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme68k:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvme88k:OpenBSD:*:*) + echo m88k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + mvmeppc:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + pmax:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sgi:OpenBSD:*:*) + echo mipseb-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + sun3:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + wgrisc:OpenBSD:*:*) + echo mipsel-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + *:OpenBSD:*:*) + echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + alpha:OSF1:*:*) + if test $UNAME_RELEASE = "V4.0"; then + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + fi + # 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 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/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + 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 0 ;; + 21064:Windows_NT:50:3) + echo alpha-dec-winnt3.5 + exit 0 ;; + Amiga*:UNIX_System_V:4.0:*) + echo m68k-unknown-sysv4 + exit 0;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; + *:[Mm]orph[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-morphos + exit 0 ;; + *:OS/390:*:*) + echo i370-ibm-openedition + exit 0 ;; + arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) + echo arm-acorn-riscix${UNAME_RELEASE} + exit 0;; + SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) + echo hppa1.1-hitachi-hiuxmpp + exit 0;; + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) + # akee at 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 0 ;; + NILE*:*:*:dcosx) + echo pyramid-pyramid-svr4 + exit 0 ;; + DRS?6000:UNIX_SV:4.2*:7*) + case `/usr/bin/uname -p` in + sparc) echo sparc-icl-nx7 && exit 0 ;; + esac ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) + echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + i86pc:SunOS:5.*:*) + echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + 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 0 ;; + 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 0 ;; + sun3*:SunOS:*:*) + echo m68k-sun-sunos${UNAME_RELEASE} + exit 0 ;; + 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 0 ;; + aushp:SunOS:*:*) + echo sparc-auspex-sunos${UNAME_RELEASE} + exit 0 ;; + # 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 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; + powerpc:machten:*:*) + echo powerpc-apple-machten${UNAME_RELEASE} + exit 0 ;; + RISC*:Mach:*:*) + echo mips-dec-mach_bsd4.3 + exit 0 ;; + RISC*:ULTRIX:*:*) + echo mips-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + VAX*:ULTRIX*:*:*) + echo vax-dec-ultrix${UNAME_RELEASE} + exit 0 ;; + 2020:CLIX:*:* | 2430:CLIX:*:*) + echo clipper-intergraph-clix${UNAME_RELEASE} + exit 0 ;; + 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 \ + && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && exit 0 + echo mips-mips-riscos${UNAME_RELEASE} + exit 0 ;; + Motorola:PowerMAX_OS:*:*) + echo powerpc-motorola-powermax + exit 0 ;; + Motorola:*:4.3:PL8-*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) + echo powerpc-harris-powermax + exit 0 ;; + Night_Hawk:Power_UNIX:*:*) + echo powerpc-harris-powerunix + exit 0 ;; + m88k:CX/UX:7*:*) + echo m88k-harris-cxux7 + exit 0 ;; + m88k:*:4*:R4*) + echo m88k-motorola-sysv4 + exit 0 ;; + m88k:*:3*:R3*) + echo m88k-motorola-sysv3 + exit 0 ;; + 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 0 ;; + M88*:DolphinOS:*:*) # DolphinOS (SVR3) + echo m88k-dolphin-sysv3 + exit 0 ;; + M88*:*:R3*:*) + # Delta 88k system running SVR3 + echo m88k-motorola-sysv3 + exit 0 ;; + XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) + echo m88k-tektronix-sysv3 + exit 0 ;; + Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) + echo m68k-tektronix-bsd + exit 0 ;; + *:IRIX*:*:*) + echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` + exit 0 ;; + ????????: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 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' + i*86:AIX:*:*) + echo i386-ibm-aix + exit 0 ;; + 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 0 ;; + *: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 + $CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0 + echo rs6000-ibm-aix3.2.5 + 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 0 ;; + *:AIX:*:[45]) + 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 0 ;; + *:AIX:*:*) + echo rs6000-ibm-aix + exit 0 ;; + ibmrt:4.4BSD:*|romp-ibm:BSD:*) + echo romp-ibm-bsd4.4 + exit 0 ;; + ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and + echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to + exit 0 ;; # report: romp-ibm BSD 4.3 + *:BOSX:*:*) + echo rs6000-bull-bosx + exit 0 ;; + DPX/2?00:B.O.S.:*:*) + echo m68k-bull-sysv3 + exit 0 ;; + 9000/[34]??:4.3bsd:1.*:*) + echo m68k-hp-bsd + exit 0 ;; + hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) + echo m68k-hp-bsd4.4 + exit 0 ;; + 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 + # avoid double evaluation of $set_cc_for_build + test -n "$CC_FOR_BUILD" || eval $set_cc_for_build + if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null + then + HP_ARCH="hppa2.0w" + else + HP_ARCH="hppa64" + fi + fi + echo ${HP_ARCH}-hp-hpux${HPUX_REV} + exit 0 ;; + ia64:HP-UX:*:*) + HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` + echo ia64-hp-hpux${HPUX_REV} + exit 0 ;; + 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 && $dummy && exit 0 + echo unknown-hitachi-hiuxwe2 + exit 0 ;; + 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) + echo hppa1.1-hp-bsd + exit 0 ;; + 9000/8??:4.3bsd:*:*) + echo hppa1.0-hp-bsd + exit 0 ;; + *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; + hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) + echo hppa1.1-hp-osf + exit 0 ;; + hp8??:OSF1:*:*) + echo hppa1.0-hp-osf + exit 0 ;; + i*86:OSF1:*:*) + if [ -x /usr/sbin/sysversion ] ; then + echo ${UNAME_MACHINE}-unknown-osf1mk + else + echo ${UNAME_MACHINE}-unknown-osf1 + fi + exit 0 ;; + parisc*:Lites*:*:*) + echo hppa1.1-hp-lites + exit 0 ;; + C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) + echo c1-convex-bsd + exit 0 ;; + C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) + echo c34-convex-bsd + exit 0 ;; + C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) + echo c38-convex-bsd + exit 0 ;; + C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) + echo c4-convex-bsd + exit 0 ;; + CRAY*Y-MP:*:*:*) + echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + 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 0 ;; + CRAY*TS:*:*:*) + echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*T3E:*:*:*) + echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + CRAY*SV1:*:*:*) + echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + *:UNICOS/mp:*:*) + echo nv1-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' + exit 0 ;; + 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 0 ;; + i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) + echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} + exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:FreeBSD:*:*) + # Determine whether the default compiler uses glibc. + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #if __GLIBC__ >= 2 + LIBC=gnu + #else + LIBC= + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`${LIBC:+-$LIBC} + exit 0 ;; + i*:CYGWIN*:*) + echo ${UNAME_MACHINE}-pc-cygwin + exit 0 ;; + i*:MINGW*:*) + echo ${UNAME_MACHINE}-pc-mingw32 + exit 0 ;; + i*:PW*:*) + echo ${UNAME_MACHINE}-pc-pw32 + exit 0 ;; + x86:Interix*:3*) + echo i586-pc-interix3 + exit 0 ;; + [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) + echo i${UNAME_MACHINE}-pc-mks + exit 0 ;; + 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 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; + p*:CYGWIN*:*) + echo powerpcle-unknown-cygwin + exit 0 ;; + prep*:SunOS:5.*:*) + echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; + *:GNU:*:*) + echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` + exit 0 ;; + i*86:Minix:*:*) + echo ${UNAME_MACHINE}-pc-minix + exit 0 ;; + arm*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + ia64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + m68*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + mips:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips + #undef mipsel + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mipsel + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips + #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 0 + ;; + mips64:Linux:*:*) + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #undef CPU + #undef mips64 + #undef mips64el + #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) + CPU=mips64el + #else + #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) + CPU=mips64 + #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 0 + ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu + exit 0 ;; + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit 0 ;; + 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 ld.so.1 >/dev/null + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit 0 ;; + 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 0 ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit 0 ;; + s390:Linux:*:* | s390x:Linux:*:*) + echo ${UNAME_MACHINE}-ibm-linux + exit 0 ;; + sh*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + sparc:Linux:*:* | sparc64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; + x86_64:Linux:*:*) + echo x86_64-unknown-linux-gnu + exit 0 ;; + i*86:Linux:*:*) + # The BFD linker knows what the default object file format is, so + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + # Set LC_ALL=C to ensure ld outputs messages in English. + ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ + | sed -ne '/supported targets:/!d + s/[ ][ ]*/ /g + s/.*supported targets: *// + s/ .*// + p'` + case "$ld_supported_targets" in + elf32-i386) + TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" + ;; + a.out-i386-linux) + echo "${UNAME_MACHINE}-pc-linux-gnuaout" + exit 0 ;; + coff-i386) + echo "${UNAME_MACHINE}-pc-linux-gnucoff" + exit 0 ;; + "") + # Either a pre-BFD a.out linker (linux-gnuoldld) or + # one that does not give us useful --help. + echo "${UNAME_MACHINE}-pc-linux-gnuoldld" + exit 0 ;; + esac + # Determine whether the default compiler is a.out or elf + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #include + #ifdef __ELF__ + # ifdef __GLIBC__ + # if __GLIBC__ >= 2 + LIBC=gnu + # else + LIBC=gnulibc1 + # endif + # else + LIBC=gnulibc1 + # endif + #else + #ifdef __INTEL_COMPILER + LIBC=gnu + #else + LIBC=gnuaout + #endif + #endif + EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=` + test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0 + test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 + ;; + 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 0 ;; + 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 0 ;; + 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 0 ;; + i*86:XTS-300:*:STOP) + echo ${UNAME_MACHINE}-unknown-stop + exit 0 ;; + i*86:atheos:*:*) + echo ${UNAME_MACHINE}-unknown-atheos + exit 0 ;; + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + echo i386-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + i*86:*DOS:*:*) + echo ${UNAME_MACHINE}-pc-msdosdjgpp + exit 0 ;; + 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 0 ;; + i*86:*:5:[78]*) + 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 0 ;; + 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 0 ;; + 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 i386. + echo i386-pc-msdosdjgpp + exit 0 ;; + Intel:Mach:3*:*) + echo i386-pc-mach3 + exit 0 ;; + paragon:*:*:*) + echo i860-intel-osf1 + exit 0 ;; + 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 0 ;; + mini*:CTIX:SYS*5:*) + # "miniframe" + echo m68010-convergent-sysv + exit 0 ;; + mc68k:UNIX:SYSTEM5:3.51m) + echo m68k-convergent-sysv + exit 0 ;; + M680?0:D-NIX:5.3:*) + echo m68k-diab-dnix + exit 0 ;; + M68*:*:R3V[567]*:*) + test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; + 3[34]??:*: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) + 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 0 + /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ + && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; + 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) + /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ + && echo i486-ncr-sysv4 && exit 0 ;; + m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) + echo m68k-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + mc68030:UNIX_System_V:4.*:*) + echo m68k-atari-sysv4 + exit 0 ;; + TSUNAMI:LynxOS:2.*:*) + echo sparc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + rs6000:LynxOS:2.*:*) + echo rs6000-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + echo powerpc-unknown-lynxos${UNAME_RELEASE} + exit 0 ;; + SM[BE]S:UNIX_SV:*:*) + echo mips-dde-sysv${UNAME_RELEASE} + exit 0 ;; + RM*:ReliantUNIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + RM*:SINIX-*:*:*) + echo mips-sni-sysv4 + exit 0 ;; + *: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 0 ;; + PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + # says + echo i586-unisys-sysv4 + exit 0 ;; + *:UNIX_System_V:4*:FTX*) + # From Gerald Hewes . + # How about differentiating between stratus architectures? -djm + echo hppa1.1-stratus-sysv4 + exit 0 ;; + *:*:*:FTX*) + # From seanf at swdc.stratus.com. + echo i860-stratus-sysv4 + exit 0 ;; + *:VOS:*:*) + # From Paul.Green at stratus.com. + echo hppa1.1-stratus-vos + exit 0 ;; + mc68*:A/UX:*:*) + echo m68k-apple-aux${UNAME_RELEASE} + exit 0 ;; + news*:NEWS-OS:6*:*) + echo mips-sony-newsos6 + exit 0 ;; + 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 0 ;; + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-be-beos + exit 0 ;; + BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) # BeOS running on Intel PC compatible. + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-6:SUPER-UX:*:*) + echo sx6-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Darwin:*:*) + case `uname -p` in + *86) UNAME_PROCESSOR=i686 ;; + powerpc) UNAME_PROCESSOR=powerpc ;; + esac + echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} + exit 0 ;; + *: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 0 ;; + *:QNX:*:4*) + echo i386-pc-qnx + exit 0 ;; + NSR-[DGKLNPTVW]:NONSTOP_KERNEL:*:*) + echo nsr-tandem-nsk${UNAME_RELEASE} + exit 0 ;; + *:NonStop-UX:*:*) + echo mips-compaq-nonstopux + exit 0 ;; + BS2000:POSIX*:*:*) + echo bs2000-siemens-sysv + exit 0 ;; + DS/*:UNIX_System_V:*:*) + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} + exit 0 ;; + *: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 0 ;; + *:TOPS-10:*:*) + echo pdp10-unknown-tops10 + exit 0 ;; + *:TENEX:*:*) + echo pdp10-unknown-tenex + exit 0 ;; + KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) + echo pdp10-dec-tops20 + exit 0 ;; + XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) + echo pdp10-xkl-tops20 + exit 0 ;; + *:TOPS-20:*:*) + echo pdp10-unknown-tops20 + exit 0 ;; + *:ITS:*:*) + echo pdp10-unknown-its + exit 0 ;; + 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"); 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 && $dummy && exit 0 + + # Apollos put the system type in the environment. + + test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } + + # 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 0 ;; + c2*) + if getsysinfo -f scalar_acc + then echo c32-convex-bsd + else echo c2-convex-bsd + fi + exit 0 ;; + c34*) + echo c34-convex-bsd + exit 0 ;; + c38*) + echo c38-convex-bsd + exit 0 ;; + c4*) + echo c4-convex-bsd + exit 0 ;; + 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: Index: llvm/projects/sample/autoconf/config.sub diff -c /dev/null llvm/projects/sample/autoconf/config.sub:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/config.sub Wed Oct 15 20:44:19 2003 *************** *** 0 **** --- 1,1489 ---- + #! /bin/sh + # Configuration validation subroutine script. + # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. + + timestamp='2003-02-22' + + # 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, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, + # Boston, MA 02111-1307, USA. + + # 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 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. + + # 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 + 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 0 ;; + --version | -v ) + echo "$version" ; exit 0 ;; + --help | --h* | -h ) + echo "$usage"; exit 0 ;; + -- ) # 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 0;; + + * ) + 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* | freebsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + os=-$maybe_os + basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` + ;; + *) + 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) + os= + basic_machine=$1 + ;; + -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 + ;; + -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/'` + ;; + -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*) + 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 \ + | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ + | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ + | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \ + | clipper \ + | d10v | d30v | dlx | dsp16xx \ + | fr30 | frv \ + | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ + | i370 | i860 | i960 | ia64 \ + | ip2k \ + | m32r | m68000 | m68k | m88k | mcore \ + | mips | mipsbe | mipseb | mipsel | mipsle \ + | mips16 \ + | mips64 | mips64el \ + | mips64vr | mips64vrel \ + | mips64orion | mips64orionel \ + | mips64vr4100 | mips64vr4100el \ + | mips64vr4300 | mips64vr4300el \ + | mips64vr5000 | mips64vr5000el \ + | mipsisa32 | mipsisa32el \ + | mipsisa32r2 | mipsisa32r2el \ + | mipsisa64 | mipsisa64el \ + | mipsisa64sb1 | mipsisa64sb1el \ + | mipsisa64sr71k | mipsisa64sr71kel \ + | mipstx39 | mipstx39el \ + | mn10200 | mn10300 \ + | msp430 \ + | ns16k | ns32k \ + | openrisc | or32 \ + | pdp10 | pdp11 | pj | pjl \ + | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ + | pyramid \ + | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ + | sh64 | sh64le \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | strongarm \ + | tahoe | thumb | tic80 | tron \ + | v850 | v850e \ + | we32k \ + | x86 | xscale | xstormy16 | xtensa \ + | z8k) + basic_machine=$basic_machine-unknown + ;; + m6811 | m68hc11 | m6812 | m68hc12) + # Motorola 68HC11/12. + basic_machine=$basic_machine-unknown + os=-none + ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) + ;; + + # 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-* \ + | 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-* \ + | bs2000-* \ + | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ + | clipper-* | cydra-* \ + | d10v-* | d30v-* | dlx-* \ + | elxsi-* \ + | f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \ + | h8300-* | h8500-* \ + | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ + | i*86-* | i860-* | i960-* | ia64-* \ + | ip2k-* \ + | m32r-* \ + | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ + | m88110-* | m88k-* | mcore-* \ + | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ + | mips16-* \ + | mips64-* | mips64el-* \ + | mips64vr-* | mips64vrel-* \ + | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* \ + | mips64vr4300-* | mips64vr4300el-* \ + | mips64vr5000-* | mips64vr5000el-* \ + | mipsisa32-* | mipsisa32el-* \ + | mipsisa32r2-* | mipsisa32r2el-* \ + | mipsisa64-* | mipsisa64el-* \ + | mipsisa64sb1-* | mipsisa64sb1el-* \ + | mipsisa64sr71k-* | mipsisa64sr71kel-* \ + | mipstx39-* | mipstx39el-* \ + | msp430-* \ + | none-* | np1-* | nv1-* | ns16k-* | ns32k-* \ + | orion-* \ + | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ + | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ + | pyramid-* \ + | romp-* | rs6000-* \ + | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ + | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ + | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ + | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | tahoe-* | thumb-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tron-* \ + | v850-* | v850e-* | vax-* \ + | we32k-* \ + | x86-* | x86_64-* | xps100-* | xscale-* | xstormy16-* \ + | xtensa-* \ + | ymp-* \ + | z8k-*) + ;; + # 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 + ;; + 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 + ;; + 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 + ;; + aux) + basic_machine=m68k-apple + os=-aux + ;; + balance) + basic_machine=ns32k-sequent + os=-dynix + ;; + c90) + basic_machine=c90-cray + os=-unicos + ;; + 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 + ;; + crds | unos) + basic_machine=m68k-crds + ;; + cris | cris-* | etrax*) + basic_machine=cris-axis + ;; + 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 + ;; + 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'm not sure what "Sysv32" means. Should this be sysv3.2? + 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 + ;; + m88k-omron*) + basic_machine=m88k-omron + ;; + magnum | m3230) + basic_machine=mips-mips + os=-sysv + ;; + merlin) + basic_machine=ns32k-utek + os=-sysv + ;; + mingw32) + basic_machine=i386-pc + os=-mingw32 + ;; + 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 + ;; + mmix*) + basic_machine=mmix-knuth + os=-mmixware + ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + morphos) + basic_machine=powerpc-unknown + os=-morphos + ;; + msdos) + basic_machine=i386-pc + os=-msdos + ;; + mvs) + basic_machine=i370-ibm + os=-mvs + ;; + 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 + ;; + nv1) + basic_machine=nv1-cray + os=-unicosmp + ;; + nsr-tandem) + basic_machine=nsr-tandem + ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + or32 | or32-*) + basic_machine=or32-unknown + os=-coff + ;; + 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 + ;; + pbd) + basic_machine=sparc-tti + ;; + pbb) + basic_machine=m68k-tti + ;; + pc532 | pc532-*) + basic_machine=ns32k-pc532 + ;; + pentium | p5 | k5 | k6 | nexgen | viac3) + basic_machine=i586-pc + ;; + pentiumpro | p6 | 6x86 | athlon | athlon_*) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i686-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-*) + basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; + pn) + basic_machine=pn-gould + ;; + power) basic_machine=power-ibm + ;; + ppc) basic_machine=powerpc-unknown + ;; + ppc-*) 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 + ;; + 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 + ;; + sequent) + basic_machine=i386-sequent + ;; + sh) + basic_machine=sh-hitachi + os=-hms + ;; + 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 + ;; + 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 + ;; + tic4x | c4x*) + basic_machine=tic4x-unknown + os=-coff + ;; + tic54x | c54x*) + basic_machine=tic54x-unknown + os=-coff + ;; + tic55x | c55x*) + basic_machine=tic55x-unknown + os=-coff + ;; + tic6x | c6x*) + basic_machine=tic6x-unknown + os=-coff + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; + toad1) + basic_machine=pdp10-xkl + os=-tops20 + ;; + tower | tower-32) + basic_machine=m68k-ncr + ;; + 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 + ;; + xps | xps100) + basic_machine=xps100-honeywell + ;; + ymp) + basic_machine=ymp-cray + os=-unicos + ;; + z8k-*-coff) + basic_machine=z8k-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 + ;; + 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 + ;; + sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele) + basic_machine=sh-unknown + ;; + sh64) + basic_machine=sh64-unknown + ;; + sparc | sparcv9 | sparcv9b) + 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. + -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* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ + | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ + | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ + | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ + | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ + | -chorusos* | -chorusrdb* \ + | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ + | -mingw32* | -linux-gnu* | -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*) + # 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* \ + | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -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 + ;; + -wince*) + os=-wince + ;; + -osfrose*) + os=-osfrose + ;; + -osf*) + os=-osf + ;; + -utek*) + os=-bsd + ;; + -dynix*) + os=-bsd + ;; + -acis*) + os=-aos + ;; + -atheos*) + os=-atheos + ;; + -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 + ;; + -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 + ;; + -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 + *-acorn) + os=-riscix1.2 + ;; + arm*-rebel) + os=-linux + ;; + arm*-semi) + os=-aout + ;; + # 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 + # This also exists in the configure program, but was not the + # default. + # os=-sunos4 + ;; + m68*-cisco) + os=-aout + ;; + 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 + ;; + *-ibm) + os=-aix + ;; + *-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 + ;; + -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 + ;; + -ptx*) + vendor=sequent + ;; + -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 0 + + # Local variables: + # eval: (add-hook 'write-file-hooks 'time-stamp) + # time-stamp-start: "timestamp='" + # time-stamp-format: "%:y-%02m-%02d" + # time-stamp-end: "'" + # End: Index: llvm/projects/sample/autoconf/configure.ac diff -c /dev/null llvm/projects/sample/autoconf/configure.ac:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/configure.ac Wed Oct 15 20:44:19 2003 *************** *** 0 **** --- 1,64 ---- + dnl ************************************************************************** + dnl * Initialize + dnl ************************************************************************** + AC_INIT([[[SAMPLE]]],[[[x.xx]]],[bugs at yourdomain]) + + dnl Place all of the extra autoconf files into the config subdirectory + AC_CONFIG_AUX_DIR([autoconf]) + + dnl Configure a header file + + dnl Configure Makefiles + dnl List every Makefile that ecists within your source tree + + AC_CONFIG_MAKEFILE(Makefile) + AC_CONFIG_MAKEFILE(lib/Makefile) + AC_CONFIG_MAKEFILE(lib/sample/Makefile) + AC_CONFIG_MAKEFILE(tools/Makefile) + AC_CONFIG_MAKEFILE(tools/sample/Makefile) + + dnl ************************************************************************** + dnl * Determine which system we are building on + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Check for programs. + dnl ************************************************************************** + + dnl Verify that the source directory is valid + AC_CONFIG_SRCDIR(["Makefile.common.in"]) + + dnl ************************************************************************** + dnl * Check for libraries. + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Checks for header files. + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Checks for typedefs, structures, and compiler characteristics. + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Checks for library functions. + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Enable various compile-time options + dnl ************************************************************************** + + dnl ************************************************************************** + dnl * Set the location of various third-party software packages + dnl ************************************************************************** + + dnl Location of LLVM source code + AC_ARG_WITH(llvmsrc,AC_HELP_STRING([--with-llvmsrc],[Location of LLVM Source Code]),AC_SUBST(LLVM_SRC,[$withval]),AC_SUBST(LLVM_SRC,[`cd ${srcdir}/../..; pwd`])) + + dnl Location of LLVM object code + AC_ARG_WITH(llvmobj,AC_HELP_STRING([--with-llvmobj],[Location of LLVM Object Code]),AC_SUBST(LLVM_OBJ,[$withval]),AC_SUBST(LLVM_OBJ,[`cd ../..; pwd`])) + + dnl ************************************************************************** + dnl * Create the output files + dnl ************************************************************************** + AC_OUTPUT(Makefile.common) Index: llvm/projects/sample/autoconf/install-sh diff -c /dev/null llvm/projects/sample/autoconf/install-sh:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/install-sh Wed Oct 15 20:44:19 2003 *************** *** 0 **** --- 1,251 ---- + #!/bin/sh + # + # install - install a program, script, or datafile + # This comes from X11R5 (mit/util/scripts/install.sh). + # + # Copyright 1991 by the Massachusetts Institute of Technology + # + # Permission to use, copy, modify, distribute, and sell this software and its + # documentation for any purpose is hereby granted without fee, provided that + # the above copyright notice appear in all copies and that both that + # copyright notice and this permission notice appear in supporting + # documentation, and that the name of M.I.T. not be used in advertising or + # publicity pertaining to distribution of the software without specific, + # written prior permission. M.I.T. makes no representations about the + # suitability of this software for any purpose. It is provided "as is" + # without express or implied warranty. + # + # 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. It can only install one file at a time, a restriction + # shared with many OS's install programs. + + + # set DOITPROG to echo to test this script + + # Don't use :- since 4.3BSD and earlier shells don't like it. + doit="${DOITPROG-}" + + + # put in absolute paths if you don't have them in your path; or use env. vars. + + mvprog="${MVPROG-mv}" + cpprog="${CPPROG-cp}" + chmodprog="${CHMODPROG-chmod}" + chownprog="${CHOWNPROG-chown}" + chgrpprog="${CHGRPPROG-chgrp}" + stripprog="${STRIPPROG-strip}" + rmprog="${RMPROG-rm}" + mkdirprog="${MKDIRPROG-mkdir}" + + transformbasename="" + transform_arg="" + instcmd="$mvprog" + chmodcmd="$chmodprog 0755" + chowncmd="" + chgrpcmd="" + stripcmd="" + rmcmd="$rmprog -f" + mvcmd="$mvprog" + src="" + dst="" + dir_arg="" + + while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac + done + + if [ x"$src" = x ] + then + echo "install: no input file specified" + exit 1 + else + : + fi + + if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=$mkdirprog + fi + else + + # Waiting for this to be detected by the "$instcmd $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + : + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + : + fi + + # If destination is a directory, append the input filename; if your system + # does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + : + fi + fi + + ## this sed command emulates the dirname command + dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + + # Make sure that the destination directory exists. + # this part is taken from Noah Friedman's mkinstalldirs script + + # Skip lots of stat calls in the usual case. + if [ ! -d "$dstdir" ]; then + defaultIFS=' + ' + IFS="${IFS-${defaultIFS}}" + + oIFS="${IFS}" + # Some sh's can't handle IFS=/ for some reason. + IFS='%' + set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` + IFS="${oIFS}" + + pathcomp='' + + while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + : + fi + + pathcomp="${pathcomp}/" + done + fi + + if [ x"$dir_arg" != x ] + then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else : ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else : ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else : ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else : ; fi + else + + # If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + + # don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + : + fi + + # Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + + # Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + + # 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 $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else :;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else :;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else :;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else :;fi && + + # Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + + fi && + + + exit 0 Index: llvm/projects/sample/autoconf/ltmain.sh diff -c /dev/null llvm/projects/sample/autoconf/ltmain.sh:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/ltmain.sh Wed Oct 15 20:44:20 2003 *************** *** 0 **** --- 1,6290 ---- + # ltmain.sh - Provide generalized library-building support services. + # NOTE: Changing this file will not affect anything until you rerun configure. + # + # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003 + # Free Software Foundation, Inc. + # Originally by Gordon Matzigkeit , 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 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, write to the Free Software + # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + # + # 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. + + # Check that we have a working $echo. + if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : + elif test "X`($echo '\t') 2>/dev/null`" = 'X\t'; then + # Yippee, $echo works! + : + else + # Restart under the correct shell, and then maybe $echo will work. + exec $SHELL "$0" --no-reexec ${1+"$@"} + fi + + if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + fi + + # Global variables. + mode=$default_mode + nonopt= + prev= + prevopt= + run= + show="$echo" + show_help= + execute_dlfiles= + lo2o="s/\\.lo\$/.${objext}/" + o2lo="s/\\.${objext}\$/.lo/" + + ##################################### + # Shell function definitions: + # This seems to be the best place for them + + # 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. + win32_libid () { + 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 + if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | \ + grep -E 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then + win32_nmres=`eval $NM -f posix -A $1 | \ + sed -n -e '1,100{/ I /{x;/import/!{s/^/import/;h;p;};x;};}'` + if test "X$win32_nmres" = "Ximport" ; then + win32_libid_type="x86 archive import" + else + win32_libid_type="x86 archive static" + fi + 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 + } + + # End of Shell function definitions + ##################################### + + # Parse our command line options once, thoroughly. + while test "$#" -gt 0 + do + arg="$1" + shift + + case $arg in + -*=*) optarg=`$echo "X$arg" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + execute_dlfiles) + execute_dlfiles="$execute_dlfiles $arg" + ;; + tag) + tagname="$arg" + + # Check whether tagname contains only valid characters + case $tagname in + *[!-_A-Za-z0-9,/]*) + $echo "$progname: invalid tag name: $tagname" 1>&2 + exit 1 + ;; + esac + + case $tagname in + CC) + # Don't test for the "default" C tag, as we know, it's there, but + # not specially marked. + ;; + *) + if grep "^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$" < "$0" > /dev/null; then + taglist="$taglist $tagname" + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$tagname'$/,/^# ### END LIBTOOL TAG CONFIG: '$tagname'$/p' < $0`" + else + $echo "$progname: ignoring unknown tag $tagname" 1>&2 + fi + ;; + esac + ;; + *) + eval "$prev=\$arg" + ;; + esac + + prev= + prevopt= + continue + fi + + # Have we seen a non-optional argument yet? + case $arg in + --help) + show_help=yes + ;; + + --version) + $echo "$PROGRAM (GNU $PACKAGE) $VERSION$TIMESTAMP" + $echo + $echo "Copyright (C) 2003 Free Software Foundation, Inc." + $echo "This is free software; see the source for copying conditions. There is NO" + $echo "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." + exit 0 + ;; + + --config) + ${SED} -e '1,/^# ### BEGIN LIBTOOL CONFIG/d' -e '/^# ### END LIBTOOL CONFIG/,$d' $0 + # Now print the configurations for the tags. + for tagname in $taglist; do + ${SED} -n -e "/^# ### BEGIN LIBTOOL TAG CONFIG: $tagname$/,/^# ### END LIBTOOL TAG CONFIG: $tagname$/p" < "$0" + done + exit 0 + ;; + + --debug) + $echo "$progname: enabling shell trace mode" + set -x + ;; + + --dry-run | -n) + run=: + ;; + + --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 0 + ;; + + --finish) mode="finish" ;; + + --mode) prevopt="--mode" prev=mode ;; + --mode=*) mode="$optarg" ;; + + --preserve-dup-deps) duplicate_deps="yes" ;; + + --quiet | --silent) + show=: + ;; + + --tag) prevopt="--tag" prev=tag ;; + --tag=*) + set tag "$optarg" ${1+"$@"} + shift + prev=tag + ;; + + -dlopen) + prevopt="-dlopen" + prev=execute_dlfiles + ;; + + -*) + $echo "$modename: unrecognized option \`$arg'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + + *) + nonopt="$arg" + break + ;; + esac + done + + if test -n "$prevopt"; then + $echo "$modename: option \`$prevopt' requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # 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= + + if test -z "$show_help"; then + + # Infer the operation mode. + if test -z "$mode"; then + $echo "*** Warning: inferring the mode of operation is deprecated." 1>&2 + $echo "*** Future versions of Libtool will require -mode=MODE be specified." 1>&2 + case $nonopt in + *cc | cc* | *++ | gcc* | *-gcc* | g++* | xlc*) + mode=link + for arg + do + case $arg in + -c) + mode=compile + break + ;; + esac + done + ;; + *db | *dbx | *strace | *truss) + mode=execute + ;; + *install*|cp|mv) + mode=install + ;; + *rm) + mode=uninstall + ;; + *) + # If we have no mode, but dlfiles were specified, then do execute mode. + test -n "$execute_dlfiles" && mode=execute + + # Just use the default operation mode. + if test -z "$mode"; then + if test -n "$nonopt"; then + $echo "$modename: warning: cannot infer operation mode from \`$nonopt'" 1>&2 + else + $echo "$modename: warning: cannot infer operation mode without MODE-ARGS" 1>&2 + fi + fi + ;; + esac + fi + + # Only execute mode is allowed to have -dlopen flags. + if test -n "$execute_dlfiles" && test "$mode" != execute; then + $echo "$modename: unrecognized option \`-dlopen'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Change the help message to a mode-specific one. + generic_help="$help" + help="Try \`$modename --help --mode=$mode' for more information." + + # These modes are in order of execution frequency so that they run quickly. + case $mode in + # libtool compile mode + compile) + modename="$modename: compile" + # Get the compilation command and the source file. + base_compile= + srcfile="$nonopt" # always keep a non-empty value in "srcfile" + suppress_output= + arg_mode=normal + libobj= + + 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) + if test -n "$libobj" ; then + $echo "$modename: you cannot specify \`-o' more than once" 1>&2 + exit 1 + fi + arg_mode=target + continue + ;; + + -static) + build_old_libs=yes + continue + ;; + + -prefer-pic) + pic_mode=yes + continue + ;; + + -prefer-non-pic) + pic_mode=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,*) + args=`$echo "X$arg" | $Xsed -e "s/^-Wc,//"` + lastarg= + save_ifs="$IFS"; IFS=',' + for arg in $args; do + IFS="$save_ifs" + + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + lastarg="$lastarg $arg" + done + IFS="$save_ifs" + lastarg=`$echo "X$lastarg" | $Xsed -e "s/^ //"` + + # Add the arguments to base_compile. + base_compile="$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. + lastarg=`$echo "X$lastarg" | $Xsed -e "$sed_quote_subst"` + + case $lastarg in + # Double-quote args containing other shell metacharacters. + # Many Bourne shells cannot handle close brackets correctly + # in scan sets, so we specify it separately. + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + lastarg="\"$lastarg\"" + ;; + esac + + base_compile="$base_compile $lastarg" + done # for arg + + case $arg_mode in + arg) + $echo "$modename: you must specify an argument for -Xcompile" + exit 1 + ;; + target) + $echo "$modename: you must specify a target with \`-o'" 1>&2 + exit 1 + ;; + *) + # Get the name of the library object. + [ -z "$libobj" ] && libobj=`$echo "X$srcfile" | $Xsed -e 's%^.*/%%'` + ;; + esac + + # Recognize several different file suffixes. + # If the user specifies -o file.o, it is replaced with file.lo + xform='[cCFSifmso]' + case $libobj in + *.ada) xform=ada ;; + *.adb) xform=adb ;; + *.ads) xform=ads ;; + *.asm) xform=asm ;; + *.c++) xform=c++ ;; + *.cc) xform=cc ;; + *.ii) xform=ii ;; + *.class) xform=class ;; + *.cpp) xform=cpp ;; + *.cxx) xform=cxx ;; + *.f90) xform=f90 ;; + *.for) xform=for ;; + *.java) xform=java ;; + esac + + libobj=`$echo "X$libobj" | $Xsed -e "s/\.$xform$/.lo/"` + + case $libobj in + *.lo) obj=`$echo "X$libobj" | $Xsed -e "$lo2o"` ;; + *) + $echo "$modename: cannot determine name of library object from \`$libobj'" 1>&2 + exit 1 + ;; + esac + + # 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. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile 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 "* | " `$echo $CC` "* | "`$echo $CC` "*) ;; + # 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$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case "$base_compile " in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # 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 + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 + # else + # $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + objname=`$echo "X$obj" | $Xsed -e 's%^.*/%%'` + xdir=`$echo "X$obj" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$obj"; then + xdir= + else + xdir=$xdir/ + fi + lobj=${xdir}$objdir/$objname + + if test -z "$base_compile"; then + $echo "$modename: you must specify a compilation command" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # 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 + + $run $rm $removelist + trap "$run $rm $removelist; exit 1" 1 2 15 + + # On Cygwin there's no "real" PIC flag so we must build both object types + case $host_os in + cygwin* | mingw* | pw32* | os2*) + 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 "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext} + lockfile="$output_obj.lock" + removelist="$removelist $output_obj $lockfile" + trap "$run $rm $removelist; exit 1" 1 2 15 + 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 $run ln "$0" "$lockfile" 2>/dev/null; do + $show "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." + + $run $rm $removelist + exit 1 + fi + $echo $srcfile > "$lockfile" + fi + + if test -n "$fix_srcfile_path"; then + eval srcfile=\"$fix_srcfile_path\" + fi + + $run $rm "$libobj" "${libobj}T" + + # Create a libtool object file (analogous to a ".la" file), + # but don't create it if we're doing a dry run. + test -z "$run" && cat > ${libobj}T </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." + + $run $rm $removelist + exit 1 + 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 + $show "$mv $output_obj $lobj" + if $run $mv $output_obj $lobj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the PIC object to the libtool object file. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T </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." + + $run $rm $removelist + exit 1 + fi + + # Just move the object if needed + if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then + $show "$mv $output_obj $obj" + if $run $mv $output_obj $obj; then : + else + error=$? + $run $rm $removelist + exit $error + fi + fi + + # Append the name of the non-PIC object the libtool object file. + # Only append if the libtool object file exists. + test -z "$run" && cat >> ${libobj}T <> ${libobj}T <&2 + fi + if test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + else + if test -z "$pic_flag" && test -n "$link_static_flag"; then + dlopen_self=$dlopen_self_static + fi + fi + build_libtool_libs=no + build_old_libs=yes + prefer_static_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" + base_compile="$base_compile $arg" + shift + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + qarg=\"`$echo "X$arg" | $Xsed -e "$sed_quote_subst"`\" ### testsuite: skip nested quoting test + ;; + *) qarg=$arg ;; + esac + libtool_args="$libtool_args $qarg" + + # If the previous option needs an argument, assign it. + if test -n "$prev"; then + case $prev in + output) + compile_command="$compile_command @OUTPUT@" + finalize_command="$finalize_command @OUTPUT@" + ;; + esac + + case $prev in + dlfiles|dlprefiles) + if test "$preload" = no; then + # Add the symbol object into the linking commands. + compile_command="$compile_command @SYMFILE@" + finalize_command="$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 + dlfiles="$dlfiles $arg" + else + dlprefiles="$dlprefiles $arg" + fi + prev= + continue + ;; + esac + ;; + expsyms) + export_symbols="$arg" + if test ! -f "$arg"; then + $echo "$modename: symbol file \`$arg' does not exist" + exit 1 + fi + prev= + continue + ;; + expsyms_regex) + export_symbols_regex="$arg" + prev= + continue + ;; + inst_prefix) + inst_prefix_dir="$arg" + prev= + continue + ;; + release) + release="-$arg" + prev= + continue + ;; + objectlist) + if test -f "$arg"; then + save_arg=$arg + moreargs= + for fil in `cat $save_arg` + do + # moreargs="$moreargs $fil" + arg=$fil + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + 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 + dlfiles="$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. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$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 + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + done + else + $echo "$modename: link input file \`$save_arg' does not exist" + exit 1 + fi + arg=$save_arg + prev= + continue + ;; + rpath | xrpath) + # We need an absolute path. + case $arg in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + if test "$prev" = rpath; then + case "$rpath " in + *" $arg "*) ;; + *) rpath="$rpath $arg" ;; + esac + else + case "$xrpath " in + *" $arg "*) ;; + *) xrpath="$xrpath $arg" ;; + esac + fi + prev= + continue + ;; + xcompiler) + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $qarg" + continue + ;; + xlinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $wl$qarg" + prev= + compile_command="$compile_command $wl$qarg" + finalize_command="$finalize_command $wl$qarg" + continue + ;; + xcclinker) + linker_flags="$linker_flags $qarg" + compiler_flags="$compiler_flags $qarg" + prev= + compile_command="$compile_command $qarg" + finalize_command="$finalize_command $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 + compile_command="$compile_command $link_static_flag" + finalize_command="$finalize_command $link_static_flag" + fi + continue + ;; + + -allow-undefined) + # FIXME: remove this flag sometime in the future. + $echo "$modename: \`-allow-undefined' is deprecated because it is the default" 1>&2 + continue + ;; + + -avoid-version) + avoid_version=yes + 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 + $echo "$modename: more than one -exported-symbols argument is not allowed" + exit 1 + fi + if test "X$arg" = "X-export-symbols"; then + prev=expsyms + else + prev=expsyms_regex + fi + 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*) + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + ;; + esac + continue + ;; + + -L*) + dir=`$echo "X$arg" | $Xsed -e 's/^-L//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: cannot determine absolute directory name of \`$dir'" 1>&2 + exit 1 + fi + dir="$absdir" + ;; + esac + case "$deplibs " in + *" -L$dir "*) ;; + *) + deplibs="$deplibs -L$dir" + lib_search_path="$lib_search_path $dir" + ;; + esac + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$dir:"*) ;; + *) dllsearchpath="$dllsearchpath:$dir";; + esac + ;; + esac + continue + ;; + + -l*) + if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then + case $host in + *-*-cygwin* | *-*-pw32* | *-*-beos*) + # These systems don't actually have a C or math library (as such) + continue + ;; + *-*-mingw* | *-*-os2*) + # These systems don't actually have a C library (as such) + test "X$arg" = "X-lc" && continue + ;; + *-*-openbsd* | *-*-freebsd*) + # 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 + deplibs="$deplibs -framework System" + continue + esac + elif test "X$arg" = "X-lc_r"; then + case $host in + *-*-openbsd* | *-*-freebsd*) + # Do not include libc_r directly, use -pthread flag. + continue + ;; + esac + fi + deplibs="$deplibs $arg" + continue + ;; + + -module) + module=yes + continue + ;; + + # gcc -m* arguments should be passed to the linker via $compiler_flags + # in order to pass architecture information to the linker + # (e.g. 32 vs 64-bit). This may also be accomplished via -Wl,-mfoo + # but this is not reliable with gcc because gcc may use -mfoo to + # select a different linker, different libraries, etc, while + # -Wl,-mfoo simply passes -mfoo to the linker. + -m*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + if test "$with_gcc" = "yes" ; then + compiler_flags="$compiler_flags $arg" + fi + continue + ;; + + -shrext) + prev=shrext + continue + ;; + + -no-fast-install) + fast_install=no + continue + ;; + + -no-install) + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + # The PATH hackery in wrapper scripts is required on Windows + # in order for the loader to find any dlls it needs. + $echo "$modename: warning: \`-no-install' is ignored for $host" 1>&2 + $echo "$modename: warning: assuming \`-no-fast-install' instead" 1>&2 + fast_install=no + ;; + *) no_install=yes ;; + esac + continue + ;; + + -no-undefined) + allow_undefined=no + continue + ;; + + -objectlist) + prev=objectlist + continue + ;; + + -o) prev=output ;; + + -release) + prev=release + continue + ;; + + -rpath) + prev=rpath + continue + ;; + + -R) + prev=xrpath + continue + ;; + + -R*) + dir=`$echo "X$arg" | $Xsed -e 's/^-R//'` + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + $echo "$modename: only absolute run-paths are allowed" 1>&2 + exit 1 + ;; + esac + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + continue + ;; + + -static) + # 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 + ;; + + -Wc,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wc,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Wl,*) + args=`$echo "X$arg" | $Xsed -e "$sed_quote_subst" -e 's/^-Wl,//'` + arg= + save_ifs="$IFS"; IFS=',' + for flag in $args; do + IFS="$save_ifs" + case $flag in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + flag="\"$flag\"" + ;; + esac + arg="$arg $wl$flag" + compiler_flags="$compiler_flags $wl$flag" + linker_flags="$linker_flags $flag" + done + IFS="$save_ifs" + arg=`$echo "X$arg" | $Xsed -e "s/^ //"` + ;; + + -Xcompiler) + prev=xcompiler + continue + ;; + + -Xlinker) + prev=xlinker + continue + ;; + + -XCClinker) + prev=xcclinker + continue + ;; + + # Some other compiler flag. + -* | +*) + # Unknown arguments in both finalize_command and compile_command need + # to be aesthetically quoted because they are evaled later. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + + *.$objext) + # A standard object. + objs="$objs $arg" + ;; + + *.lo) + # A libtool-controlled object. + + # Check to see that this really is a libtool object. + if (${SED} -e '2q' $arg | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + pic_object= + non_pic_object= + + # Read the .lo file + # If there is no directory component, then add one. + case $arg in + */* | *\\*) . $arg ;; + *) . ./$arg ;; + esac + + if test -z "$pic_object" || \ + test -z "$non_pic_object" || + test "$pic_object" = none && \ + test "$non_pic_object" = none; then + $echo "$modename: cannot find name of object for \`$arg'" 1>&2 + exit 1 + fi + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + 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 + dlfiles="$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. + dlprefiles="$dlprefiles $pic_object" + prev= + fi + + # A PIC object. + libobjs="$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 + non_pic_objects="$non_pic_objects $non_pic_object" + if test -z "$pic_object" || test "$pic_object" = none ; then + arg="$non_pic_object" + fi + fi + else + # Only an error if not doing a dry-run. + if test -z "$run"; then + $echo "$modename: \`$arg' is not a valid libtool object" 1>&2 + exit 1 + else + # Dry-run case. + + # Extract subdirectory from the argument. + xdir=`$echo "X$arg" | $Xsed -e 's%/[^/]*$%%'` + if test "X$xdir" = "X$arg"; then + xdir= + else + xdir="$xdir/" + fi + + pic_object=`$echo "X${xdir}${objdir}/${arg}" | $Xsed -e "$lo2o"` + non_pic_object=`$echo "X${xdir}${arg}" | $Xsed -e "$lo2o"` + libobjs="$libobjs $pic_object" + non_pic_objects="$non_pic_objects $non_pic_object" + fi + fi + ;; + + *.$libext) + # An archive. + deplibs="$deplibs $arg" + old_deplibs="$old_deplibs $arg" + continue + ;; + + *.la) + # A libtool-controlled library. + + if test "$prev" = dlfiles; then + # This library was specified with -dlopen. + dlfiles="$dlfiles $arg" + prev= + elif test "$prev" = dlprefiles; then + # The library was specified with -dlpreopen. + dlprefiles="$dlprefiles $arg" + prev= + else + deplibs="$deplibs $arg" + 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. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") + arg="\"$arg\"" + ;; + esac + ;; + esac # arg + + # Now actually substitute the argument into the commands. + if test -n "$arg"; then + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + done # argument parsing loop + + if test -n "$prev"; then + $echo "$modename: the \`$prevarg' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # 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 link + # command doesn't match the default compiler. + if test -n "$available_tags" && test -z "$tagname"; then + case $base_compile 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 "* | "`$echo $CC` "* | " `$echo $CC` "*) ;; + # 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$" < "$0" > /dev/null; then + # Evaluate the configuration. + eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $0`" + case $base_compile in + "$CC "* | " $CC "* | "`$echo $CC` "* | " `$echo $CC` "*) + # The compiler in $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 + $echo "$modename: unable to infer tagged configuration" + $echo "$modename: specify a tag with \`--tag'" 1>&2 + exit 1 + # else + # $echo "$modename: using $tagname tagged configuration" + fi + ;; + esac + fi + + if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then + eval arg=\"$export_dynamic_flag_spec\" + compile_command="$compile_command $arg" + finalize_command="$finalize_command $arg" + fi + + oldlibs= + # calculate the name of the file, without its directory + outputname=`$echo "X$output" | $Xsed -e 's%^.*/%%'` + libobjs_save="$libobjs" + + if test -n "$shlibpath_var"; then + # get the directories listed in $shlibpath_var + eval shlib_search_path=\`\$echo \"X\${$shlibpath_var}\" \| \$Xsed -e \'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\" + + output_objdir=`$echo "X$output" | $Xsed -e 's%/[^/]*$%%'` + if test "X$output_objdir" = "X$output"; then + output_objdir="$objdir" + else + output_objdir="$output_objdir/$objdir" + fi + # Create the object directory. + if test ! -d "$output_objdir"; then + $show "$mkdir $output_objdir" + $run $mkdir $output_objdir + status=$? + if test "$status" -ne 0 && test ! -d "$output_objdir"; then + exit $status + fi + fi + + # Determine the type of output + case $output in + "") + $echo "$modename: you must specify an output file" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + *.$libext) linkmode=oldlib ;; + *.lo | *.$objext) linkmode=obj ;; + *.la) linkmode=lib ;; + *) linkmode=prog ;; # Anything else should be a program. + esac + + case $host in + *cygwin* | *mingw* | *pw32*) + # don't eliminate duplcations in $postdeps and $predeps + duplicate_compiler_generated_deps=yes + ;; + *) + duplicate_compiler_generated_deps=$duplicate_deps + ;; + 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 test "X$duplicate_deps" = "Xyes" ; then + case "$libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + libs="$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 test "X$duplicate_compiler_generated_deps" = "Xyes" ; then + for pre_post_dep in $predeps $postdeps; do + case "$pre_post_deps " in + *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;; + esac + pre_post_deps="$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 link" + for file in $dlfiles $dlprefiles; do + case $file in + *.la) ;; + *) + $echo "$modename: libraries can \`-dlopen' only libtool libraries: $file" 1>&2 + exit 1 + ;; + 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 + 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 "$pass" = dlopen; then + # Collect dlpreopened libraries + save_deplibs="$deplibs" + deplibs= + fi + for deplib in $libs; do + lib= + found=no + case $deplib in + -l*) + if test "$linkmode" != lib && test "$linkmode" != prog; then + $echo "$modename: warning: \`-l' is ignored for archives/objects" 1>&2 + continue + fi + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + name=`$echo "X$deplib" | $Xsed -e 's/^-l//'` + for searchdir in $newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path; do + # Search the libtool library + lib="$searchdir/lib${name}.la" + if test -f "$lib"; then + found=yes + break + fi + 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 (${SED} -e '2q' $lib | + grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + library_names= + old_library= + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + 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 + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + 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 + -L*) + case $linkmode in + lib) + deplibs="$deplib $deplibs" + test "$pass" = conv && continue + newdependency_libs="$deplib $newdependency_libs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + ;; + prog) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + if test "$pass" = scan; then + deplibs="$deplib $deplibs" + newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'` + else + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + fi + ;; + *) + $echo "$modename: warning: \`-L' is ignored for archives/objects" 1>&2 + ;; + esac # linkmode + continue + ;; # -L + -R*) + if test "$pass" = link; then + dir=`$echo "X$deplib" | $Xsed -e 's/^-R//'` + # Make sure the xrpath contains only unique directories. + case "$xrpath " in + *" $dir "*) ;; + *) xrpath="$xrpath $dir" ;; + esac + fi + deplibs="$deplib $deplibs" + continue + ;; + *.la) lib="$deplib" ;; + *.$libext) + if test "$pass" = conv; then + deplibs="$deplib $deplibs" + continue + fi + case $linkmode in + lib) + if test "$deplibs_check_method" != pass_all; 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 used here." + else + $echo + $echo "*** Warning: Linking the shared library $output against the" + $echo "*** static library $deplib is not portable!" + deplibs="$deplib $deplibs" + fi + 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. + newdlprefiles="$newdlprefiles $deplib" + compile_deplibs="$deplib $compile_deplibs" + finalize_deplibs="$deplib $finalize_deplibs" + else + newdlfiles="$newdlfiles $deplib" + fi + fi + continue + ;; + %DEPLIBS%) + alldeplibs=yes + continue + ;; + esac # case $deplib + if test "$found" = yes || test -f "$lib"; then : + else + $echo "$modename: cannot find the library \`$lib'" 1>&2 + exit 1 + fi + + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $lib | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + + ladir=`$echo "X$lib" | $Xsed -e 's%/[^/]*$%%'` + test "X$ladir" = "X$lib" && ladir="." + + dlname= + dlopen= + dlpreopen= + libdir= + library_names= + old_library= + # If the library was installed with an old release of libtool, + # it will not redefine variables installed, or shouldnotlink + installed=yes + shouldnotlink=no + + # Read the .la file + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + + if test "$linkmode,$pass" = "lib,link" || + test "$linkmode,$pass" = "prog,scan" || + { test "$linkmode" != prog && test "$linkmode" != lib; }; then + test -n "$dlopen" && dlfiles="$dlfiles $dlopen" + test -n "$dlpreopen" && dlprefiles="$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 + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + # It is a libtool convenience library, so add in its objects. + convenience="$convenience $ladir/$objdir/$old_library" + old_convenience="$old_convenience $ladir/$objdir/$old_library" + tmp_libs= + for deplib in $dependency_libs; do + deplibs="$deplib $deplibs" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + elif test "$linkmode" != prog && test "$linkmode" != lib; then + $echo "$modename: \`$lib' is not a convenience library" 1>&2 + exit 1 + fi + continue + fi # $pass = conv + + + # Get the name of the library we link against. + linklib= + for l in $old_library $library_names; do + linklib="$l" + done + if test -z "$linklib"; then + $echo "$modename: cannot find name of link library for \`$lib'" 1>&2 + exit 1 + fi + + # This library was specified with -dlopen. + if test "$pass" = dlopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlopen a convenience library: \`$lib'" 1>&2 + exit 1 + 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. + dlprefiles="$dlprefiles $lib $dependency_libs" + else + newdlfiles="$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 + $echo "$modename: warning: cannot determine absolute directory name of \`$ladir'" 1>&2 + $echo "$modename: passing it literally to the linker, although it might fail" 1>&2 + abs_ladir="$ladir" + fi + ;; + esac + laname=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + + # Find the relevant object directory and library name. + if test "X$installed" = Xyes; then + if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then + $echo "$modename: warning: library \`$lib' was moved." 1>&2 + dir="$ladir" + absdir="$abs_ladir" + libdir="$abs_ladir" + else + dir="$libdir" + absdir="$libdir" + fi + else + dir="$ladir/$objdir" + absdir="$abs_ladir/$objdir" + # Remove this search path later + notinst_path="$notinst_path $abs_ladir" + fi # $installed = yes + name=`$echo "X$laname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + + # This library was specified with -dlpreopen. + if test "$pass" = dlpreopen; then + if test -z "$libdir"; then + $echo "$modename: cannot -dlpreopen a convenience library: \`$lib'" 1>&2 + exit 1 + fi + # Prefer using a static library (so that no silly _DYNAMIC symbols + # are required to link). + if test -n "$old_library"; then + newdlprefiles="$newdlprefiles $dir/$old_library" + # Otherwise, use the dlname, so that lt_dlopen finds it. + elif test -n "$dlname"; then + newdlprefiles="$newdlprefiles $dir/$dlname" + else + newdlprefiles="$newdlprefiles $dir/$linklib" + fi + 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 + newlib_search_path="$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*) newlib_search_path="$newlib_search_path "`$echo "X$deplib" | $Xsed -e 's/^-L//'`;; ### testsuite: skip nested quoting test + 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 test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$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 -z "$old_library"; }; then + # We need to hardcode the library path + if test -n "$shlibpath_var"; then + # Make sure the rpath contains only unique directories. + case "$temp_rpath " in + *" $dir "*) ;; + *" $absdir "*) ;; + *) temp_rpath="$temp_rpath $dir" ;; + 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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$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 + if test -n "$library_names" && + { test "$prefer_static_libs" = no || test -z "$old_library"; }; then + if test "$installed" = no; then + notinst_deplibs="$notinst_deplibs $lib" + need_relink=yes + fi + # This is a shared library + + # Warn about portability, can't link against -module's on some systems (darwin) + if 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 "*) ;; + *) compile_rpath="$compile_rpath $absdir" + esac + ;; + esac + case " $sys_lib_dlsearch_path " in + *" $libdir "*) ;; + *) + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$finalize_rpath $libdir" + esac + ;; + esac + fi + + if test -n "$old_archive_from_expsyms_cmds"; then + # figure out the soname + set dummy $library_names + realname="$2" + shift; 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*) + major=`expr $current - $age` + versuffix="-$major" + ;; + esac + eval soname=\"$soname_spec\" + else + soname="$realname" + fi + + # Make a new name for the extract_expsyms_cmds to use + soroot="$soname" + soname=`$echo $soroot | ${SED} -e 's/^.*\///'` + newlib="libimp-`$echo $soname | ${SED} 's/^lib//;s/\.dll$//'`.a" + + # If the library has no export list, then create one now + if test -f "$output_objdir/$soname-def"; then : + else + $show "extracting exported symbol list from \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$extract_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Create $newlib + if test -f "$output_objdir/$newlib"; then :; else + $show "generating import library for \`$soname'" + save_ifs="$IFS"; IFS='~' + eval cmds=\"$old_archive_from_expsyms_cmds\" + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + 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 "$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* ) add_dir="-L$dir" ;; + *-*-darwin* ) + # if the lib is a module then we can not link against it, someone + # is ignoring the new warnings I added + if /usr/bin/file -L $add 2> /dev/null | grep "bundle" >/dev/null ; 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 + 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; then + add="$dir/$linklib" + elif test "$hardcode_minus_L" = yes; then + add_dir="-L$dir" + # Try looking first in the location we're being installed to. + if test -n "$inst_prefix_dir"; then + case "$libdir" in + [\\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + 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 + $echo "$modename: configuration error: unsupported hardcode properties" + exit 1 + fi + + if test -n "$add_shlibpath"; then + case :$compile_shlibpath: in + *":$add_shlibpath:"*) ;; + *) compile_shlibpath="$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:"*) ;; + *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;; + esac + fi + fi + fi + + if test "$linkmode" = prog || test "$mode" = relink; then + add_shlibpath= + add_dir= + add= + # Finalize command for both is simple: just hardcode it. + if test "$hardcode_direct" = yes; 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:"*) ;; + *) finalize_shlibpath="$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 + [\\/]*) + add_dir="-L$inst_prefix_dir$libdir $add_dir" + ;; + 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 + convenience="$convenience $dir/$old_library" + old_convenience="$old_convenience $dir/$old_library" + 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*) temp_xrpath=`$echo "X$libdir" | $Xsed -e 's/^-R//'` + case " $xrpath " in + *" $temp_xrpath "*) ;; + *) xrpath="$xrpath $temp_xrpath";; + esac;; + *) temp_deplibs="$temp_deplibs $libdir";; + esac + done + dependency_libs="$temp_deplibs" + fi + + newlib_search_path="$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" + if test "X$duplicate_deps" = "Xyes" ; then + case "$tmp_libs " in + *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;; + esac + fi + tmp_libs="$tmp_libs $deplib" + done + + if test "$link_all_deplibs" != no; then + # Add the search paths of all dependency libraries + for deplib in $dependency_libs; do + case $deplib in + -L*) path="$deplib" ;; + *.la) + dir=`$echo "X$deplib" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$deplib" && dir="." + # We need an absolute path. + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;; + *) + absdir=`cd "$dir" && pwd` + if test -z "$absdir"; then + $echo "$modename: warning: cannot determine absolute directory name of \`$dir'" 1>&2 + absdir="$dir" + fi + ;; + esac + if grep "^installed=no" $deplib > /dev/null; then + path="$absdir/$objdir" + else + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + if test "$absdir" != "$libdir"; then + $echo "$modename: warning: \`$deplib' seems to be moved" 1>&2 + fi + path="$absdir" + fi + depdepl= + case $host in + *-*-darwin*) + # we do not want to link against static libs, but need to link against shared + 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 "$path/$depdepl" ; then + depdepl="$path/$depdepl" + fi + newlib_search_path="$newlib_search_path $path" + path="" + fi + ;; + *) + path="-L$path" + ;; + esac + + ;; + -l*) + case $host in + *-*-darwin*) + # Again, we only want to link against shared libraries + eval tmp_libs=`$echo "X$deplib" | $Xsed -e "s,^\-l,,"` + for tmp in $newlib_search_path ; do + if test -f "$tmp/lib$tmp_libs.dylib" ; then + eval depdepl="$tmp/lib$tmp_libs.dylib" + break + fi + done + path="" + ;; + *) continue ;; + esac + ;; + *) continue ;; + esac + case " $deplibs " in + *" $depdepl "*) ;; + *) deplibs="$deplibs $depdepl" ;; + esac + case " $deplibs " in + *" $path "*) ;; + *) deplibs="$deplibs $path" ;; + esac + done + fi # link_all_deplibs != no + fi # linkmode = lib + done # for deplib in $libs + 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 "*) ;; + *) lib_search_path="$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 "*) ;; + *) tmp_libs="$tmp_libs $deplib" ;; + esac + ;; + *) tmp_libs="$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 + tmp_libs="$tmp_libs $i" + fi + done + dependency_libs=$tmp_libs + done # for pass + if test "$linkmode" = prog; then + dlfiles="$newdlfiles" + dlprefiles="$newdlprefiles" + fi + + case $linkmode in + oldlib) + if test -n "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for archives" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for archives" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for archives" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for archives" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for archives" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for archives" 1>&2 + fi + + if test -n "$export_symbols" || test -n "$export_symbols_regex"; then + $echo "$modename: warning: \`-export-symbols' is ignored for archives" 1>&2 + fi + + # Now set the variables for building old libraries. + build_libtool_libs=no + oldlibs="$output" + objs="$objs$old_deplibs" + ;; + + lib) + # Make sure we only generate libraries of the form `libNAME.la'. + case $outputname in + lib*) + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//' -e 's/^lib//'` + eval shared_ext=\"$shrext\" + eval libname=\"$libname_spec\" + ;; + *) + if test "$module" = no; then + $echo "$modename: libtool library \`$output' must begin with \`lib'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + if test "$need_lib_prefix" != no; then + # Add the "lib" prefix for modules if required + name=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + eval shared_ext=\"$shrext\" + eval libname=\"$libname_spec\" + else + libname=`$echo "X$outputname" | $Xsed -e 's/\.la$//'` + fi + ;; + esac + + if test -n "$objs"; then + if test "$deplibs_check_method" != pass_all; then + $echo "$modename: cannot build libtool library \`$output' from non-libtool objects on this host:$objs" 2>&1 + exit 1 + else + $echo + $echo "*** Warning: Linking the shared library $output against the non-libtool" + $echo "*** objects $objs is not portable!" + libobjs="$libobjs $objs" + fi + fi + + if test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen self' is ignored for libtool libraries" 1>&2 + fi + + set dummy $rpath + if test "$#" -gt 2; then + $echo "$modename: warning: ignoring multiple \`-rpath's for a libtool library" 1>&2 + fi + install_libdir="$2" + + 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 + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info/-version-number' is ignored for convenience libraries" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for convenience libraries" 1>&2 + fi + else + + # Parse the version information argument. + save_ifs="$IFS"; IFS=':' + set dummy $vinfo 0 0 0 + IFS="$save_ifs" + + if test -n "$8"; then + $echo "$modename: too many parameters to \`-version-info'" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # 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="$2" + number_minor="$3" + number_revision="$4" + # + # 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 + darwin|linux|osf|windows) + current=`expr $number_major + $number_minor` + age="$number_minor" + revision="$number_revision" + ;; + freebsd-aout|freebsd-elf|sunos) + current="$number_major" + revision="$number_minor" + age="0" + ;; + irix|nonstopux) + current=`expr $number_major + $number_minor - 1` + age="$number_minor" + revision="$number_minor" + ;; + esac + ;; + no) + current="$2" + revision="$3" + age="$4" + ;; + 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]) ;; + *) + $echo "$modename: CURRENT \`$current' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $revision in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: REVISION \`$revision' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + case $age in + 0 | [1-9] | [1-9][0-9] | [1-9][0-9][0-9]) ;; + *) + $echo "$modename: AGE \`$age' is not a nonnegative integer" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + ;; + esac + + if test "$age" -gt "$current"; then + $echo "$modename: AGE \`$age' is greater than the current interface number \`$current'" 1>&2 + $echo "$modename: \`$vinfo' is not valid version information" 1>&2 + exit 1 + 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 + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + # Darwin ld doesn't like 0 for these options... + minor_current=`expr $current + 1` + 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) + major=`expr $current - $age + 1` + + 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 + iface=`expr $revision - $loop` + loop=`expr $loop - 1` + verstring="$verstring_prefix$major.$iface:$verstring" + done + + # Before this point, $major must not contain `.'. + major=.$major + versuffix="$major.$revision" + ;; + + linux) + major=.`expr $current - $age` + versuffix="$major.$age.$revision" + ;; + + osf) + major=.`expr $current - $age` + 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 + iface=`expr $current - $loop` + loop=`expr $loop - 1` + verstring="$verstring:${iface}.0" + done + + # Make executables depend on our current version. + verstring="$verstring:${current}.0" + ;; + + sunos) + major=".$current" + versuffix=".$current.$revision" + ;; + + windows) + # Use '-' rather than '.', since we only want one + # extension on DOS 8.3 filesystems. + major=`expr $current - $age` + versuffix="-$major" + ;; + + *) + $echo "$modename: unknown library version type \`$version_type'" 1>&2 + $echo "Fatal configuration error. See the $PACKAGE docs for more information." 1>&2 + exit 1 + ;; + 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 + $echo "$modename: warning: undefined symbols not allowed in $host shared libraries" 1>&2 + build_libtool_libs=no + build_old_libs=yes + fi + else + # Don't allow undefined symbols. + allow_undefined_flag="$no_undefined_flag" + fi + fi + + if test "$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) + ;; + $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*) + removelist="$removelist $p" + ;; + *) ;; + esac + done + if test -n "$removelist"; then + $show "${rm}r $removelist" + $run ${rm}r $removelist + fi + fi + + # Now set the variables for building old libraries. + if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then + oldlibs="$oldlibs $output_objdir/$libname.$libext" + + # Transform .lo files to .o files. + oldobjs="$objs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP` + fi + + # Eliminate all temporary directories. + for path in $notinst_path; do + lib_search_path=`$echo "$lib_search_path " | ${SED} -e 's% $path % %g'` + deplibs=`$echo "$deplibs " | ${SED} -e 's% -L$path % %g'` + dependency_libs=`$echo "$dependency_libs " | ${SED} -e '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 + temp_xrpath="$temp_xrpath -R$libdir" + case "$finalize_rpath " in + *" $libdir "*) ;; + *) finalize_rpath="$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 "*) ;; + *) dlfiles="$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 "*) ;; + *) dlprefiles="$dlprefiles $lib" ;; + esac + done + + if test "$build_libtool_libs" = yes; then + if test -n "$rpath"; then + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos*) + # these systems don't actually have a c library (as such)! + ;; + *-*-rhapsody* | *-*-darwin1.[012]) + # Rhapsody C library is in the System framework + deplibs="$deplibs -framework System" + ;; + *-*-netbsd*) + # Don't link with libc until the a.out ld.so is fixed. + ;; + *-*-openbsd* | *-*-freebsd*) + # Do not include libc due to us having libc/libc_r. + test "X$arg" = "X-lc" && continue + ;; + *) + # Add libc to deplibs on all other systems if necessary. + if test "$build_libtool_need_lc" = "yes"; then + deplibs="$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. + $rm conftest.c + cat > conftest.c </dev/null` + 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 "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";; + esac + done + if eval $file_magic_cmd \"\$potlib\" 2>/dev/null \ + | ${SED} 10q \ + | $EGREP "$file_magic_regex" > /dev/null; then + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + match_pattern*) + set dummy $deplibs_check_method + match_pattern_regex=`expr "$deplibs_check_method" : "$2 \(.*\)"` + for a_deplib in $deplibs; do + name="`expr $a_deplib : '-l\(.*\)'`" + # If $name is empty we are operating on a -L argument. + if test -n "$name" && test "$name" != "0"; then + if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then + case " $predeps $postdeps " in + *" $a_deplib "*) + newdeplibs="$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 + newdeplibs="$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 + else + # Add a -L argument. + newdeplibs="$newdeplibs $a_deplib" + fi + done # Gone through all deplibs. + ;; + none | unknown | *) + newdeplibs="" + tmp_deplibs=`$echo "X $deplibs" | $Xsed -e 's/ -lc$//' \ + -e '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 "X $tmp_deplibs" | ${SED} -e "1s,^X,," -e "s,$i,,"` + done + fi + if $echo "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' \ + | grep . >/dev/null; then + $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 + fi + ;; + 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 is the System framework + newdeplibs=`$echo "X $newdeplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + 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 + + # 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 + if test "$hardcode_into_libs" = yes; then + # Hardcode the library paths + hardcode_libdirs= + dep_rpath= + rpath="$finalize_rpath" + test "$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 + 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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + dep_rpath="$dep_rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$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" + if test -n "$hardcode_libdir_flag_spec_ld"; then + eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\" + else + eval dep_rpath=\"$hardcode_libdir_flag_spec\" + fi + fi + if test -n "$runpath_var" && test -n "$perm_rpath"; then + # We should set the runpath_var. + rpath= + for dir in $perm_rpath; do + rpath="$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 "$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\" + eval library_names=\"$library_names_spec\" + set dummy $library_names + realname="$2" + shift; 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" + for link + do + linknames="$linknames $link" + done + + # Use standard objects if they are pic + test -z "$pic_flag" && libobjs=`$echo "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + eval cmds=\"$export_symbols_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + if len=`expr "X$cmd" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + $show "$cmd" + $run eval "$cmd" || exit $? + skipped_export=false + else + # The command line is too long to execute in one step. + $show "using reloadable object file for export list..." + skipped_export=: + fi + done + IFS="$save_ifs" + if test -n "$export_symbols_regex"; then + $show "$EGREP -e \"$export_symbols_regex\" \"$export_symbols\" > \"${export_symbols}T\"" + $run eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' + $show "$mv \"${export_symbols}T\" \"$export_symbols\"" + $run eval '$mv "${export_symbols}T" "$export_symbols"' + fi + fi + fi + + if test -n "$export_symbols" && test -n "$include_expsyms"; then + $run eval '$echo "X$include_expsyms" | $SP2NL >> "$export_symbols"' + fi + + tmp_deplibs= + for test_deplib in $deplibs; do + case " $convenience " in + *" $test_deplib "*) ;; + *) + tmp_deplibs="$tmp_deplibs $test_deplib" + ;; + esac + done + deplibs="$tmp_deplibs" + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + save_libobjs=$libobjs + eval libobjs=\"\$libobjs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + libobjs="$libobjs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then + eval flag=\"$thread_safe_flag_spec\" + linker_flags="$linker_flags $flag" + fi + + # Make a backup of the uninstalled library when relinking + if test "$mode" = relink; then + $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 cmds=\"$module_expsym_cmds\" + else + eval cmds=\"$module_cmds\" + fi + else + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + fi + + if test "X$skipped_export" != "X:" && len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # The command line is too long to link in one step, link piecewise. + $echo "creating reloadable object files..." + + # 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 + + # Clear the reloadable object creation command queue and + # initialize k to one. + test_cmds= + concat_cmds= + objlist= + delfiles= + last_robj= + k=1 + output=$output_objdir/$save_output-${k}.$objext + # Loop over the list of objects to be linked. + for obj in $save_libobjs + do + eval test_cmds=\"$reload_cmds $objlist $last_robj\" + if test "X$objlist" = X || + { len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$max_cmd_len"; }; then + objlist="$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. + eval concat_cmds=\"$reload_cmds $objlist $last_robj\" + else + # All subsequent reloadable object files will link in + # the last one created. + eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj\" + fi + last_robj=$output_objdir/$save_output-${k}.$objext + k=`expr $k + 1` + output=$output_objdir/$save_output-${k}.$objext + objlist=$obj + len=1 + 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~ + eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\" + + if ${skipped_export-false}; then + $show "generating symbol list for \`$libname.la'" + export_symbols="$output_objdir/$libname.exp" + $run $rm $export_symbols + libobjs=$output + # Append the command to create the export file. + eval concat_cmds=\"\$concat_cmds~$export_symbols_cmds\" + fi + + # Set up a command to remove the reloadale object files + # after they are used. + i=0 + while test "$i" -lt "$k" + do + i=`expr $i + 1` + delfiles="$delfiles $output_objdir/$save_output-${i}.$objext" + done + + $echo "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" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + 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\" + fi + # Expand the library linking commands again to reset the + # value of $libobjs for piecewise linking. + + # Do each of the archive commands. + if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then + eval cmds=\"$archive_expsym_cmds\" + else + eval cmds=\"$archive_cmds\" + fi + + # Append the command to remove the reloadable object files + # to the just-reset $cmds. + eval cmds=\"\$cmds~$rm $delfiles\" + fi + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Restore the uninstalled library and exit + if test "$mode" = relink; then + $run eval '(cd $output_objdir && $rm ${realname}T && $mv $realname ${realname}T && $mv "$realname"U $realname)' || exit $? + exit 0 + fi + + # Create links to the real library. + for linkname in $linknames; do + if test "$realname" != "$linkname"; then + $show "(cd $output_objdir && $rm $linkname && $LN_S $realname $linkname)" + $run 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 "$deplibs"; then + $echo "$modename: warning: \`-l' and \`-L' are ignored for objects" 1>&2 + fi + + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + $echo "$modename: warning: \`-dlopen' is ignored for objects" 1>&2 + fi + + if test -n "$rpath"; then + $echo "$modename: warning: \`-rpath' is ignored for objects" 1>&2 + fi + + if test -n "$xrpath"; then + $echo "$modename: warning: \`-R' is ignored for objects" 1>&2 + fi + + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for objects" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for objects" 1>&2 + fi + + case $output in + *.lo) + if test -n "$objs$old_deplibs"; then + $echo "$modename: cannot build library object \`$output' from non-libtool objects" 1>&2 + exit 1 + fi + libobj="$output" + obj=`$echo "X$output" | $Xsed -e "$lo2o"` + ;; + *) + libobj= + obj="$output" + ;; + esac + + # Delete the old objects. + $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 + wl= + + if test -n "$convenience"; then + if test -n "$whole_archive_flag_spec"; then + eval reload_conv_objs=\"\$reload_objs $whole_archive_flag_spec\" + else + gentop="$output_objdir/${obj}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + for xlib in $convenience; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + reload_conv_objs="$reload_objs "`find $xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP` + done + fi + fi + + # Create the old-style object. + reload_objs="$objs$old_deplibs "`$echo "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test + + output="$obj" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + + # Exit if we aren't doing a library object file. + if test -z "$libobj"; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + fi + + if test "$build_libtool_libs" != yes; then + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${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" + # $run eval "echo timestamp > $libobj" || exit $? + exit 0 + 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" + eval cmds=\"$reload_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + if test -n "$gentop"; then + $show "${rm}r $gentop" + $run ${rm}r $gentop + fi + + exit 0 + ;; + + prog) + case $host in + *cygwin*) output=`$echo $output | ${SED} -e 's,.exe$,,;s,$,.exe,'` ;; + esac + if test -n "$vinfo"; then + $echo "$modename: warning: \`-version-info' is ignored for programs" 1>&2 + fi + + if test -n "$release"; then + $echo "$modename: warning: \`-release' is ignored for programs" 1>&2 + fi + + if test "$preload" = yes; then + if test "$dlopen_support" = unknown && test "$dlopen_self" = unknown && + test "$dlopen_self_static" = unknown; then + $echo "$modename: warning: \`AC_LIBTOOL_DLOPEN' not used. Assuming no dlopen support." + fi + fi + + case $host in + *-*-rhapsody* | *-*-darwin1.[012]) + # On Rhapsody replace the C library is the System framework + compile_deplibs=`$echo "X $compile_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + finalize_deplibs=`$echo "X $finalize_deplibs" | $Xsed -e 's/ -lc / -framework System /'` + ;; + esac + + case $host in + *darwin*) + # Don't allow lazy linking, it breaks C++ global constructors + if test "$tagname" = CXX ; then + compile_command="$compile_command ${wl}-bind_at_load" + finalize_command="$finalize_command ${wl}-bind_at_load" + fi + ;; + esac + + compile_command="$compile_command $compile_deplibs" + finalize_command="$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 "*) ;; + *) finalize_rpath="$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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$perm_rpath " in + *" $libdir "*) ;; + *) perm_rpath="$perm_rpath $libdir" ;; + esac + fi + case $host in + *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2*) + case :$dllsearchpath: in + *":$libdir:"*) ;; + *) dllsearchpath="$dllsearchpath:$libdir";; + 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"*) + ;; + *) + hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir" + ;; + esac + fi + else + eval flag=\"$hardcode_libdir_flag_spec\" + rpath="$rpath $flag" + fi + elif test -n "$runpath_var"; then + case "$finalize_perm_rpath " in + *" $libdir "*) ;; + *) finalize_perm_rpath="$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 "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + finalize_command=`$echo "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + fi + + dlsyms= + if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then + if test -n "$NM" && test -n "$global_symbol_pipe"; then + dlsyms="${outputname}S.c" + else + $echo "$modename: not configured to extract global symbols from dlpreopened files" 1>&2 + fi + fi + + if test -n "$dlsyms"; then + case $dlsyms in + "") ;; + *.c) + # Discover the nlist of each of the dlfiles. + nlist="$output_objdir/${outputname}.nm" + + $show "$rm $nlist ${nlist}S ${nlist}T" + $run $rm "$nlist" "${nlist}S" "${nlist}T" + + # Parse the name list into a source file. + $show "creating $output_objdir/$dlsyms" + + test -z "$run" && $echo > "$output_objdir/$dlsyms" "\ + /* $dlsyms - symbol resolution table for \`$outputname' dlsym emulation. */ + /* Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP */ + + #ifdef __cplusplus + extern \"C\" { + #endif + + /* Prevent the only kind of declaration conflicts we can make. */ + #define lt_preloaded_symbols some_other_symbol + + /* External symbol declarations for the compiler. */\ + " + + if test "$dlself" = yes; then + $show "generating symbol list for \`$output'" + + test -z "$run" && $echo ': @PROGRAM@ ' > "$nlist" + + # Add our own program objects to the symbol list. + progfiles=`$echo "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP` + for arg in $progfiles; do + $show "extracting global C symbols from \`$arg'" + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -n "$exclude_expsyms"; then + $run eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + if test -n "$export_symbols_regex"; then + $run eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' + $run eval '$mv "$nlist"T "$nlist"' + fi + + # Prepare the list of exported symbols + if test -z "$export_symbols"; then + export_symbols="$output_objdir/$output.exp" + $run $rm $export_symbols + $run eval "${SED} -n -e '/^: @PROGRAM@$/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' + else + $run eval "${SED} -e 's/\([][.*^$]\)/\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$output.exp"' + $run eval 'grep -f "$output_objdir/$output.exp" < "$nlist" > "$nlist"T' + $run eval 'mv "$nlist"T "$nlist"' + fi + fi + + for arg in $dlprefiles; do + $show "extracting global C symbols from \`$arg'" + name=`$echo "$arg" | ${SED} -e 's%^.*/%%'` + $run eval '$echo ": $name " >> "$nlist"' + $run eval "$NM $arg | $global_symbol_pipe >> '$nlist'" + done + + if test -z "$run"; then + # 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/$dlsyms"' + else + $echo '/* NONE */' >> "$output_objdir/$dlsyms" + fi + + $echo >> "$output_objdir/$dlsyms" "\ + + #undef lt_preloaded_symbols + + #if defined (__STDC__) && __STDC__ + # define lt_ptr void * + #else + # define lt_ptr char * + # define const + #endif + + /* The mapping between symbol names and symbols. */ + const struct { + const char *name; + lt_ptr address; + } + lt_preloaded_symbols[] = + {\ + " + + eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$dlsyms" + + $echo >> "$output_objdir/$dlsyms" "\ + {0, (lt_ptr) 0} + }; + + /* This works around a problem in FreeBSD linker */ + #ifdef FREEBSD_WORKAROUND + static const void *lt_preloaded_setup() { + return lt_preloaded_symbols; + } + #endif + + #ifdef __cplusplus + } + #endif\ + " + fi + + pic_flag_for_symtable= + 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*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND";; + esac;; + *-*-hpux*) + case "$compile_command " in + *" -static "*) ;; + *) pic_flag_for_symtable=" $pic_flag";; + esac + esac + + # Now compile the dynamic symbol file. + $show "(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable \"$dlsyms\")" + $run eval '(cd $output_objdir && $LTCC -c$no_builtin_flag$pic_flag_for_symtable "$dlsyms")' || exit $? + + # Clean up the generated files. + $show "$rm $output_objdir/$dlsyms $nlist ${nlist}S ${nlist}T" + $run $rm "$output_objdir/$dlsyms" "$nlist" "${nlist}S" "${nlist}T" + + # Transform the symbol file into the correct name. + compile_command=`$echo "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/${outputname}S.${objext}%"` + ;; + *) + $echo "$modename: unknown suffix for \`$dlsyms'" 1>&2 + exit 1 + ;; + 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 "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"` + finalize_command=`$echo "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"` + fi + + if test "$need_relink" = no || test "$build_libtool_libs" != yes; then + # Replace the output file specification. + compile_command=`$echo "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + link_command="$compile_command$compile_rpath" + + # We have no uninstalled library dependencies, so finalize right now. + $show "$link_command" + $run eval "$link_command" + status=$? + + # Delete the generated files. + if test -n "$dlsyms"; then + $show "$rm $output_objdir/${outputname}S.${objext}" + $run $rm "$output_objdir/${outputname}S.${objext}" + fi + + exit $status + fi + + if test -n "$shlibpath_var"; then + # We should set the shlibpath_var + rpath= + for dir in $temp_rpath; do + case $dir in + [\\/]* | [A-Za-z]:[\\/]*) + # Absolute path. + rpath="$rpath$dir:" + ;; + *) + # Relative path: add a thisdir entry. + rpath="$rpath\$thisdir/$dir:" + ;; + esac + done + temp_rpath="$rpath" + 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 + rpath="$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 + rpath="$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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'` + # Delete the old output file. + $run $rm $output + # Link the executable and exit + $show "$link_command" + $run eval "$link_command" || exit $? + exit 0 + 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" + + $echo "$modename: warning: this platform does not like uninstalled shared libraries" 1>&2 + $echo "$modename: \`$output' will be relinked during installation" 1>&2 + else + if test "$fast_install" != no; then + link_command="$finalize_var$compile_command$finalize_rpath" + if test "$fast_install" = yes; then + relink_command=`$echo "X$compile_var$compile_command$compile_rpath" | $Xsed -e '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 "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` + + # Delete the old output files. + $run $rm $output $output_objdir/$outputname $output_objdir/lt-$outputname + + $show "$link_command" + $run eval "$link_command" || exit $? + + # Now create the wrapper script. + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + relink_command="(cd `pwd`; $relink_command)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + fi + + # Quote $echo for shipping. + if test "X$echo" = "X$SHELL $0 --fallback-echo"; then + case $0 in + [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $0 --fallback-echo";; + *) qecho="$SHELL `pwd`/$0 --fallback-echo";; + esac + qecho=`$echo "X$qecho" | $Xsed -e "$sed_quote_subst"` + else + qecho=`$echo "X$echo" | $Xsed -e "$sed_quote_subst"` + fi + + # Only actually do things if our run command is non-null. + if test -z "$run"; then + # win32 will think the script is a binary if it has + # a .exe suffix, so we strip it off here. + case $output in + *.exe) output=`$echo $output|${SED} 's,.exe$,,'` ;; + esac + # test for cygwin because mv fails w/o .exe extensions + case $host in + *cygwin*) + exeext=.exe + outputname=`$echo $outputname|${SED} 's,.exe$,,'` ;; + *) exeext= ;; + esac + case $host in + *cygwin* | *mingw* ) + cwrappersource=`$echo ${objdir}/lt-${output}.c` + cwrapper=`$echo ${output}.exe` + $rm $cwrappersource $cwrapper + trap "$rm $cwrappersource $cwrapper; exit 1" 1 2 15 + + cat > $cwrappersource <> $cwrappersource<<"EOF" + #include + #include + #include + #include + #include + #include + + #if defined(PATH_MAX) + # define LT_PATHMAX PATH_MAX + #elif defined(MAXPATHLEN) + # define LT_PATHMAX MAXPATHLEN + #else + # define LT_PATHMAX 1024 + #endif + + #ifndef DIR_SEPARATOR + #define DIR_SEPARATOR '/' + #endif + + #if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \ + defined (__OS2__) + #define HAVE_DOS_BASED_FILE_SYSTEM + #ifndef DIR_SEPARATOR_2 + #define DIR_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 */ + + #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) + #define XFREE(stale) do { \ + if (stale) { free ((void *) stale); stale = 0; } \ + } while (0) + + const char *program_name = NULL; + + void * xmalloc (size_t num); + char * xstrdup (const char *string); + char * basename (const char *name); + char * fnqualify(const char *path); + char * strendzap(char *str, const char *pat); + void lt_fatal (const char *message, ...); + + int + main (int argc, char *argv[]) + { + char **newargz; + int i; + + program_name = (char *) xstrdup ((char *) basename (argv[0])); + newargz = XMALLOC(char *, argc+2); + EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + newargz[1] = fnqualify(argv[0]); + /* we know the script has the same name, without the .exe */ + /* so make sure newargz[1] doesn't end in .exe */ + strendzap(newargz[1],".exe"); + for (i = 1; i < argc; i++) + newargz[i+1] = xstrdup(argv[i]); + newargz[argc+1] = NULL; + EOF + + cat >> $cwrappersource <> $cwrappersource <<"EOF" + } + + void * + xmalloc (size_t num) + { + void * p = (void *) malloc (num); + if (!p) + lt_fatal ("Memory exhausted"); + + return p; + } + + char * + xstrdup (const char *string) + { + return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL + ; + } + + char * + basename (const char *name) + { + const char *base; + + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) + /* Skip over the disk name in MSDOS pathnames. */ + if (isalpha (name[0]) && name[1] == ':') + name += 2; + #endif + + for (base = name; *name; name++) + if (IS_DIR_SEPARATOR (*name)) + base = name + 1; + return (char *) base; + } + + char * + fnqualify(const char *path) + { + size_t size; + char *p; + char tmp[LT_PATHMAX + 1]; + + assert(path != NULL); + + /* Is it qualified already? */ + #if defined (HAVE_DOS_BASED_FILE_SYSTEM) + if (isalpha (path[0]) && path[1] == ':') + return xstrdup (path); + #endif + if (IS_DIR_SEPARATOR (path[0])) + return xstrdup (path); + + /* prepend the current directory */ + /* doesn't handle '~' */ + if (getcwd (tmp, LT_PATHMAX) == NULL) + lt_fatal ("getcwd failed"); + size = strlen(tmp) + 1 + strlen(path) + 1; /* +2 for '/' and '\0' */ + p = XMALLOC(char, size); + sprintf(p, "%s%c%s", tmp, DIR_SEPARATOR, path); + return p; + } + + 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; + } + + static void + lt_error_core (int exit_status, const char * mode, + const char * message, va_list ap) + { + fprintf (stderr, "%s: %s: ", program_name, mode); + vfprintf (stderr, message, ap); + fprintf (stderr, ".\n"); + + if (exit_status >= 0) + exit (exit_status); + } + + void + lt_fatal (const char *message, ...) + { + va_list ap; + va_start (ap, message); + lt_error_core (EXIT_FAILURE, "FATAL", message, ap); + va_end (ap); + } + EOF + # we should really use a build-platform specific compiler + # here, but OTOH, the wrappers (shell script and this C one) + # are only useful if you want to execute the "real" binary. + # Since the "real" binary is built for $host, then this + # wrapper might as well be built for $host, too. + $run $LTCC -s -o $cwrapper $cwrappersource + ;; + esac + $rm $output + trap "$rm $output; exit 1" 1 2 15 + + $echo > $output "\ + #! $SHELL + + # $output - temporary wrapper script for $objdir/$outputname + # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP + # + # 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. + Xsed='${SED} -e 1s/^X//' + sed_quote_subst='$sed_quote_subst' + + # The HP-UX ksh and POSIX shell print the target directory to stdout + # if CDPATH is set. + if test \"\${CDPATH+set}\" = set; then CDPATH=:; export CDPATH; fi + + relink_command=\"$relink_command\" + + # This environment variable determines our operation mode. + if test \"\$libtool_install_magic\" = \"$magic\"; then + # install mode needs the following variable: + 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 + echo=\"$qecho\" + file=\"\$0\" + # Make sure echo works. + if test \"X\$1\" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift + elif test \"X\`(\$echo '\t') 2>/dev/null\`\" = 'X\t'; then + # Yippee, \$echo works! + : + else + # Restart under the correct shell, and then maybe \$echo will work. + exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"} + fi + fi\ + " + $echo >> $output "\ + + # Find the directory that this script lives in. + thisdir=\`\$echo \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e '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 \"X\$file\" | \$Xsed -e 's%^.*/%%'\` + file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\` + done + + # Try to get the absolute directory name. + absdir=\`cd \"\$thisdir\" && pwd\` + test -n \"\$absdir\" && thisdir=\"\$absdir\" + " + + if test "$fast_install" = yes; then + $echo >> $output "\ + 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 >> $output "\ + + # 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 >> $output "\ + program='$outputname' + progdir=\"\$thisdir/$objdir\" + " + fi + + $echo >> $output "\ + + if test -f \"\$progdir/\$program\"; then" + + # Export our shlibpath_var if we have one. + if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then + $echo >> $output "\ + # 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 \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\` + + export $shlibpath_var + " + fi + + # fixup the dll searchpath if we need to. + if test -n "$dllsearchpath"; then + $echo >> $output "\ + # Add the dll search path components to the executable PATH + PATH=$dllsearchpath:\$PATH + " + fi + + $echo >> $output "\ + if test \"\$libtool_execute_magic\" != \"$magic\"; then + # Run the actual program with our arguments. + " + case $host in + # Backslashes separate directories on plain windows + *-*-mingw | *-*-os2*) + $echo >> $output "\ + exec \$progdir\\\\\$program \${1+\"\$@\"} + " + ;; + + *) + $echo >> $output "\ + exec \$progdir/\$program \${1+\"\$@\"} + " + ;; + esac + $echo >> $output "\ + \$echo \"\$0: cannot exec \$program \${1+\"\$@\"}\" + exit 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\ + " + chmod +x $output + fi + exit 0 + ;; + 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" + 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" + fi + addlibs="$old_convenience" + fi + + if test -n "$addlibs"; then + gentop="$output_objdir/${outputname}x" + $show "${rm}r $gentop" + $run ${rm}r "$gentop" + $show "$mkdir $gentop" + $run $mkdir "$gentop" + status=$? + if test "$status" -ne 0 && test ! -d "$gentop"; then + exit $status + fi + generated="$generated $gentop" + + # Add in members from convenience archives. + for xlib in $addlibs; do + # Extract the objects. + case $xlib in + [\\/]* | [A-Za-z]:[\\/]*) xabs="$xlib" ;; + *) xabs=`pwd`"/$xlib" ;; + esac + xlib=`$echo "X$xlib" | $Xsed -e 's%^.*/%%'` + xdir="$gentop/$xlib" + + $show "${rm}r $xdir" + $run ${rm}r "$xdir" + $show "$mkdir $xdir" + $run $mkdir "$xdir" + status=$? + if test "$status" -ne 0 && test ! -d "$xdir"; then + exit $status + fi + # We will extract separately just the conflicting names and we will no + # longer touch any unique names. It is faster to leave these extract + # automatically by $AR in one run. + $show "(cd $xdir && $AR x $xabs)" + $run eval "(cd \$xdir && $AR x \$xabs)" || exit $? + if ($AR t "$xabs" | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; renaming object files" 1>&2 + $echo "$modename: warning: to ensure that they will not overwrite" 1>&2 + $AR t "$xabs" | sort | uniq -cd | while read -r count name + do + i=1 + while test "$i" -le "$count" + do + # Put our $i before any first dot (extension) + # Never overwrite any file + name_to="$name" + while test "X$name_to" = "X$name" || test -f "$xdir/$name_to" + do + name_to=`$echo "X$name_to" | $Xsed -e "s/\([^.]*\)/\1-$i/"` + done + $show "(cd $xdir && $AR xN $i $xabs '$name' && $mv '$name' '$name_to')" + $run eval "(cd \$xdir && $AR xN $i \$xabs '$name' && $mv '$name' '$name_to')" || exit $? + i=`expr $i + 1` + done + done + fi + + oldobjs="$oldobjs "`find $xdir -name \*.${objext} -print -o -name \*.lo -print | $NL2SP` + done + fi + + # Do each command in the archive commands. + if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then + eval cmds=\"$old_archive_from_new_cmds\" + else + eval cmds=\"$old_archive_cmds\" + + if len=`expr "X$cmds" : ".*"` && + test "$len" -le "$max_cmd_len" || test "$max_cmd_len" -le -1; then + : + else + # the command line is too long to link in one step, link in parts + $echo "using piecewise archive linking..." + save_RANLIB=$RANLIB + RANLIB=: + objlist= + concat_cmds= + save_oldobjs=$oldobjs + # GNU ar 2.10+ was changed to match POSIX; thus no paths are + # encoded into archives. This makes 'ar r' malfunction in + # this piecewise linking case whenever conflicting object + # names appear in distinct ar calls; check, warn and compensate. + if (for obj in $save_oldobjs + do + $echo "X$obj" | $Xsed -e 's%^.*/%%' + done | sort | sort -uc >/dev/null 2>&1); then + : + else + $echo "$modename: warning: object name conflicts; overriding AR_FLAGS to 'cq'" 1>&2 + $echo "$modename: warning: to ensure that POSIX-compatible ar will work" 1>&2 + AR_FLAGS=cq + fi + # Is there a better way of finding the last object in the list? + for obj in $save_oldobjs + do + last_oldobj=$obj + done + for obj in $save_oldobjs + do + oldobjs="$objlist $obj" + objlist="$objlist $obj" + eval test_cmds=\"$old_archive_cmds\" + if len=`expr "X$test_cmds" : ".*"` && + test "$len" -le "$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= + 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 + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$generated"; then + $show "${rm}r$generated" + $run ${rm}r$generated + fi + + # Now create the libtool archive. + case $output in + *.la) + old_library= + test "$build_old_libs" = yes && old_library="$libname.$libext" + $show "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}\" || 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 + var_value=`$echo "X$var_value" | $Xsed -e "$sed_quote_subst"` + relink_command="$var=\"$var_value\"; export $var; $relink_command" + fi + done + # Quote the link command for shipping. + relink_command="(cd `pwd`; $SHELL $0 --mode=relink $libtool_args @inst_prefix_dir@)" + relink_command=`$echo "X$relink_command" | $Xsed -e "$sed_quote_subst"` + + # Only create the output if not a dry run. + if test -z "$run"; then + 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) + name=`$echo "X$deplib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` + if test -z "$libdir"; then + $echo "$modename: \`$deplib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdependency_libs="$newdependency_libs $libdir/$name" + ;; + *) newdependency_libs="$newdependency_libs $deplib" ;; + esac + done + dependency_libs="$newdependency_libs" + newdlfiles= + for lib in $dlfiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlfiles="$newdlfiles $libdir/$name" + done + dlfiles="$newdlfiles" + newdlprefiles= + for lib in $dlprefiles; do + name=`$echo "X$lib" | $Xsed -e 's%^.*/%%'` + eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib` + if test -z "$libdir"; then + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + exit 1 + fi + newdlprefiles="$newdlprefiles $libdir/$name" + done + dlprefiles="$newdlprefiles" + fi + $rm $output + # place dlname in correct position for cygwin + tdlname=$dlname + case $host,$output,$installed,$module,$dlname in + *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;; + esac + $echo > $output "\ + # $outputname - a libtool library file + # Generated by $PROGRAM - GNU $PACKAGE $VERSION$TIMESTAMP + # + # 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' + + # Libraries that this one depends upon. + dependency_libs='$dependency_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 + fi + + # Do a symbolic link so that the libtool archive can be found in + # LD_LIBRARY_PATH before the program is installed. + $show "(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)" + $run eval '(cd $output_objdir && $rm $outputname && $LN_S ../$outputname $outputname)' || exit $? + ;; + esac + exit 0 + ;; + + # libtool install mode + install) + modename="$modename: install" + + # 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. + $echo "X$nonopt" | $Xsed | grep shtool > /dev/null; then + # Aesthetically quote it. + arg=`$echo "X$nonopt" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$arg " + arg="$1" + shift + else + install_prog= + arg="$nonopt" + fi + + # The real first argument should be the name of the installation program. + # Aesthetically quote it. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog$arg" + + # We need to accept at least all the BSD install flags. + dest= + files= + opts= + prev= + install_type= + isdir=no + stripme= + for arg + do + if test -n "$dest"; then + files="$files $dest" + dest="$arg" + continue + fi + + case $arg in + -d) isdir=yes ;; + -f) prev="-f" ;; + -g) prev="-g" ;; + -m) prev="-m" ;; + -o) prev="-o" ;; + -s) + stripme=" -s" + continue + ;; + -*) ;; + + *) + # If the previous option needed an argument, then skip it. + if test -n "$prev"; then + prev= + else + dest="$arg" + continue + fi + ;; + esac + + # Aesthetically quote the argument. + arg=`$echo "X$arg" | $Xsed -e "$sed_quote_subst"` + case $arg in + *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*) + arg="\"$arg\"" + ;; + esac + install_prog="$install_prog $arg" + done + + if test -z "$install_prog"; then + $echo "$modename: you must specify an install program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -n "$prev"; then + $echo "$modename: the \`$prev' option requires an argument" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + if test -z "$files"; then + if test -z "$dest"; then + $echo "$modename: no file or destination specified" 1>&2 + else + $echo "$modename: you must specify a destination" 1>&2 + fi + $echo "$help" 1>&2 + exit 1 + fi + + # Strip any trailing slash from the destination. + dest=`$echo "X$dest" | $Xsed -e 's%/$%%'` + + # Check to see that the destination is a directory. + test -d "$dest" && isdir=yes + if test "$isdir" = yes; then + destdir="$dest" + destname= + else + destdir=`$echo "X$dest" | $Xsed -e 's%/[^/]*$%%'` + test "X$destdir" = "X$dest" && destdir=. + destname=`$echo "X$dest" | $Xsed -e 's%^.*/%%'` + + # Not a directory, so check to see that there is only one file specified. + set dummy $files + if test "$#" -gt 2; then + $echo "$modename: \`$dest' is not a directory" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + fi + case $destdir in + [\\/]* | [A-Za-z]:[\\/]*) ;; + *) + for file in $files; do + case $file in + *.lo) ;; + *) + $echo "$modename: \`$destdir' must be an absolute directory name" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + 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. + staticlibs="$staticlibs $file" + ;; + + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$file' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + library_names= + old_library= + relink_command= + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Add the libdir to current_libdirs if it is the destination. + if test "X$destdir" = "X$libdir"; then + case "$current_libdirs " in + *" $libdir "*) ;; + *) current_libdirs="$current_libdirs $libdir" ;; + esac + else + # Note the libdir as a future libdir. + case "$future_libdirs " in + *" $libdir "*) ;; + *) future_libdirs="$future_libdirs $libdir" ;; + esac + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'`/ + test "X$dir" = "X$file/" && dir= + dir="$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 "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. + if test "$inst_prefix_dir" = "$destdir"; then + $echo "$modename: error: cannot install \`$file' to a directory not ending in $libdir" 1>&2 + exit 1 + fi + + 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 + + $echo "$modename: warning: relinking \`$file'" 1>&2 + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + exit 1 + fi + fi + + # See the names of the shared library. + set dummy $library_names + if test -n "$2"; then + realname="$2" + shift + shift + + srcname="$realname" + test -n "$relink_command" && srcname="$realname"T + + # Install the shared library and build the symlinks. + $show "$install_prog $dir/$srcname $destdir/$realname" + $run eval "$install_prog $dir/$srcname $destdir/$realname" || exit $? + if test -n "$stripme" && test -n "$striplib"; then + $show "$striplib $destdir/$realname" + $run eval "$striplib $destdir/$realname" || exit $? + fi + + if test "$#" -gt 0; then + # Delete the old symlinks, and create new ones. + for linkname + do + if test "$linkname" != "$realname"; then + $show "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + $run eval "(cd $destdir && $rm $linkname && $LN_S $realname $linkname)" + fi + done + fi + + # Do each command in the postinstall commands. + lib="$destdir/$realname" + eval cmds=\"$postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + fi + + # Install the pseudo-library for information purposes. + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + instname="$dir/$name"i + $show "$install_prog $instname $destdir/$name" + $run eval "$install_prog $instname $destdir/$name" || exit $? + + # Maybe install the static library, too. + test -n "$old_library" && staticlibs="$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 + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + destfile="$destdir/$destfile" + fi + + # Deduce the name of the destination old-style object file. + case $destfile in + *.lo) + staticdest=`$echo "X$destfile" | $Xsed -e "$lo2o"` + ;; + *.$objext) + staticdest="$destfile" + destfile= + ;; + *) + $echo "$modename: cannot copy a libtool object to \`$destfile'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + # Install the libtool object if requested. + if test -n "$destfile"; then + $show "$install_prog $file $destfile" + $run eval "$install_prog $file $destfile" || exit $? + fi + + # Install the old object if enabled. + if test "$build_old_libs" = yes; then + # Deduce the name of the old-style object file. + staticobj=`$echo "X$file" | $Xsed -e "$lo2o"` + + $show "$install_prog $staticobj $staticdest" + $run eval "$install_prog \$staticobj \$staticdest" || exit $? + fi + exit 0 + ;; + + *) + # Figure out destination file name, if it wasn't already specified. + if test -n "$destname"; then + destfile="$destdir/$destname" + else + destfile=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + 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 + file=`$echo $file|${SED} 's,.exe$,,'` + stripped_ext=".exe" + fi + ;; + esac + + # Do a test to see if this is really a libtool program. + case $host in + *cygwin*|*mingw*) + wrapper=`$echo $file | ${SED} -e 's,.exe$,,'` + ;; + *) + wrapper=$file + ;; + esac + if (${SED} -e '4q' $wrapper | grep "^# Generated by .*$PACKAGE")>/dev/null 2>&1; then + notinst_deplibs= + relink_command= + + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + # Check the variables that should have been set. + if test -z "$notinst_deplibs"; then + $echo "$modename: invalid libtool wrapper script \`$wrapper'" 1>&2 + exit 1 + fi + + finalize=yes + for lib in $notinst_deplibs; do + # Check to see that each library is installed. + libdir= + if test -f "$lib"; then + # If there is no directory component, then add one. + case $lib in + */* | *\\*) . $lib ;; + *) . ./$lib ;; + esac + fi + libfile="$libdir/"`$echo "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test + if test -n "$libdir" && test ! -f "$libfile"; then + $echo "$modename: warning: \`$lib' has not been installed in \`$libdir'" 1>&2 + finalize=no + fi + done + + relink_command= + # To insure that "foo" is sourced, and not "foo.exe", + # finese the cygwin/MSYS system by explicitly sourcing "foo." + # which disallows the automatic-append-.exe behavior. + case $build in + *cygwin* | *mingw*) wrapperdot=${wrapper}. ;; + *) wrapperdot=${wrapper} ;; + esac + # If there is no directory component, then add one. + case $file in + */* | *\\*) . ${wrapperdot} ;; + *) . ./${wrapperdot} ;; + esac + + outputname= + if test "$fast_install" = no && test -n "$relink_command"; then + if test "$finalize" = yes && test -z "$run"; then + tmpdir="/tmp" + test -n "$TMPDIR" && tmpdir="$TMPDIR" + tmpdir="$tmpdir/libtool-$$" + if $mkdir -p "$tmpdir" && chmod 700 "$tmpdir"; then : + else + $echo "$modename: error: cannot create temporary directory \`$tmpdir'" 1>&2 + continue + fi + file=`$echo "X$file$stripped_ext" | $Xsed -e 's%^.*/%%'` + outputname="$tmpdir/$file" + # Replace the output file specification. + relink_command=`$echo "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'` + + $show "$relink_command" + if $run eval "$relink_command"; then : + else + $echo "$modename: error: relink \`$file' with the above command before installing it" 1>&2 + ${rm}r "$tmpdir" + continue + fi + file="$outputname" + else + $echo "$modename: warning: cannot relink \`$file'" 1>&2 + fi + else + # Install the binary that we compiled earlier. + file=`$echo "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"` + fi + fi + + # remove .exe since cygwin /usr/bin/install will append another + # one anyways + case $install_prog,$host in + */usr/bin/install*,*cygwin*) + case $file:$destfile in + *.exe:*.exe) + # this is ok + ;; + *.exe:*) + destfile=$destfile.exe + ;; + *:*.exe) + destfile=`$echo $destfile | ${SED} -e 's,.exe$,,'` + ;; + esac + ;; + esac + $show "$install_prog$stripme $file $destfile" + $run eval "$install_prog\$stripme \$file \$destfile" || exit $? + test -n "$outputname" && ${rm}r "$tmpdir" + ;; + esac + done + + for file in $staticlibs; do + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + + # Set up the ranlib parameters. + oldlib="$destdir/$name" + + $show "$install_prog $file $oldlib" + $run eval "$install_prog \$file \$oldlib" || exit $? + + if test -n "$stripme" && test -n "$striplib"; then + $show "$old_striplib $oldlib" + $run eval "$old_striplib $oldlib" || exit $? + fi + + # Do each command in the postinstall commands. + eval cmds=\"$old_postinstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || exit $? + done + IFS="$save_ifs" + done + + if test -n "$future_libdirs"; then + $echo "$modename: warning: remember to run \`$progname --finish$future_libdirs'" 1>&2 + fi + + if test -n "$current_libdirs"; then + # Maybe just do a dry run. + test -n "$run" && current_libdirs=" -n$current_libdirs" + exec_cmd='$SHELL $0 --finish$current_libdirs' + else + exit 0 + fi + ;; + + # libtool finish mode + finish) + modename="$modename: finish" + libdirs="$nonopt" + admincmds= + + if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then + for dir + do + libdirs="$libdirs $dir" + done + + for libdir in $libdirs; do + if test -n "$finish_cmds"; then + # Do each command in the finish commands. + eval cmds=\"$finish_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" || admincmds="$admincmds + $cmd" + done + IFS="$save_ifs" + fi + if test -n "$finish_eval"; then + # Do the single finish_eval. + eval cmds=\"$finish_eval\" + $run eval "$cmds" || admincmds="$admincmds + $cmds" + fi + done + fi + + # Exit here if they wanted silent mode. + test "$show" = : && exit 0 + + $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" + $echo "more information, such as the ld(1) and ld.so(8) manual pages." + $echo "----------------------------------------------------------------------" + exit 0 + ;; + + # libtool execute mode + execute) + modename="$modename: execute" + + # The first argument is the command name. + cmd="$nonopt" + if test -z "$cmd"; then + $echo "$modename: you must specify a COMMAND" 1>&2 + $echo "$help" + exit 1 + fi + + # Handle -dlopen flags immediately. + for file in $execute_dlfiles; do + if test ! -f "$file"; then + $echo "$modename: \`$file' is not a file" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + dir= + case $file in + *.la) + # Check to see that this really is a libtool archive. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then : + else + $echo "$modename: \`$lib' is not a valid libtool archive" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + # Read the libtool library. + dlname= + library_names= + + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Skip this library if it cannot be dlopened. + if test -z "$dlname"; then + # Warn if it was a shared library. + test -n "$library_names" && $echo "$modename: warning: \`$file' was not linked with \`-export-dynamic'" + continue + fi + + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + + if test -f "$dir/$objdir/$dlname"; then + dir="$dir/$objdir" + else + $echo "$modename: cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'" 1>&2 + exit 1 + fi + ;; + + *.lo) + # Just add the directory containing the .lo file. + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + test "X$dir" = "X$file" && dir=. + ;; + + *) + $echo "$modename: warning \`-dlopen' is ignored for non-libtool libraries and objects" 1>&2 + 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 + -*) ;; + *) + # Do a test to see if this is really a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + # If there is no directory component, then add one. + case $file in + */* | *\\*) . $file ;; + *) . ./$file ;; + esac + + # Transform arg to wrapped name. + file="$progdir/$program" + fi + ;; + esac + # Quote arguments (to preserve shell metacharacters). + file=`$echo "X$file" | $Xsed -e "$sed_quote_subst"` + args="$args \"$file\"" + done + + if test -z "$run"; then + if test -n "$shlibpath_var"; then + # Export the shlibpath_var. + eval "export $shlibpath_var" + fi + + # Restore saved environment variables + if test "${save_LC_ALL+set}" = set; then + LC_ALL="$save_LC_ALL"; export LC_ALL + fi + if test "${save_LANG+set}" = set; then + LANG="$save_LANG"; export LANG + fi + + # 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 0 + fi + ;; + + # libtool clean and uninstall mode + clean | uninstall) + modename="$modename: $mode" + 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) rm="$rm $arg"; rmforce=yes ;; + -*) rm="$rm $arg" ;; + *) files="$files $arg" ;; + esac + done + + if test -z "$rm"; then + $echo "$modename: you must specify an RM program" 1>&2 + $echo "$help" 1>&2 + exit 1 + fi + + rmdirs= + + origobjdir="$objdir" + for file in $files; do + dir=`$echo "X$file" | $Xsed -e 's%/[^/]*$%%'` + if test "X$dir" = "X$file"; then + dir=. + objdir="$origobjdir" + else + objdir="$dir/$origobjdir" + fi + name=`$echo "X$file" | $Xsed -e 's%^.*/%%'` + test "$mode" = uninstall && objdir="$dir" + + # Remember objdir for removal later, being careful to avoid duplicates + if test "$mode" = clean; then + case " $rmdirs " in + *" $objdir "*) ;; + *) rmdirs="$rmdirs $objdir" ;; + 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 (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + . $dir/$name + + # Delete the libtool libraries and symlinks. + for n in $library_names; do + rmfiles="$rmfiles $objdir/$n" + done + test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library" + test "$mode" = clean && rmfiles="$rmfiles $objdir/$name $objdir/${name}i" + + if test "$mode" = uninstall; then + if test -n "$library_names"; then + # Do each command in the postuninstall commands. + eval cmds=\"$postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + + if test -n "$old_library"; then + # Do each command in the old_postuninstall commands. + eval cmds=\"$old_postuninstall_cmds\" + save_ifs="$IFS"; IFS='~' + for cmd in $cmds; do + IFS="$save_ifs" + $show "$cmd" + $run eval "$cmd" + if test "$?" -ne 0 && test "$rmforce" != yes; then + exit_status=1 + fi + done + IFS="$save_ifs" + fi + # FIXME: should reinstall the best remaining shared library. + fi + fi + ;; + + *.lo) + # Possibly a libtool object, so verify it. + if (${SED} -e '2q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + + # Read the .lo file + . $dir/$name + + # Add PIC object to the list of files to remove. + if test -n "$pic_object" \ + && test "$pic_object" != none; then + rmfiles="$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 + rmfiles="$rmfiles $dir/$non_pic_object" + fi + fi + ;; + + *) + if test "$mode" = clean ; then + noexename=$name + case $file in + *.exe) + file=`$echo $file|${SED} 's,.exe$,,'` + noexename=`$echo $name|${SED} 's,.exe$,,'` + # $file with .exe has already been added to rmfiles, + # add $file without .exe + rmfiles="$rmfiles $file" + ;; + esac + # Do a test to see if this is a libtool program. + if (${SED} -e '4q' $file | grep "^# Generated by .*$PACKAGE") >/dev/null 2>&1; then + relink_command= + . $dir/$noexename + + # note $name still contains .exe if it was in $file originally + # as does the version of $file that was added into $rmfiles + rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}" + if test "$fast_install" = yes && test -n "$relink_command"; then + rmfiles="$rmfiles $objdir/lt-$name" + fi + if test "X$noexename" != "X$name" ; then + rmfiles="$rmfiles $objdir/lt-${noexename}.c" + fi + fi + fi + ;; + esac + $show "$rm $rmfiles" + $run $rm $rmfiles || exit_status=1 + done + objdir="$origobjdir" + + # Try to remove the ${objdir}s in the directories where we deleted files + for dir in $rmdirs; do + if test -d "$dir"; then + $show "rmdir $dir" + $run rmdir $dir >/dev/null 2>&1 + fi + done + + exit $exit_status + ;; + + "") + $echo "$modename: you must specify a MODE" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + ;; + esac + + if test -z "$exec_cmd"; then + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$generic_help" 1>&2 + exit 1 + fi + fi # test -z "$show_help" + + if test -n "$exec_cmd"; then + eval exec $exec_cmd + exit 1 + fi + + # We need to display help for each of the modes. + case $mode in + "") $echo \ + "Usage: $modename [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 + --finish same as \`--mode=finish' + --help display this help message and exit + --mode=MODE use operation mode MODE [default=inferred from MODE-ARGS] + --quiet same as \`--silent' + --silent don't print informational messages + --tag=TAG use configuration variables from tag TAG + --version print version information + + 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. Try \`$modename --help --mode=MODE' for + a more detailed description of MODE. + + Report bugs to ." + exit 0 + ;; + + clean) + $echo \ + "Usage: $modename [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: $modename [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 + -prefer-pic try to building PIC objects only + -prefer-non-pic try to building non-PIC objects only + -static always build a \`.o' file suitable for static linking + + 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: $modename [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: $modename [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: $modename [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 rest of the components are interpreted as arguments to that command (only + BSD-compatible install options are recognized)." + ;; + + link) + $echo \ + "Usage: $modename [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 + -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 + -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 + -static do not do any dynamic linking of libtool libraries + -version-info CURRENT[:REVISION[:AGE]] + specify library version info [each variable defaults to 0] + + 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: $modename [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." + ;; + + *) + $echo "$modename: invalid operation mode \`$mode'" 1>&2 + $echo "$help" 1>&2 + exit 1 + ;; + esac + + $echo + $echo "Try \`$modename --help' for more information about other modes." + + exit 0 + + # 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: Index: llvm/projects/sample/autoconf/mkinstalldirs diff -c /dev/null llvm/projects/sample/autoconf/mkinstalldirs:1.1 *** /dev/null Wed Oct 15 20:44:30 2003 --- llvm/projects/sample/autoconf/mkinstalldirs Wed Oct 15 20:44:20 2003 *************** *** 0 **** --- 1,101 ---- + #! /bin/sh + # mkinstalldirs --- make directory hierarchy + # Author: Noah Friedman + # Created: 1993-05-16 + # Public domain + + # $Id: mkinstalldirs,v 1.1 2003/10/16 01:44:20 criswell Exp $ + + errstatus=0 + dirmode="" + + usage="\ + Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." + + # process command line arguments + while test $# -gt 0 ; do + case "${1}" in + -h | --help | --h* ) # -h for help + echo "${usage}" 1>&2; exit 0 ;; + -m ) # -m PERM arg + shift + test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } + dirmode="${1}" + shift ;; + -- ) shift; break ;; # stop option processing + -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option + * ) break ;; # first non-opt arg + esac + done + + for file + do + if test -d "$file"; then + shift + else + break + fi + done + + case $# in + 0) exit 0 ;; + esac + + case $dirmode in + '') + if mkdir -p -- . 2>/dev/null; then + echo "mkdir -p -- $*" + exec mkdir -p -- "$@" + fi ;; + *) + if mkdir -m "$dirmode" -p -- . 2>/dev/null; then + echo "mkdir -m $dirmode -p -- $*" + exec mkdir -m "$dirmode" -p -- "$@" + fi ;; + esac + + for file + do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + else + if test ! -z "$dirmode"; then + echo "chmod $dirmode $pathcomp" + + lasterr="" + chmod "$dirmode" "$pathcomp" || lasterr=$? + + if test ! -z "$lasterr"; then + errstatus=$lasterr + fi + fi + fi + fi + + pathcomp="$pathcomp/" + done + done + + exit $errstatus + + # Local Variables: + # mode: shell-script + # sh-indentation: 3 + # End: + # mkinstalldirs ends here From criswell at cs.uiuc.edu Wed Oct 15 20:46:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:46:02 2003 Subject: [llvm-commits] CVS: llvm/projects/sample/configure Message-ID: <200310160145.UAA03584@choi.cs.uiuc.edu> Changes in directory llvm/projects/sample: configure added (r1.1) --- Log message: Adding autoconf support to the sample project. --- Diffs of the changes: (+2234 -0) Index: llvm/projects/sample/configure diff -c /dev/null llvm/projects/sample/configure:1.1 *** /dev/null Wed Oct 15 20:45:45 2003 --- llvm/projects/sample/configure Wed Oct 15 20:45:35 2003 *************** *** 0 **** --- 1,2234 ---- + #! /bin/sh + # Guess values for system-dependent variables and create Makefiles. + # Generated by GNU Autoconf 2.57 for [SAMPLE] [x.xx]. + # + # Report bugs to . + # + # Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 + # 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 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+"$@"}'='"$@"' + elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix + fi + + # Support unset when possible. + if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset + else + as_unset=false + fi + + + # Work around bugs in pre-3.0 UWIN ksh. + $as_unset ENV MAIL MAILPATH + PS1='$ ' + PS2='> ' + PS4='+ ' + + # NLS nuisances. + for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME + do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi + done + + # Required to use basename. + if expr a : '\(a\)' >/dev/null 2>&1; 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 + + + # Name of the executable. + as_me=`$as_basename "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || + echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + + # PATH needs CR, and LINENO needs CR and PATH. + # 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 + + # The user is always right. + if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh + fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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 + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done + done + ;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit + } + + + case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' + ' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; + esac + + if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi + rm -f conf$$ conf$$.exe conf$$.file + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: + else + as_mkdir_p=false + fi + + as_executable_p="test -f" + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + + # IFS + # We need space, tab and new line, in precisely that order. + as_nl=' + ' + IFS=" $as_nl" + + # CDPATH. + $as_unset CDPATH + + + # Name of the host. + # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, + # so uname gets run too. + ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + + exec 6>&1 + + # + # Initializations. + # + ac_default_prefix=/usr/local + ac_config_libobj_dir=. + cross_compiling=no + subdirs= + MFLAGS= + MAKEFLAGS= + SHELL=${CONFIG_SHELL-/bin/sh} + + # Maximum number of lines to put in a shell here document. + # This variable seems obsolete. It should probably be removed, and + # only ac_max_sed_lines should be used. + : ${ac_max_here_lines=38} + + # Identity of this package. + PACKAGE_NAME='[SAMPLE]' + PACKAGE_TARNAME='--sample--' + PACKAGE_VERSION='[x.xx]' + PACKAGE_STRING='[SAMPLE] [x.xx]' + PACKAGE_BUGREPORT='bugs at yourdomain' + + ac_unique_file=""Makefile.common.in"" + ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS LLVM_SRC LLVM_OBJ LIBOBJS LTLIBOBJS' + ac_subst_files='' + + # Initialize some variables set by options. + ac_init_help= + ac_init_version=false + # 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. + bindir='${exec_prefix}/bin' + sbindir='${exec_prefix}/sbin' + libexecdir='${exec_prefix}/libexec' + datadir='${prefix}/share' + sysconfdir='${prefix}/etc' + sharedstatedir='${prefix}/com' + localstatedir='${prefix}/var' + libdir='${exec_prefix}/lib' + includedir='${prefix}/include' + oldincludedir='/usr/include' + infodir='${prefix}/info' + mandir='${prefix}/man' + + ac_prev= + 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 + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -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 | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$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 ;; + + -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 ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + 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 ;; + + -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_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=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 ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option + Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + 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'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } + fi + + # Be sure to have absolute paths. + for ac_var in exec_prefix prefix + do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac + done + + # Be sure to have absolute paths. + for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir + do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac + 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 + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + 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 + + + # 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 its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || + $as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || + echo X"$0" | + 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 + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi + fi + (cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } + srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` + ac_env_build_alias_set=${build_alias+set} + ac_env_build_alias_value=$build_alias + ac_cv_env_build_alias_set=${build_alias+set} + ac_cv_env_build_alias_value=$build_alias + ac_env_host_alias_set=${host_alias+set} + ac_env_host_alias_value=$host_alias + ac_cv_env_host_alias_set=${host_alias+set} + ac_cv_env_host_alias_value=$host_alias + ac_env_target_alias_set=${target_alias+set} + ac_env_target_alias_value=$target_alias + ac_cv_env_target_alias_set=${target_alias+set} + ac_cv_env_target_alias_value=$target_alias + + # + # 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 [SAMPLE] [x.xx] 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 \`..'] + + _ACEOF + + cat <<_ACEOF + 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] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --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] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] + _ACEOF + + cat <<\_ACEOF + _ACEOF + fi + + if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of [SAMPLE] [x.xx]:";; + esac + cat <<\_ACEOF + + Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-llvmsrc Location of LLVM Source Code + --with-llvmobj Location of LLVM Object Code + + Report bugs to . + _ACEOF + fi + + if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + + if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` + else + ac_dir_suffix= ac_top_builddir= + fi + + case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; + esac + # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be + # absolute. + ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` + ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` + ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` + ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style 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 + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done + fi + + test -n "$ac_init_help" && exit 0 + if $ac_init_version; then + cat <<\_ACEOF + [SAMPLE] configure [x.xx] + generated by GNU Autoconf 2.57 + + Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 + 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 0 + fi + exec 5>config.log + cat >&5 <<_ACEOF + This file contains any messages produced by compilers while + running configure, to aid debugging if configure makes a mistake. + + It was created by [SAMPLE] $as_me [x.xx], which was + generated by GNU Autoconf 2.57. Invocation command line was + + $ $0 $@ + + _ACEOF + { + 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` + hostinfo = `(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=. + echo "PATH: $as_dir" + done + + } >&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_sep= + 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=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$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 + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done + done + $as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } + $as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export 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: Be sure not to use single quotes in there, as some shells, + # such as our DU 5.0 friend, will then `close' the trap. + trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX + ## ---------------- ## + ## Cache variables. ## + ## ---------------- ## + _ASBOX + echo + # The following way of writing the cache mishandles newlines in values, + { + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; + } + echo + + cat <<\_ASBOX + ## ----------------- ## + ## Output variables. ## + ## ----------------- ## + _ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX + ## ------------- ## + ## Output files. ## + ## ------------- ## + _ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX + ## ----------- ## + ## confdefs.h. ## + ## ----------- ## + _ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 + for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal + done + ac_signal=0 + + # confdefs.h avoids OS command line length limits that DEFS can exceed. + rm -rf conftest* confdefs.h + # AIX cpp loses on an empty file, so make sure it contains at least a newline. + echo >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 + + + # Let the site file select an alternate cache file if it wants to. + # Prefer explicitly selected file to automatically selected ones. + if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi + fi + for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 + echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + 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. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 + echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi + else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 + 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 `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 + echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 + 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 + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 + echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 + echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 + echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`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. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi + done + if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 + echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 + echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } + fi + + ac_ext=c + ac_cpp='$CPP $CPPFLAGS' + ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' + ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' + ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ac_aux_dir= + for ac_dir in autoconf $srcdir/autoconf; 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 + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&5 + echo "$as_me: error: cannot find install-sh or install.sh in autoconf $srcdir/autoconf" >&2;} + { (exit 1); exit 1; }; } + fi + ac_config_guess="$SHELL $ac_aux_dir/config.guess" + ac_config_sub="$SHELL $ac_aux_dir/config.sub" + ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + + + + + ac_config_commands="$ac_config_commands Makefile" + + + ac_config_commands="$ac_config_commands lib/Makefile" + + + ac_config_commands="$ac_config_commands lib/sample/Makefile" + + + ac_config_commands="$ac_config_commands tools/Makefile" + + + ac_config_commands="$ac_config_commands tools/sample/Makefile" + + + + + + + + + + + + + + + # Check whether --with-llvmsrc or --without-llvmsrc was given. + if test "${with_llvmsrc+set}" = set; then + withval="$with_llvmsrc" + LLVM_SRC=$withval + + else + LLVM_SRC=`cd ${srcdir}/../..; pwd` + + fi; + + + # Check whether --with-llvmobj or --without-llvmobj was given. + if test "${with_llvmobj+set}" = set; then + withval="$with_llvmobj" + LLVM_OBJ=$withval + + else + LLVM_OBJ=`cd ../..; pwd` + + fi; + + ac_config_files="$ac_config_files Makefile.common" + 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, don't put newlines in cache variables' values. + # 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. + { + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *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 \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; + } | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache + if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + 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}' + + # VPATH may cause trouble with some makes, so we remove $(srcdir), + # ${srcdir} and @srcdir@ 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[ ]*=/{ + s/:*\$(srcdir):*/:/; + s/:*\${srcdir}:*/:/; + s/:*@srcdir@:*/:/; + s/^\([^=]*=[ ]*\):*/\1/; + s/:*$//; + s/^[^=]*=[ ]*$//; + }' + fi + + # Transform confdefs.h into DEFS. + # Protect against shell expansion while executing Makefile rules. + # Protect against Makefile macro expansion. + # + # If the first sed substitution is executed (which looks for macros that + # take arguments), then we branch to the quote section. Otherwise, + # look for a macro that doesn't take arguments. + cat >confdef2opt.sed <<\_ACEOF + t clear + : clear + s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g + t quote + s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g + t quote + d + : quote + s,[ `~#$^&*(){}\\|;'"<>?],\\&,g + s,\[,\\&,g + s,\],\\&,g + s,\$,$$,g + p + _ACEOF + # We use echo to avoid assuming a particular line-breaking character. + # The extra dot is to prevent the shell from consuming trailing + # line-breaks from the sub-command output. A line-break within + # single-quotes doesn't work because, if this script is created in a + # platform that uses two characters for line-breaks (e.g., DOS), tr + # would break. + ac_LF_and_DOT=`echo; echo .` + DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` + rm -f confdef2opt.sed + + + ac_libobjs= + ac_ltlibobjs= + for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' + done + LIBOBJS=$ac_libobjs + + LTLIBOBJS=$ac_ltlibobjs + + + + : ${CONFIG_STATUS=./config.status} + ac_clean_files_save=$ac_clean_files + ac_clean_files="$ac_clean_files $CONFIG_STATUS" + { echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 + echo "$as_me: creating $CONFIG_STATUS" >&6;} + cat >$CONFIG_STATUS <<_ACEOF + #! $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} + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + ## --------------------- ## + ## M4sh Initialization. ## + ## --------------------- ## + + # 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+"$@"}'='"$@"' + elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix + fi + + # Support unset when possible. + if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset + else + as_unset=false + fi + + + # Work around bugs in pre-3.0 UWIN ksh. + $as_unset ENV MAIL MAILPATH + PS1='$ ' + PS2='> ' + PS4='+ ' + + # NLS nuisances. + for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME + do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi + done + + # Required to use basename. + if expr a : '\(a\)' >/dev/null 2>&1; 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 + + + # Name of the executable. + as_me=`$as_basename "$0" || + $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || + echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + + # PATH needs CR, and LINENO needs CR and PATH. + # 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 + + # The user is always right. + if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh + fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + 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 + + ;; + 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 + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 + echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR + for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH + do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done + done + ;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 + echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # 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 sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit + } + + + case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' + ' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; + esac + + if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr + else + as_expr=false + fi + + rm -f conf$$ conf$$.exe conf$$.file + echo >conf$$.file + if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi + rm -f conf$$ conf$$.exe conf$$.file + + if mkdir -p . 2>/dev/null; then + as_mkdir_p=: + else + as_mkdir_p=false + fi + + as_executable_p="test -f" + + # Sed expression to map a string onto a valid CPP name. + as_tr_cpp="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="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + + # IFS + # We need space, tab and new line, in precisely that order. + as_nl=' + ' + IFS=" $as_nl" + + # CDPATH. + $as_unset CDPATH + + exec 6>&1 + + # Open the log real soon, to keep \$[0] and so on meaningful, and to + # report actual input values of CONFIG_FILES etc. instead of their + # values after options handling. Logging --version etc. is OK. + exec 5>>config.log + { + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX + ## Running $as_me. ## + _ASBOX + } >&5 + cat >&5 <<_CSEOF + + This file was extended by [SAMPLE] $as_me [x.xx], which was + generated by GNU Autoconf 2.57. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + + _CSEOF + echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 + echo >&5 + _ACEOF + + # Files that config.status was made for. + if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS + fi + + if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS + fi + + if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS + fi + + if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS + fi + + cat >>$CONFIG_STATUS <<\_ACEOF + + ac_cs_usage="\ + \`$as_me' instantiates files from templates according to the + current configuration. + + Usage: $0 [OPTIONS] [FILE]... + + -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 + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + + Configuration files: + $config_files + + Configuration commands: + $config_commands + + Report bugs to ." + _ACEOF + + cat >>$CONFIG_STATUS <<_ACEOF + ac_cs_version="\\ + [SAMPLE] config.status [x.xx] + configured by $0, generated by GNU Autoconf 2.57, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + + Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 + Free Software Foundation, Inc. + This config.status script is free software; the Free Software Foundation + gives unlimited permission to copy, distribute and modify it." + srcdir=$srcdir + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # If no file are specified by the user, then we need to provide default + # value. By we need to know if files were specified by the user. + 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=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 + Try \`$0 --help' for more information." >&5 + echo "$as_me: error: ambiguous option: $1 + Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 + Try \`$0 --help' for more information." >&5 + echo "$as_me: error: unrecognized option: $1 + Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + 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 + if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + fi + + _ACEOF + + cat >>$CONFIG_STATUS <<_ACEOF + # + # INIT-COMMANDS section. + # + + ${srcdir}/autoconf/mkinstalldirs `dirname Makefile` + ${srcdir}/autoconf/mkinstalldirs `dirname lib/Makefile` + ${srcdir}/autoconf/mkinstalldirs `dirname lib/sample/Makefile` + ${srcdir}/autoconf/mkinstalldirs `dirname tools/Makefile` + ${srcdir}/autoconf/mkinstalldirs `dirname tools/sample/Makefile` + + _ACEOF + + + + cat >>$CONFIG_STATUS <<\_ACEOF + for ac_config_target in $ac_config_targets + do + case "$ac_config_target" in + # Handling of arguments. + "Makefile.common" ) CONFIG_FILES="$CONFIG_FILES Makefile.common" ;; + "Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS Makefile" ;; + "lib/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/Makefile" ;; + "lib/sample/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS lib/sample/Makefile" ;; + "tools/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS tools/Makefile" ;; + "tools/sample/Makefile" ) CONFIG_COMMANDS="$CONFIG_COMMANDS tools/sample/Makefile" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 + echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac + done + + # If the user did not use the arguments to specify the items to instantiate, + # then the envvar interface is used. Set only those that are not. + # We use the long form for the default assignment because of an extremely + # bizarre bug on SunOS 4.1.3. + if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + fi + + # Have a temporary directory for convenience. Make it in the build tree + # simply because there is no reason to put it here, and in addition, + # creating and moving files from /tmp can sometimes cause problems. + # Create a temporary directory, and hook for its removal unless debugging. + $debug || + { + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 + } + + # Create a (secure) tmp directory for tmp files. + + { + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" + } || + { + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) + } || + { + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } + } + + _ACEOF + + cat >>$CONFIG_STATUS <<_ACEOF + + # + # CONFIG_FILES section. + # + + # No need to generate the scripts if there are no CONFIG_FILES. + # This happens for instance when ./config.status config.h + if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF + s, at SHELL@,$SHELL,;t t + s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t + s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t + s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t + s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t + s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t + s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t + s, at exec_prefix@,$exec_prefix,;t t + s, at prefix@,$prefix,;t t + s, at program_transform_name@,$program_transform_name,;t t + s, at bindir@,$bindir,;t t + s, at sbindir@,$sbindir,;t t + s, at libexecdir@,$libexecdir,;t t + s, at datadir@,$datadir,;t t + s, at sysconfdir@,$sysconfdir,;t t + s, at sharedstatedir@,$sharedstatedir,;t t + s, at localstatedir@,$localstatedir,;t t + s, at libdir@,$libdir,;t t + s, at includedir@,$includedir,;t t + s, at oldincludedir@,$oldincludedir,;t t + s, at infodir@,$infodir,;t t + s, at mandir@,$mandir,;t t + s, at build_alias@,$build_alias,;t t + s, at host_alias@,$host_alias,;t t + s, at target_alias@,$target_alias,;t t + s, at DEFS@,$DEFS,;t t + s, at ECHO_C@,$ECHO_C,;t t + s, at ECHO_N@,$ECHO_N,;t t + s, at ECHO_T@,$ECHO_T,;t t + s, at LIBS@,$LIBS,;t t + s, at LLVM_SRC@,$LLVM_SRC,;t t + s, at LLVM_OBJ@,$LLVM_OBJ,;t t + s, at LIBOBJS@,$LIBOBJS,;t t + s, at LTLIBOBJS@,$LTLIBOBJS,;t t + CEOF + + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi + fi # test -n "$CONFIG_FILES" + + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || + $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || + echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || + $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || + echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 + echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + + if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` + else + ac_dir_suffix= ac_top_builddir= + fi + + case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; + esac + # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be + # absolute. + ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` + ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` + ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` + ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 + echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # 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. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 + echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 + echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + _ACEOF + cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub + $extrasub + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + :t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b + s, at configure_input@,$configure_input,;t t + s, at srcdir@,$ac_srcdir,;t t + s, at abs_srcdir@,$ac_abs_srcdir,;t t + s, at top_srcdir@,$ac_top_srcdir,;t t + s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t + s, at builddir@,$ac_builddir,;t t + s, at abs_builddir@,$ac_abs_builddir,;t t + s, at top_builddir@,$ac_top_builddir,;t t + s, at abs_top_builddir@,$ac_abs_top_builddir,;t t + " $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + + done + _ACEOF + cat >>$CONFIG_STATUS <<\_ACEOF + + # + # CONFIG_COMMANDS section. + # + for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue + ac_dest=`echo "$ac_file" | sed 's,:.*,,'` + ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_dir=`(dirname "$ac_dest") 2>/dev/null || + $as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_dest" : 'X\(//\)[^/]' \| \ + X"$ac_dest" : 'X\(//\)$' \| \ + X"$ac_dest" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || + echo X"$ac_dest" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + ac_builddir=. + + if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` + else + ac_dir_suffix= ac_top_builddir= + fi + + case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; + esac + # Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be + # absolute. + ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` + ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` + ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` + ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 + echo "$as_me: executing $ac_dest commands" >&6;} + case $ac_dest in + Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/Makefile Makefile ;; + lib/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/lib/Makefile lib/Makefile ;; + lib/sample/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/lib/sample/Makefile lib/sample/Makefile ;; + tools/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/tools/Makefile tools/Makefile ;; + tools/sample/Makefile ) ${SHELL} ${srcdir}/autoconf/install-sh -c ${srcdir}/tools/sample/Makefile tools/sample/Makefile ;; + esac + done + _ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + + { (exit 0); exit 0; } + _ACEOF + chmod +x $CONFIG_STATUS + ac_clean_files=$ac_clean_files_save + + + # 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 || { (exit 1); exit 1; } + fi + From criswell at cs.uiuc.edu Wed Oct 15 20:46:14 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:46:14 2003 Subject: [llvm-commits] CVS: llvm/projects/sample/Makefile.common.in Makefile.common Makefile.config Message-ID: <200310160145.UAA03572@choi.cs.uiuc.edu> Changes in directory llvm/projects/sample: Makefile.common.in added (r1.1) Makefile.common (r1.4) removed Makefile.config (r1.2) removed --- Log message: Adding autoconf support for the sample project. This should make setting up a new project much easier. --- Diffs of the changes: (+28 -0) Index: llvm/projects/sample/Makefile.common.in diff -c /dev/null llvm/projects/sample/Makefile.common.in:1.1 *** /dev/null Wed Oct 15 20:45:20 2003 --- llvm/projects/sample/Makefile.common.in Wed Oct 15 20:45:10 2003 *************** *** 0 **** --- 1,28 ---- + # + # Set this variable to the top of the LLVM source tree. + # + LLVM_SRC_ROOT = @LLVM_SRC@ + + # + # Set this variable to the top level directory where LLVM was built + # (this is *not* the same as OBJ_ROOT as defined in LLVM's Makefile.config). + # + LLVM_OBJ_ROOT = @LLVM_OBJ@ + + # + # Include LLVM's Master Makefile. + # + include $(LLVM_OBJ_ROOT)/Makefile.config + + # + # Set the source root and source directory pathnames + # + BUILD_SRC_DIR := $(subst //,/, at abs_top_srcdir@/$(patsubst $(BUILD_OBJ_ROOT)%,%,$(BUILD_OBJ_DIR))) + + BUILD_SRC_ROOT := $(subst //,/, at abs_top_srcdir@) + + # + # Include LLVM's Master Makefile. + # + include $(LLVM_SRC_ROOT)/Makefile.rules + From criswell at cs.uiuc.edu Wed Oct 15 20:50:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:50:01 2003 Subject: [llvm-commits] CVS: llvm/configure Makefile.rules Message-ID: <200310160149.UAA03619@choi.cs.uiuc.edu> Changes in directory llvm: configure updated: 1.46 -> 1.47 Makefile.rules updated: 1.146 -> 1.147 --- Log message: Added autoconf support for the sample project. Fixed the header comment in Makefile.rules Changed all references to the echo program in Makefile.rules to the value found by autoconf. --- Diffs of the changes: (+69 -102) Index: llvm/configure diff -u llvm/configure:1.46 llvm/configure:1.47 --- llvm/configure:1.46 Mon Oct 13 11:21:59 2003 +++ llvm/configure Wed Oct 15 20:48:59 2003 @@ -426,6 +426,7 @@ PACKAGE_STRING='[LLVM] [1.0]' PACKAGE_BUGREPORT='llvmbugs at cs.uiuc.edu' +ac_subdirs_all="$ac_subdirs_all projects/sample" ac_subdirs_all="$ac_subdirs_all projects/reopt" ac_subdirs_all="$ac_subdirs_all projects/poolalloc" # Factoring default headers for most tests. @@ -1520,6 +1521,14 @@ fi fi +if test -d ${srcdir}/projects/sample +then + + +subdirs="$subdirs projects/sample" + +fi + if test -d ${srcdir}/projects/reopt then @@ -2030,27 +2039,6 @@ ac_config_commands="$ac_config_commands projects/Makefile" - ac_config_commands="$ac_config_commands projects/sample/Makefile" - - - ac_config_commands="$ac_config_commands projects/sample/Makefile.common" - - - ac_config_commands="$ac_config_commands projects/sample/Makefile.config" - - - ac_config_commands="$ac_config_commands projects/sample/lib/Makefile" - - - ac_config_commands="$ac_config_commands projects/sample/lib/sample/Makefile" - - - ac_config_commands="$ac_config_commands projects/sample/tools/Makefile" - - - ac_config_commands="$ac_config_commands projects/sample/tools/sample/Makefile" - - ac_config_commands="$ac_config_commands projects/ModuleMaker/Makefile" @@ -4410,7 +4398,7 @@ ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 4413 "configure"' > conftest.$ac_ext + echo '#line 4401 "configure"' > conftest.$ac_ext if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -5251,7 +5239,7 @@ # Provide some information about the compiler. -echo "$as_me:5254:" \ +echo "$as_me:5242:" \ "checking for Fortran 77 compiler version" >&5 ac_compiler=`set X $ac_compile; echo $2` { (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 @@ -6260,11 +6248,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6263: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6251: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6267: \$? = $ac_status" >&5 + echo "$as_me:6255: \$? = $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 @@ -6492,11 +6480,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6495: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6483: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:6499: \$? = $ac_status" >&5 + echo "$as_me:6487: \$? = $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 @@ -6559,11 +6547,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:6562: $lt_compile\"" >&5) + (eval echo "\"\$as_me:6550: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:6566: \$? = $ac_status" >&5 + echo "$as_me:6554: \$? = $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 @@ -8571,7 +8559,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:10796: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:10812: \$? = $ac_status" >&5 + echo "$as_me:10800: \$? = $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 @@ -10872,11 +10860,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:10875: $lt_compile\"" >&5) + (eval echo "\"\$as_me:10863: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:10879: \$? = $ac_status" >&5 + echo "$as_me:10867: \$? = $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 @@ -12115,7 +12103,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext <&5) + (eval echo "\"\$as_me:13026: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13042: \$? = $ac_status" >&5 + echo "$as_me:13030: \$? = $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 @@ -13102,11 +13090,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13105: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13093: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13109: \$? = $ac_status" >&5 + echo "$as_me:13097: \$? = $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 @@ -15046,11 +15034,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15049: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15037: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15053: \$? = $ac_status" >&5 + echo "$as_me:15041: \$? = $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 @@ -15278,11 +15266,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15281: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15269: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:15285: \$? = $ac_status" >&5 + echo "$as_me:15273: \$? = $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 @@ -15345,11 +15333,11 @@ -e 's:.*FLAGS}? :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:15348: $lt_compile\"" >&5) + (eval echo "\"\$as_me:15336: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:15352: \$? = $ac_status" >&5 + echo "$as_me:15340: \$? = $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 @@ -17357,7 +17345,7 @@ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext < conftest.$ac_ext < /dev/null || ${MV} -f $*.tab.c $*.cpp $(VERB) cmp -s $*.tab.h $*.h > /dev/null || ${MV} -f $*.tab.h $*.h From criswell at cs.uiuc.edu Wed Oct 15 20:50:12 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Wed Oct 15 20:50:12 2003 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200310160149.UAA03626@choi.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.42 -> 1.43 --- Log message: Added autoconf support for the sample project. --- Diffs of the changes: (+5 -7) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.42 llvm/autoconf/configure.ac:1.43 --- llvm/autoconf/configure.ac:1.42 Mon Oct 13 11:22:00 2003 +++ llvm/autoconf/configure.ac Wed Oct 15 20:49:07 2003 @@ -30,6 +30,11 @@ fi fi +if test -d ${srcdir}/projects/sample +then + AC_CONFIG_SUBDIRS(projects/sample) +fi + if test -d ${srcdir}/projects/reopt then AC_CONFIG_SUBDIRS(projects/reopt) @@ -206,13 +211,6 @@ AC_CONFIG_MAKEFILE(utils/Burg/Doc/Makefile) AC_CONFIG_MAKEFILE(utils/TableGen/Makefile) AC_CONFIG_MAKEFILE(projects/Makefile) -AC_CONFIG_MAKEFILE(projects/sample/Makefile) -AC_CONFIG_MAKEFILE(projects/sample/Makefile.common) -AC_CONFIG_MAKEFILE(projects/sample/Makefile.config) -AC_CONFIG_MAKEFILE(projects/sample/lib/Makefile) -AC_CONFIG_MAKEFILE(projects/sample/lib/sample/Makefile) -AC_CONFIG_MAKEFILE(projects/sample/tools/Makefile) -AC_CONFIG_MAKEFILE(projects/sample/tools/sample/Makefile) AC_CONFIG_MAKEFILE(projects/ModuleMaker/Makefile) AC_CONFIG_MAKEFILE(projects/ModuleMaker/Makefile.common) AC_CONFIG_MAKEFILE(projects/ModuleMaker/tools/Makefile) From gaeke at cs.uiuc.edu Wed Oct 15 23:42:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Oct 15 23:42:02 2003 Subject: [llvm-commits] CVS: llvm/tools/llvm-nm/ Message-ID: <200310160442.XAA18221@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-nm: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/tools/llvm-nm added to the repository --- Diffs of the changes: (+0 -0) From gaeke at cs.uiuc.edu Wed Oct 15 23:44:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Wed Oct 15 23:44:02 2003 Subject: [llvm-commits] CVS: llvm/tools/llvm-nm/Makefile llvm-nm.cpp Message-ID: <200310160443.XAA18249@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-nm: Makefile added (r1.1) llvm-nm.cpp added (r1.1) --- Log message: Okay, this is a little hack that "scratches an itch" of mine. I dislike having to examine the output of "dis" to see what symbols are in a bytecode file. So, here is a first cut at a "nm" utility for llvm. Flame away.... :-) --- Diffs of the changes: (+132 -0) Index: llvm/tools/llvm-nm/Makefile diff -c /dev/null llvm/tools/llvm-nm/Makefile:1.1 *** /dev/null Wed Oct 15 23:43:25 2003 --- llvm/tools/llvm-nm/Makefile Wed Oct 15 23:43:15 2003 *************** *** 0 **** --- 1,5 ---- + LEVEL = ../.. + + TOOLNAME = llvm-nm + USEDLIBS = bcreader vmcore support.a + include $(LEVEL)/Makefile.common Index: llvm/tools/llvm-nm/llvm-nm.cpp diff -c /dev/null llvm/tools/llvm-nm/llvm-nm.cpp:1.1 *** /dev/null Wed Oct 15 23:43:25 2003 --- llvm/tools/llvm-nm/llvm-nm.cpp Wed Oct 15 23:43:15 2003 *************** *** 0 **** --- 1,127 ---- + //===-- llvm-nm.cpp - Symbol table dumping utility for llvm ---------------===// + // + // This program is a utility that works like traditional Unix "nm", + // that is, it prints out the names of symbols in a bytecode file, + // along with some information about each symbol. + // + // This "nm" does not print symbols' addresses. It supports many of + // the features of GNU "nm", including its different output formats. + // + //===----------------------------------------------------------------------===// + + #include "Support/CommandLine.h" + #include "llvm/Bytecode/Reader.h" + #include "llvm/GlobalValue.h" + #include "llvm/Module.h" + #include + + namespace { + enum OutputFormatTy { bsd, sysv, posix }; + cl::opt + OutputFormat("format", + cl::desc("Specify output format"), + cl::values(clEnumVal(bsd, "BSD format"), + clEnumVal(sysv, "System V format"), + clEnumVal(posix, "POSIX.2 format"), 0), cl::init(bsd)); + cl::alias OutputFormat2("f", cl::desc("Alias for --format"), + cl::aliasopt(OutputFormat)); + + cl::list + InputFilenames(cl::Positional, cl::desc(""), + cl::OneOrMore); + + cl::opt UndefinedOnly("undefined-only", + cl::desc("Show only undefined symbols")); + cl::alias UndefinedOnly2("u", cl::desc("Alias for --undefined-only"), + cl::aliasopt(UndefinedOnly)); + + cl::opt DefinedOnly("defined-only", + cl::desc("Show only defined symbols")); + + cl::opt ExternalOnly("extern-only", + cl::desc("Show only external symbols")); + cl::alias ExternalOnly2("g", cl::desc("Alias for --extern-only"), + cl::aliasopt(ExternalOnly)); + + cl::opt BSDFormat("B", cl::desc("Alias for --format=bsd")); + cl::opt POSIXFormat("P", cl::desc("Alias for --format=posix")); + + bool MultipleFiles = false; + + std::string ToolName; + }; + + char TypeCharForSymbol (GlobalValue &GV) { + if (GV.isExternal ()) return 'U'; + if (GV.hasLinkOnceLinkage ()) return 'C'; + #ifdef WEAK_LINKAGE_EVENTUALLY_IMPLEMENTED + if (GV.hasWeakLinkage ()) return 'W'; + #endif + if (isa (GV) && GV.hasInternalLinkage ()) return 't'; + if (isa (GV)) return 'T'; + if (isa (GV) && GV.hasInternalLinkage ()) return 'd'; + if (isa (GV)) return 'D'; + return '?'; + } + + void DumpSymbolNameForGlobalValue (GlobalValue &GV) { + const std::string SymbolAddrStr = " "; // Not used yet... + char TypeChar = TypeCharForSymbol (GV); + if ((TypeChar != 'U') && UndefinedOnly) + return; + if ((TypeChar == 'U') && DefinedOnly) + return; + if (GV.hasInternalLinkage () && ExternalOnly) + return; + if (OutputFormat == posix) { + std::cout << GV.getName () << " " << TypeCharForSymbol (GV) << " " + << SymbolAddrStr << "\n"; + } else if (OutputFormat == bsd) { + std::cout << SymbolAddrStr << " " << TypeCharForSymbol (GV) << " " + << GV.getName () << "\n"; + } else if (OutputFormat == sysv) { + std::string PaddedName (GV.getName ()); + while (PaddedName.length () < 20) + PaddedName += " "; + std::cout << PaddedName << "|" << SymbolAddrStr << "| " + << TypeCharForSymbol (GV) + << " | | | |\n"; + } + } + + void DumpSymbolNamesFromModule (Module *M) { + std::for_each (M->begin (), M->end (), DumpSymbolNameForGlobalValue); + std::for_each (M->gbegin (), M->gend (), DumpSymbolNameForGlobalValue); + } + + void DumpSymbolNamesFromFile (std::string &Filename) { + std::string ErrorMessage; + Module *Result = ParseBytecodeFile(Filename, &ErrorMessage); + if (Result) { + if (OutputFormat == posix && MultipleFiles) { + std::cout << Filename << ":\n"; + } else if (OutputFormat == bsd && MultipleFiles) { + std::cout << "\n" << Filename << ":\n"; + } else if (OutputFormat == sysv) { + std::cout << "\n\nSymbols from " << Filename << ":\n\n" + << "Name Value Class Type" + << " Size Line Section\n"; + } + DumpSymbolNamesFromModule (Result); + } else { + std::cerr << ToolName << ": " << Filename << ": " << ErrorMessage << "\n"; + } + } + + int main(int argc, char **argv) { + cl::ParseCommandLineOptions(argc, argv, " llvm symbol table dumper\n"); + ToolName = argv[0]; + if (BSDFormat) OutputFormat = bsd; + if (POSIXFormat) OutputFormat = posix; + if (InputFilenames.size () != 1) + MultipleFiles = true; + + std::for_each (InputFilenames.begin (), InputFilenames.end (), + DumpSymbolNamesFromFile); + return 0; + } From brukman at cs.uiuc.edu Thu Oct 16 11:13:02 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 11:13:02 2003 Subject: [llvm-commits] CVS: llvm/autoconf/configure.ac Message-ID: <200310161612.LAA28468@zion.cs.uiuc.edu> Changes in directory llvm/autoconf: configure.ac updated: 1.43 -> 1.44 --- Log message: Added an entry for `llvm-nm'. --- Diffs of the changes: (+1 -0) Index: llvm/autoconf/configure.ac diff -u llvm/autoconf/configure.ac:1.43 llvm/autoconf/configure.ac:1.44 --- llvm/autoconf/configure.ac:1.43 Wed Oct 15 20:49:07 2003 +++ llvm/autoconf/configure.ac Thu Oct 16 11:12:04 2003 @@ -205,6 +205,7 @@ AC_CONFIG_MAKEFILE(tools/llvm-as/Makefile) AC_CONFIG_MAKEFILE(tools/llvm-dis/Makefile) AC_CONFIG_MAKEFILE(tools/llvm-link/Makefile) +AC_CONFIG_MAKEFILE(tools/llvm-nm/Makefile) AC_CONFIG_MAKEFILE(tools/opt/Makefile) AC_CONFIG_MAKEFILE(utils/Makefile) AC_CONFIG_MAKEFILE(utils/Burg/Makefile) From criswell at cs.uiuc.edu Thu Oct 16 11:38:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 11:38:02 2003 Subject: [llvm-commits] CVS: llvm-www/releases/register.py index.html Message-ID: <200310161637.LAA23686@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: register.py added (r1.1) index.html updated: 1.2 -> 1.3 --- Log message: Adding in the registration CGI script for testing. --- Diffs of the changes: (+212 -3) Index: llvm-www/releases/register.py diff -c /dev/null llvm-www/releases/register.py:1.1 *** /dev/null Thu Oct 16 11:37:18 2003 --- llvm-www/releases/register.py Thu Oct 16 11:37:08 2003 *************** *** 0 **** --- 1,197 ---- + #!/usr/dcs/software/supported/bin/python + + import cgi + import urllib + import smtplib + import os + import sys + + # List of email addresses that want to know when people download + notifylist=['criswell at uiuc.edu', 'jcriswel at bigw.org'] + + # + # Function: Subscribe() + # + # Description: + # This function subscribes the specified user to the LLVM announce mailing + # list. + # + def Subscribe (form): + # Name of the LLVM subscription CGI script + scriptURL='http://mail.cs.uiuc.edu/mailman/subscribe/llvm-announce' + + # + # Extract from the form any information that we need + # + email = form.getfirst ('email', '') + pw1 = form.getfirst ('pw1', '') + pw2 = form.getfirst ('pw2', '') + announce = form.getfirst ('announce','yes') + + # + # Exit now if we do not need to subscribe. + # + if (announce != 'yes'): + return + + # + # Create a POST request with all of the information that the CGI + # script will require. + # + options = {'email': email, 'pw': pw1, 'pw-conf': pw2, 'digest': '0'} + + # + # Convert the POST options into a string that we can send to the + # subscription CGI script. + # + postdata = urllib.urlencode (options) + + # + # Subscribe the user. + # + urllib.urlopen (scriptURL, postdata) + + return + + # + # Function: ValidateForm () + # + # Description: + # Make sure that the input to the CGI script is valid. + # + def ValidateForm (form): + # + # Verify if the required fields have been supplied. + # + firstname = form.getfirst ('firstname', '') + lastname = form.getfirst ('lastname', '') + email = form.getfirst ('email', '') + pw1 = form.getfirst ('pw1', '') + pw2 = form.getfirst ('pw2', '') + announce = form.getfirst ('announce','yes') + + # + # Verify that the name and email fields have been filled in. + # + if (firstname == ''): + return 'First name is empty.' + + if (lastname == ''): + return 'Last name is empty.' + + if (email == ''): + return 'Email address is empty.' + + # + # Verify that the email address has an at sign and some periods. + # + length = len (email) - 1 + while (length != 0): + if (email[length] == '@'): + break + length=length - 1 + else: + return 'Email address has no at sign' + + length = len (email) - 1 + while (length != 0): + if (email[length] == '.'): + break + length=length - 1 + else: + return 'Email address has no periods' + + # + # Verify that a non-empty password has been selected. + # + if ((announce == 'yes') and ((pw1 == '') or (pw2 == ''))): + return 'Password for mailing address is empty.' + + # + # Verify that the passwords are equal. + # + if (pw1 != pw2): + return 'Confirmation password does not match original password.' + + return '' + + # + # Function: LogForm () + # + # Description: + # Append a log record to the logfile that another users has registered to + # download LLVM. + # + def LogForm (form): + # + # Extract the information from the form that we want. + # + firstname = form.getfirst ('firstname', '') + lastname = form.getfirst ('lastname', '') + title = form.getfirst ('title','') + organization = form.getfirst ('organization', '') + email = form.getfirst ('email','') + plans = form.getfirst ('plans','') + if (plans == ''): + plans = 'No plans.' + + # + # Construct an email message describing the user who is downloading + # LLVM. + # + msg = 'Subject: [LLVM DOWNLOAD]\r\n\r\n' + msg = msg + 'Name: ' + firstname + ' ' + lastname + '\n' + msg = msg + 'Email: ' + email + '\n' + msg = msg + 'Title: ' + title + '\n' + msg = msg + 'Organization: ' + organization + '\n' + msg = msg + 'Plans with LLVM:\n' + plans + '\n' + + # + # Send email to notify that someone has downloaded LLVM yet again! + # + mailer = smtplib.SMTP ('localhost') + for receiver in notifylist: + header = 'From: ' + email + '\r\nTo: ' + receiver + '\r\n' + try: + mailer.sendmail (email, receiver, msg) + except: + pass + mailer.quit () + return + + # + # Parse the CGI input + # + form = cgi.FieldStorage () + + # + # Verify that everything in the form is correct. + # + error = ValidateForm (form) + if (error != ''): + print ('Content-type: text/html') + print ('Status: 400 Bad Request') + print ('') + print ('

    ') + print ('Error in form:' + error) + print ('

    ') + sys.exit (0) + + # + # Log the information provided by the form. + # + LogForm (form) + + # + # Subscribe the user the LLVM Announcements list (if they so desire) + # + Subscribe (form) + + # + # Everything so far has worked. Send the user to the download page. + # + print ('Location: /download.html') + print ('') + + sys.exit (0) + Index: llvm-www/releases/index.html diff -u llvm-www/releases/index.html:1.2 llvm-www/releases/index.html:1.3 --- llvm-www/releases/index.html:1.2 Wed Oct 15 15:01:27 2003 +++ llvm-www/releases/index.html Thu Oct 16 11:37:08 2003 @@ -13,10 +13,24 @@
    + +NOTE: This registration page is currently up for testing. If you want to +download LLVM, you will have to re-register once we finish the 1.0 Release. +

    +If you want to know when the 1.0 Release of LLVM will be ready, you can +subscribe to our LLVM Announcements mailing list at + +http://mail.cs.uiuc.edu/mailman/listinfo/llvm-announce +. +We will send mail to the list once the 1.0 Release is finished. + +


    + Welcome to the LLVM registration page! Please complete the following form below to download a copy of the LLVM software. +

    -

    + First Name (required):

    @@ -50,10 +64,8 @@

    -

    From criswell at cs.uiuc.edu Thu Oct 16 11:39:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 11:39:02 2003 Subject: [llvm-commits] CVS: llvm-www/releases/index.html Message-ID: <200310161638.LAA23710@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: index.html updated: 1.3 -> 1.4 --- Log message: Corrected the pathname to the CGI script. --- Diffs of the changes: (+1 -1) Index: llvm-www/releases/index.html diff -u llvm-www/releases/index.html:1.3 llvm-www/releases/index.html:1.4 --- llvm-www/releases/index.html:1.3 Thu Oct 16 11:37:08 2003 +++ llvm-www/releases/index.html Thu Oct 16 11:38:22 2003 @@ -30,7 +30,7 @@ below to download a copy of the LLVM software.

    -

    + First Name (required):

    From criswell at cs.uiuc.edu Thu Oct 16 11:42:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 11:42:01 2003 Subject: [llvm-commits] CVS: llvm-www/releases/register.cgi index.html register.py Message-ID: <200310161641.LAA23747@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: register.cgi added (r1.1) index.html updated: 1.4 -> 1.5 register.py (r1.1) removed --- Log message: Renamed the script from register.py to register.cgi. This should hopefully make the script executable within the web directory. --- Diffs of the changes: (+198 -1) Index: llvm-www/releases/register.cgi diff -c /dev/null llvm-www/releases/register.cgi:1.1 *** /dev/null Thu Oct 16 11:41:14 2003 --- llvm-www/releases/register.cgi Thu Oct 16 11:41:04 2003 *************** *** 0 **** --- 1,197 ---- + #!/usr/dcs/software/supported/bin/python + + import cgi + import urllib + import smtplib + import os + import sys + + # List of email addresses that want to know when people download + notifylist=['criswell at uiuc.edu', 'jcriswel at bigw.org'] + + # + # Function: Subscribe() + # + # Description: + # This function subscribes the specified user to the LLVM announce mailing + # list. + # + def Subscribe (form): + # Name of the LLVM subscription CGI script + scriptURL='http://mail.cs.uiuc.edu/mailman/subscribe/llvm-announce' + + # + # Extract from the form any information that we need + # + email = form.getfirst ('email', '') + pw1 = form.getfirst ('pw1', '') + pw2 = form.getfirst ('pw2', '') + announce = form.getfirst ('announce','yes') + + # + # Exit now if we do not need to subscribe. + # + if (announce != 'yes'): + return + + # + # Create a POST request with all of the information that the CGI + # script will require. + # + options = {'email': email, 'pw': pw1, 'pw-conf': pw2, 'digest': '0'} + + # + # Convert the POST options into a string that we can send to the + # subscription CGI script. + # + postdata = urllib.urlencode (options) + + # + # Subscribe the user. + # + urllib.urlopen (scriptURL, postdata) + + return + + # + # Function: ValidateForm () + # + # Description: + # Make sure that the input to the CGI script is valid. + # + def ValidateForm (form): + # + # Verify if the required fields have been supplied. + # + firstname = form.getfirst ('firstname', '') + lastname = form.getfirst ('lastname', '') + email = form.getfirst ('email', '') + pw1 = form.getfirst ('pw1', '') + pw2 = form.getfirst ('pw2', '') + announce = form.getfirst ('announce','yes') + + # + # Verify that the name and email fields have been filled in. + # + if (firstname == ''): + return 'First name is empty.' + + if (lastname == ''): + return 'Last name is empty.' + + if (email == ''): + return 'Email address is empty.' + + # + # Verify that the email address has an at sign and some periods. + # + length = len (email) - 1 + while (length != 0): + if (email[length] == '@'): + break + length=length - 1 + else: + return 'Email address has no at sign' + + length = len (email) - 1 + while (length != 0): + if (email[length] == '.'): + break + length=length - 1 + else: + return 'Email address has no periods' + + # + # Verify that a non-empty password has been selected. + # + if ((announce == 'yes') and ((pw1 == '') or (pw2 == ''))): + return 'Password for mailing address is empty.' + + # + # Verify that the passwords are equal. + # + if (pw1 != pw2): + return 'Confirmation password does not match original password.' + + return '' + + # + # Function: LogForm () + # + # Description: + # Append a log record to the logfile that another users has registered to + # download LLVM. + # + def LogForm (form): + # + # Extract the information from the form that we want. + # + firstname = form.getfirst ('firstname', '') + lastname = form.getfirst ('lastname', '') + title = form.getfirst ('title','') + organization = form.getfirst ('organization', '') + email = form.getfirst ('email','') + plans = form.getfirst ('plans','') + if (plans == ''): + plans = 'No plans.' + + # + # Construct an email message describing the user who is downloading + # LLVM. + # + msg = 'Subject: [LLVM DOWNLOAD]\r\n\r\n' + msg = msg + 'Name: ' + firstname + ' ' + lastname + '\n' + msg = msg + 'Email: ' + email + '\n' + msg = msg + 'Title: ' + title + '\n' + msg = msg + 'Organization: ' + organization + '\n' + msg = msg + 'Plans with LLVM:\n' + plans + '\n' + + # + # Send email to notify that someone has downloaded LLVM yet again! + # + mailer = smtplib.SMTP ('localhost') + for receiver in notifylist: + header = 'From: ' + email + '\r\nTo: ' + receiver + '\r\n' + try: + mailer.sendmail (email, receiver, msg) + except: + pass + mailer.quit () + return + + # + # Parse the CGI input + # + form = cgi.FieldStorage () + + # + # Verify that everything in the form is correct. + # + error = ValidateForm (form) + if (error != ''): + print ('Content-type: text/html') + print ('Status: 400 Bad Request') + print ('') + print ('

    ') + print ('Error in form:' + error) + print ('

    ') + sys.exit (0) + + # + # Log the information provided by the form. + # + LogForm (form) + + # + # Subscribe the user the LLVM Announcements list (if they so desire) + # + Subscribe (form) + + # + # Everything so far has worked. Send the user to the download page. + # + print ('Location: /download.html') + print ('') + + sys.exit (0) + Index: llvm-www/releases/index.html diff -u llvm-www/releases/index.html:1.4 llvm-www/releases/index.html:1.5 --- llvm-www/releases/index.html:1.4 Thu Oct 16 11:38:22 2003 +++ llvm-www/releases/index.html Thu Oct 16 11:41:04 2003 @@ -30,7 +30,7 @@ below to download a copy of the LLVM software.

    - + First Name (required):

    From criswell at cs.uiuc.edu Thu Oct 16 11:44:02 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 11:44:02 2003 Subject: [llvm-commits] CVS: llvm-www/releases/register.cgi Message-ID: <200310161643.LAA23777@choi.cs.uiuc.edu> Changes in directory llvm-www/releases: register.cgi updated: 1.1 -> 1.2 --- Log message: Corrected the name of the download web page. --- Diffs of the changes: (+1 -1) Index: llvm-www/releases/register.cgi diff -u llvm-www/releases/register.cgi:1.1 llvm-www/releases/register.cgi:1.2 --- llvm-www/releases/register.cgi:1.1 Thu Oct 16 11:41:04 2003 +++ llvm-www/releases/register.cgi Thu Oct 16 11:43:24 2003 @@ -190,7 +190,7 @@ # # Everything so far has worked. Send the user to the download page. # -print ('Location: /download.html') +print ('Location: /releases/download.html') print ('') sys.exit (0) From lattner at cs.uiuc.edu Thu Oct 16 11:50:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:50:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp Message-ID: <200310161649.LAA07428@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: PiNodeInsertion.cpp updated: 1.11 -> 1.12 --- Log message: This code does not require random access use_lists --- Diffs of the changes: (+2 -7) Index: llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp diff -u llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp:1.11 llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp:1.12 --- llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp:1.11 Fri Oct 10 12:50:50 2003 +++ llvm/lib/Transforms/Scalar/PiNodeInsertion.cpp Thu Oct 16 11:49:12 2003 @@ -154,20 +154,15 @@ // dominates with references to the Pi node itself. // DominatorSet &DS = getAnalysis(); - for (unsigned i = 0; i < V->use_size(); ) { - if (Instruction *U = dyn_cast(*(V->use_begin()+i))) + for (Value::use_iterator I = V->use_begin(), E = V->use_end(); I != E; ) + if (Instruction *U = dyn_cast(*I++)) if (U->getParent()->getParent() == Succ->getParent() && DS.dominates(Succ, U->getParent())) { // This instruction is dominated by the Pi node, replace reference to V // with a reference to the Pi node. // U->replaceUsesOfWith(V, Pi); - continue; // Do not skip the next use... } - - // This use is not dominated by the Pi node, skip it... - ++i; - } // Set up the incoming value for the Pi node... do this after uses have been // replaced, because we don't want the Pi node to refer to itself. From lattner at cs.uiuc.edu Thu Oct 16 11:50:12 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:50:12 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/ExprTypeConvert.cpp Message-ID: <200310161649.LAA07407@apoc.cs.uiuc.edu> Changes in directory llvm/lib/Transforms: ExprTypeConvert.cpp updated: 1.79 -> 1.80 --- Log message: Eliminate using declaration Rewrite code to work with use_lists what are either random access or bidirectional --- Diffs of the changes: (+35 -29) Index: llvm/lib/Transforms/ExprTypeConvert.cpp diff -u llvm/lib/Transforms/ExprTypeConvert.cpp:1.79 llvm/lib/Transforms/ExprTypeConvert.cpp:1.80 --- llvm/lib/Transforms/ExprTypeConvert.cpp:1.79 Wed Oct 15 11:48:29 2003 +++ llvm/lib/Transforms/ExprTypeConvert.cpp Thu Oct 16 11:48:53 2003 @@ -15,7 +15,6 @@ #include "Support/STLExtras.h" #include "Support/Debug.h" #include -using std::cerr; static bool OperandConvertibleToType(User *U, Value *V, const Type *Ty, ValueTypeCache &ConvertedTypes, @@ -340,7 +339,7 @@ return VMCI->second; } - DEBUG(cerr << "CETT: " << (void*)V << " " << V); + DEBUG(std::cerr << "CETT: " << (void*)V << " " << V); Instruction *I = dyn_cast(V); if (I == 0) { @@ -539,20 +538,19 @@ // Add the instruction to the expression map VMC.ExprMap[I] = Res; - // Expressions are only convertible if all of the users of the expression can - // have this value converted. This makes use of the map to avoid infinite - // recursion. - // + unsigned NumUses = I->use_size(); for (unsigned It = 0; It < NumUses; ) { unsigned OldSize = NumUses; - ConvertOperandToType(*(I->use_begin()+It), I, Res, VMC, TD); + Value::use_iterator UI = I->use_begin(); + std::advance(UI, It); + ConvertOperandToType(*UI, I, Res, VMC, TD); NumUses = I->use_size(); if (NumUses == OldSize) ++It; } - DEBUG(cerr << "ExpIn: " << (void*)I << " " << I - << "ExpOut: " << (void*)Res << " " << Res); + DEBUG(std::cerr << "ExpIn: " << (void*)I << " " << I + << "ExpOut: " << (void*)Res << " " << Res); return Res; } @@ -893,7 +891,9 @@ unsigned NumUses = V->use_size(); for (unsigned It = 0; It < NumUses; ) { unsigned OldSize = NumUses; - ConvertOperandToType(*(V->use_begin()+It), V, NewVal, VMC, TD); + Value::use_iterator UI = V->use_begin(); + std::advance(UI, It); + ConvertOperandToType(*UI, V, NewVal, VMC, TD); NumUses = V->use_size(); if (NumUses == OldSize) ++It; } @@ -921,7 +921,8 @@ I->setName(""); Instruction *Res; // Result of conversion - //cerr << endl << endl << "Type:\t" << Ty << "\nInst: " << I << "BB Before: " << BB << endl; + //std::cerr << endl << endl << "Type:\t" << Ty << "\nInst: " << I + // << "BB Before: " << BB << endl; // Prevent I from being removed... ValueHandle IHandle(VMC, I); @@ -1212,9 +1213,9 @@ assert(It != BB->end() && "Instruction not in own basic block??"); BB->getInstList().insert(It, Res); // Keep It pointing to old instruction - DEBUG(cerr << "COT CREATED: " << (void*)Res << " " << Res - << "In: " << (void*)I << " " << I << "Out: " << (void*)Res - << " " << Res); + DEBUG(std::cerr << "COT CREATED: " << (void*)Res << " " << Res + << "In: " << (void*)I << " " << I << "Out: " << (void*)Res + << " " << Res); // Add the instruction to the expression map VMC.ExprMap[I] = Res; @@ -1222,30 +1223,35 @@ if (I->getType() != Res->getType()) ConvertValueToNewType(I, Res, VMC, TD); else { - for (unsigned It = 0; It < I->use_size(); ) { - User *Use = *(I->use_begin()+It); - if (isa(Use)) // Don't remove ValueHandles! - ++It; - else - Use->replaceUsesOfWith(I, Res); + bool FromStart = true; + Value::use_iterator UI; + while (1) { + if (FromStart) UI = I->use_begin(); + if (UI == I->use_end()) break; + + if (isa(*UI)) { + ++UI; + FromStart = false; + } else { + User *U = *UI; + if (!FromStart) --UI; + U->replaceUsesOfWith(I, Res); + if (!FromStart) ++UI; + } } - - for (Value::use_iterator UI = I->use_begin(), UE = I->use_end(); - UI != UE; ++UI) - assert(isa((Value*)*UI) &&"Uses of Instruction remain!!!"); } } ValueHandle::ValueHandle(ValueMapCache &VMC, Value *V) : Instruction(Type::VoidTy, UserOp1, ""), Cache(VMC) { - //DEBUG(cerr << "VH AQUIRING: " << (void*)V << " " << V); + //DEBUG(std::cerr << "VH AQUIRING: " << (void*)V << " " << V); Operands.push_back(Use(V, this)); } ValueHandle::ValueHandle(const ValueHandle &VH) : Instruction(Type::VoidTy, UserOp1, ""), Cache(VH.Cache) { - //DEBUG(cerr << "VH AQUIRING: " << (void*)V << " " << V); + //DEBUG(std::cerr << "VH AQUIRING: " << (void*)V << " " << V); Operands.push_back(Use((Value*)VH.getOperand(0), this)); } @@ -1254,7 +1260,7 @@ assert(I->getParent() && "Inst not in basic block!"); - //DEBUG(cerr << "VH DELETING: " << (void*)I << " " << I); + //DEBUG(std::cerr << "VH DELETING: " << (void*)I << " " << I); for (User::op_iterator OI = I->op_begin(), OE = I->op_end(); OI != OE; ++OI) @@ -1281,7 +1287,7 @@ // RecursiveDelete(Cache, dyn_cast(V)); } else { - //DEBUG(cerr << "VH RELEASING: " << (void*)Operands[0].get() << " " - // << Operands[0]->use_size() << " " << Operands[0]); + //DEBUG(std::cerr << "VH RELEASING: " << (void*)Operands[0].get() << " " + // << Operands[0]->use_size() << " " << Operands[0]); } } From lattner at cs.uiuc.edu Thu Oct 16 11:51:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:51:00 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile Message-ID: <200310161650.LAA07442@apoc.cs.uiuc.edu> Changes in directory llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk: Makefile updated: 1.2 -> 1.3 --- Log message: We need to set the endianness of the host! --- Diffs of the changes: (+6 -1) Index: llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile diff -u llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.2 llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.3 --- llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile:1.2 Sun Oct 5 14:28:48 2003 +++ llvm/test/Programs/External/SPEC/CINT2000/253.perlbmk/Makefile Thu Oct 16 11:49:51 2003 @@ -1,5 +1,10 @@ LEVEL = ../../../../../.. RUN_OPTIONS = $(RUN_TYPE).pl -STDOUT_FILENAME := $(RUN_TYPE).out +STDOUT_FILENAME = $(RUN_TYPE).out CPPFLAGS = -DSPEC_CPU2000_LINUX -Dbool=char -DI_TIME -DI_SYS_TIME + +ifneq ($(ARCH),Sparc) +CPPFLAGS += -D__LITTLE_ENDIAN__ +endif + include ../../Makefile.spec From lattner at cs.uiuc.edu Thu Oct 16 11:51:11 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:51:11 2003 Subject: [llvm-commits] CVS: llvm/tools/gccas/gccas.cpp Message-ID: <200310161650.LAA07455@apoc.cs.uiuc.edu> Changes in directory llvm/tools/gccas: gccas.cpp updated: 1.79 -> 1.80 --- Log message: Unfortunately, it looks like level raise is still needed :( --- Diffs of the changes: (+1 -2) Index: llvm/tools/gccas/gccas.cpp diff -u llvm/tools/gccas/gccas.cpp:1.79 llvm/tools/gccas/gccas.cpp:1.80 --- llvm/tools/gccas/gccas.cpp:1.79 Wed Oct 15 16:49:57 2003 +++ llvm/tools/gccas/gccas.cpp Thu Oct 16 11:50:34 2003 @@ -57,8 +57,7 @@ addPass(PM, createFunctionInliningPass()); // Inline small functions addPass(PM, createInstructionCombiningPass()); // Cleanup code for raise - // FIXME: levelraise pass disabled until it can be rewritten at a later date. - //addPass(PM, createRaisePointerReferencesPass());// Recover type information + addPass(PM, createRaisePointerReferencesPass());// Recover type information addPass(PM, createTailDuplicationPass()); // Simplify cfg by copying code addPass(PM, createCFGSimplificationPass()); // Merge & remove BBs addPass(PM, createScalarReplAggregatesPass()); // Break up aggregate allocas From lattner at cs.uiuc.edu Thu Oct 16 11:54:06 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:54:06 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/Value.cpp Message-ID: <200310161653.LAA07485@apoc.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: Value.cpp updated: 1.36 -> 1.37 --- Log message: Completely rewrite support for the Value::use_* list. Now, all operations on this list (except use_size()) are constant time. Before the killUse method (used whenever something stopped using a value) was linear time, and thus very very slow for large programs. This speeds GCCAS up _substantially_ on large programs: almost 2x for 176.gcc: 176.gcc: 77.07s -> 37.38s 177.mesa: 7.59s -> 5.57s 252.eon: 21.02s -> 19.52s (*) 253.perlbmk: 11.40s -> 13.05s 254.gap: 7.25s -> 7.42s 252.eon would speed up a whole lot more, but optimization time is being dominated by the inlining pass, which needs to be fixed. --- Diffs of the changes: (+11 -37) Index: llvm/lib/VMCore/Value.cpp diff -u llvm/lib/VMCore/Value.cpp:1.36 llvm/lib/VMCore/Value.cpp:1.37 --- llvm/lib/VMCore/Value.cpp:1.36 Mon Oct 6 12:33:39 2003 +++ llvm/lib/VMCore/Value.cpp Thu Oct 16 11:53:07 2003 @@ -35,7 +35,7 @@ // if (Uses.begin() != Uses.end()) { std::cerr << "While deleting: " << *Ty << "%" << Name << "\n"; - for (use_const_iterator I = Uses.begin(); I != Uses.end(); ++I) + for (use_const_iterator I = Uses.begin(), E = Uses.end(); I != E; ++I) std::cerr << "Use still stuck around after Def is destroyed:" << **I << "\n"; } @@ -47,25 +47,6 @@ } - - -void Value::replaceAllUsesWith(Value *New) { - assert(New && "Value::replaceAllUsesWith() is invalid!"); - assert(New != this && "this->replaceAllUsesWith(this) is NOT valid!"); - assert(New->getType() == getType() && - "replaceAllUses of value with new value of different type!"); - while (!Uses.empty()) { - User *Use = Uses.back(); - // Must handle Constants specially, we cannot call replaceUsesOfWith on a - // constant! - if (Constant *C = dyn_cast(Use)) { - C->replaceUsesOfWithOnConstant(this, New); - } else { - Use->replaceUsesOfWith(this, New); - } - } -} - // uncheckedReplaceAllUsesWith - This is exactly the same as replaceAllUsesWith, // except that it doesn't have all of the asserts. The asserts fail because we // are half-way done resolving types, which causes some types to exist as two @@ -74,31 +55,24 @@ // void Value::uncheckedReplaceAllUsesWith(Value *New) { while (!Uses.empty()) { - User *Use = Uses.back(); + Use &U = Uses.back(); // Must handle Constants specially, we cannot call replaceUsesOfWith on a // constant! - if (Constant *C = dyn_cast(Use)) { - C->replaceUsesOfWithOnConstant(this, New, true); + if (Constant *C = dyn_cast(U.getUser())) { + C->replaceUsesOfWithOnConstant(this, New); } else { - Use->replaceUsesOfWith(this, New); + U.set(New); } } } +void Value::replaceAllUsesWith(Value *New) { + assert(New && "Value::replaceAllUsesWith() is invalid!"); + assert(New != this && "this->replaceAllUsesWith(this) is NOT valid!"); + assert(New->getType() == getType() && + "replaceAllUses of value with new value of different type!"); -void Value::killUse(User *U) { - assert(U != 0 && "Null users are not allowed!"); - unsigned i; - - // Scan backwards through the uses list looking for the user. We do this - // because vectors like to be accessed on the end. This is incredibly - // important from a performance perspective. - for (i = Uses.size()-1; Uses[i] != U; --i) - /* empty */; - - assert(i < Uses.size() && "Use not in uses list!!"); - Uses[i] = Uses.back(); - Uses.pop_back(); + uncheckedReplaceAllUsesWith(New); } //===----------------------------------------------------------------------===// From lattner at cs.uiuc.edu Thu Oct 16 11:54:16 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 11:54:16 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Use.h Value.h Message-ID: <200310161653.LAA07478@apoc.cs.uiuc.edu> Changes in directory llvm/include/llvm: Use.h added (r1.1) Value.h updated: 1.45 -> 1.46 --- Log message: Completely rewrite support for the Value::use_* list. Now, all operations on this list (except use_size()) are constant time. Before the killUse method (used whenever something stopped using a value) was linear time, and thus very very slow for large programs. This speeds GCCAS up _substantially_ on large programs: almost 2x for 176.gcc: 176.gcc: 77.07s -> 37.38s 177.mesa: 7.59s -> 5.57s 252.eon: 21.02s -> 19.52s (*) 253.perlbmk: 11.40s -> 13.05s 254.gap: 7.25s -> 7.42s 252.eon would speed up a whole lot more, but optimization time is being dominated by the inlining pass, which needs to be fixed. --- Diffs of the changes: (+184 -64) Index: llvm/include/llvm/Use.h diff -c /dev/null llvm/include/llvm/Use.h:1.1 *** /dev/null Thu Oct 16 11:53:15 2003 --- llvm/include/llvm/Use.h Thu Oct 16 11:53:04 2003 *************** *** 0 **** --- 1,146 ---- + //===-- llvm/Use.h - Definition of the Use class ----------------*- C++ -*-===// + // + // This defines the Use class. The Use class represents the operand of an + // instruction or some other User instance which refers to a Value. The Use + // class keeps the "use list" of the referenced value up to date. + // + //===----------------------------------------------------------------------===// + + #ifndef LLVM_USE_H + #define LLVM_USE_H + + #include "Support/ilist" + template struct ilist_traits; + class Value; + class User; + + + //===----------------------------------------------------------------------===// + // Use Class + //===----------------------------------------------------------------------===// + + // Use is here to make keeping the "use" list of a Value up-to-date really easy. + // + class Use { + Value *Val; + User *U; + Use *Prev, *Next; + friend class ilist_traits; + public: + inline Use(Value *v, User *user); + inline Use(const Use &u); + inline ~Use(); + + operator Value*() const { return Val; } + Value *get() const { return Val; } + User *getUser() const { return U; } + + inline void set(Value *Val); + + Value *operator=(Value *RHS) { + set(RHS); + return RHS; + } + const Use &operator=(const Use &RHS) { + set(RHS.Val); + return *this; + } + + Value *operator->() { return Val; } + const Value *operator->() const { return Val; } + }; + + template<> + struct ilist_traits { + static Use *getPrev(Use *N) { return N->Prev; } + static Use *getNext(Use *N) { return N->Next; } + static const Use *getPrev(const Use *N) { return N->Prev; } + static const Use *getNext(const Use *N) { return N->Next; } + static void setPrev(Use *N, Use *Prev) { N->Prev = Prev; } + static void setNext(Use *N, Use *Next) { N->Next = Next; } + + // createNode - this is used to create the end marker for the use list + static Use *createNode() { return new Use(0,0); } + + void addNodeToList(Use *NTy) {} + void removeNodeFromList(Use *NTy) {} + void transferNodesFromList(iplist &L2, + ilist_iterator first, + ilist_iterator last) {} + }; + + + template<> struct simplify_type { + typedef Value* SimpleType; + static SimpleType getSimplifiedValue(const Use &Val) { + return (SimpleType)Val.get(); + } + }; + template<> struct simplify_type { + typedef Value* SimpleType; + static SimpleType getSimplifiedValue(const Use &Val) { + return (SimpleType)Val.get(); + } + }; + + struct UseListIteratorWrapper : public iplist::iterator { + typedef iplist::iterator Super; + UseListIteratorWrapper() {} + UseListIteratorWrapper(const Super &RHS) : Super(RHS) {} + + UseListIteratorWrapper &operator=(const Super &RHS) { + Super::operator=(RHS); + return *this; + } + + inline User *operator*() const; + User *operator->() const { return operator*(); } + + UseListIteratorWrapper operator--() { return Super::operator--(); } + UseListIteratorWrapper operator++() { return Super::operator++(); } + + UseListIteratorWrapper operator--(int) { // postdecrement operators... + UseListIteratorWrapper tmp = *this; + --*this; + return tmp; + } + UseListIteratorWrapper operator++(int) { // postincrement operators... + UseListIteratorWrapper tmp = *this; + ++*this; + return tmp; + } + }; + + struct UseListConstIteratorWrapper : public iplist::const_iterator { + typedef iplist::const_iterator Super; + UseListConstIteratorWrapper() {} + UseListConstIteratorWrapper(const Super &RHS) : Super(RHS) {} + + // Allow conversion from non-const to const iterators + UseListConstIteratorWrapper(const UseListIteratorWrapper &RHS) : Super(RHS) {} + UseListConstIteratorWrapper(const iplist::iterator &RHS) : Super(RHS) {} + + UseListConstIteratorWrapper &operator=(const Super &RHS) { + Super::operator=(RHS); + return *this; + } + + inline const User *operator*() const; + const User *operator->() const { return operator*(); } + + UseListConstIteratorWrapper operator--() { return Super::operator--(); } + UseListConstIteratorWrapper operator++() { return Super::operator++(); } + + UseListConstIteratorWrapper operator--(int) { // postdecrement operators... + UseListConstIteratorWrapper tmp = *this; + --*this; + return tmp; + } + UseListConstIteratorWrapper operator++(int) { // postincrement operators... + UseListConstIteratorWrapper tmp = *this; + ++*this; + return tmp; + } + }; + + #endif Index: llvm/include/llvm/Value.h diff -u llvm/include/llvm/Value.h:1.45 llvm/include/llvm/Value.h:1.46 --- llvm/include/llvm/Value.h:1.45 Wed Oct 15 11:39:04 2003 +++ llvm/include/llvm/Value.h Thu Oct 16 11:53:04 2003 @@ -11,12 +11,11 @@ #define LLVM_VALUE_H #include "llvm/AbstractTypeUser.h" +#include "llvm/Use.h" #include "Support/Annotation.h" #include "Support/Casting.h" #include -#include -class User; class Type; class Constant; class Argument; @@ -46,7 +45,7 @@ }; private: - std::vector Uses; + iplist Uses; std::string Name; PATypeHolder Ty; ValueTy VTy; @@ -94,8 +93,8 @@ //---------------------------------------------------------------------- // Methods for handling the vector of uses of this Value. // - typedef std::vector::iterator use_iterator; - typedef std::vector::const_iterator use_const_iterator; + typedef UseListIteratorWrapper use_iterator; + typedef UseListConstIteratorWrapper use_const_iterator; unsigned use_size() const { return Uses.size(); } bool use_empty() const { return Uses.empty(); } @@ -103,17 +102,23 @@ use_const_iterator use_begin() const { return Uses.begin(); } use_iterator use_end() { return Uses.end(); } use_const_iterator use_end() const { return Uses.end(); } - User *use_back() { return Uses.back(); } - const User *use_back() const { return Uses.back(); } + User *use_back() { return Uses.back().getUser(); } + const User *use_back() const { return Uses.back().getUser(); } - /// hasOneUse - Return true if there is exactly one user of this value. + /// hasOneUse - Return true if there is exactly one user of this value. This + /// is specialized because it is a common request and does not require + /// traversing the whole use list. /// - bool hasOneUse() const { return use_size() == 1; } + bool hasOneUse() const { + iplist::const_iterator I = Uses.begin(), E = Uses.end(); + if (I == E) return false; + return ++I == E; + } - /// addUse/killUse - These two methods should only be used by the Use class - /// below. - void addUse(User *I) { Uses.push_back(I); } - void killUse(User *I); + /// addUse/killUse - These two methods should only be used by the Use class. + /// + void addUse(Use &U) { Uses.push_back(&U); } + void killUse(Use &U) { Uses.remove(&U); } }; inline std::ostream &operator<<(std::ostream &OS, const Value *V) { @@ -130,64 +135,33 @@ } -//===----------------------------------------------------------------------===// -// Use Class -//===----------------------------------------------------------------------===// +inline User *UseListIteratorWrapper::operator*() const { + return Super::operator*().getUser(); +} -// Use is here to make keeping the "use" list of a Value up-to-date really easy. -// -class Use { - Value *Val; - User *U; -public: - inline Use(Value *v, User *user) { - Val = v; U = user; - if (Val) Val->addUse(U); - } +inline const User *UseListConstIteratorWrapper::operator*() const { + return Super::operator*().getUser(); +} - inline Use(const Use &user) { - Val = 0; - U = user.U; - operator=(user.Val); - } - inline ~Use() { if (Val) Val->killUse(U); } - inline operator Value*() const { return Val; } - inline Value *operator=(Value *V) { - if (Val) Val->killUse(U); - Val = V; - if (V) V->addUse(U); - return V; - } +Use::Use(Value *v, User *user) : Val(v), U(user) { + if (Val) Val->addUse(*this); +} - inline Value *operator->() { return Val; } - inline const Value *operator->() const { return Val; } +Use::Use(const Use &u) : Val(u.Val), U(u.U) { + if (Val) Val->addUse(*this); +} - inline Value *get() { return Val; } - inline const Value *get() const { return Val; } +Use::~Use() { + if (Val) Val->killUse(*this); +} - inline const Use &operator=(const Use &user) { - if (Val) Val->killUse(U); - Val = user.Val; - Val->addUse(U); - return *this; - } -}; +void Use::set(Value *V) { + if (Val) Val->killUse(*this); + Val = V; + if (V) V->addUse(*this); +} -template<> struct simplify_type { - typedef Value* SimpleType; - - static SimpleType getSimplifiedValue(const Use &Val) { - return (SimpleType)Val.get(); - } -}; -template<> struct simplify_type { - typedef Value* SimpleType; - - static SimpleType getSimplifiedValue(const Use &Val) { - return (SimpleType)Val.get(); - } -}; // isa - Provide some specializations of isa so that we don't have to include // the subtype header files to test to see if the value is a subclass... From lattner at cs.uiuc.edu Thu Oct 16 12:47:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 12:47:00 2003 Subject: [llvm-commits] CVS: llvm/tools/Makefile Message-ID: <200310161746.MAA18892@zion.cs.uiuc.edu> Changes in directory llvm/tools: Makefile updated: 1.23 -> 1.24 --- Log message: Welcome llvm-nm to the family --- Diffs of the changes: (+1 -1) Index: llvm/tools/Makefile diff -u llvm/tools/Makefile:1.23 llvm/tools/Makefile:1.24 --- llvm/tools/Makefile:1.23 Tue Sep 16 10:21:52 2003 +++ llvm/tools/Makefile Thu Oct 16 12:46:21 2003 @@ -1,6 +1,6 @@ LEVEL := .. PARALLEL_DIRS := llvm-as llvm-dis opt gccas llc llvm-link lli gccld \ - analyze extract bugpoint llvm-ar + analyze extract bugpoint llvm-nm llvm-ar include $(LEVEL)/Makefile.common From gaeke at cs.uiuc.edu Thu Oct 16 13:04:03 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 13:04:03 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvm-nm.html Message-ID: <200310161803.NAA25219@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvm-nm.html added (r1.1) --- Log message: Add command guide (It's like a man page translated into html, but without the translation...) for the new llvm-nm tool. --- Diffs of the changes: (+116 -0) Index: llvm/docs/CommandGuide/llvm-nm.html diff -c /dev/null llvm/docs/CommandGuide/llvm-nm.html:1.1 *** /dev/null Thu Oct 16 13:03:34 2003 --- llvm/docs/CommandGuide/llvm-nm.html Thu Oct 16 13:03:24 2003 *************** *** 0 **** --- 1,116 ---- + + + LLVM: llvm-nm tool + + + + +

    LLVM: llvm-nm tool

    +
    + +

    NAME

    + llvm-nm + +

    SYNOPSIS

    + llvm-nm [options] [filenames...] + +

    DESCRIPTION

    + +

    The llvm-nm utility lists the names of symbols from the + LLVM bytecode files named on the command line, along with some + ancillary information about each symbol.

    + +

    llvm-nm's default output format is the traditional BSD + nm(1) output format. Each such output record consists of an + (optional) 8-digit hexadecimal address, followed by a type code + character, followed by a name, for each symbol. One record is printed + per line; fields are separated by spaces. When the address is omitted, + it is replaced by 8 spaces.

    + +

    Type code characters currently supported, and their meanings, are + as follows:

    + + + + + + + + + + +
    UNamed object is referenced but undefined in this + bytecode file
    CCommon (multiple defs link together into one + def)
    WWeak reference (multiple defs link together into zero or + one defs)
    tLocal function (text) object
    TGlobal function (text) object
    dLocal data object
    DGlobal data object
    ?Something unrecognizable
    + +

    Because LLVM bytecode files typically contain objects that are not + considered to have addresses until they are linked into an executable + image or dynamically compiled "just-in-time", llvm-nm does + not print an address for any symbol, even symbols which are defined in + the bytecode file.

    + +

    OPTIONS

    + +
      +
    • -P +
      + Use POSIX.2 output format. Alias for --format=posix. +

      +

    • -B (default) +
      + Use BSD output format. Alias for --format=bsd. +

      + +

    • -help +
      + Print a summary of command-line options and their meanings. +

      + +

    • -defined-only +
      + Print only symbols defined in this bytecode file (as opposed + to symbols which may be referenced by objects in this file, + but not defined in this file.) +

      + +

    • -extern-only, -g +
      + Print only symbols whose definitions are external; that is, + accessible from other bytecode files. +

      + +

    • -undefined-only, -u +
      + Print only symbols referenced but not defined in this bytecode + file. +

      + +

    • -format=fmt, -f +
      + Select an output format; fmt may be sysv, posix, or + bsd. The default is bsd. +

      +

    + +

    BUGS

    + + llvm-nm cannot currently see inside ar(1) library + archive files, like nm(1) can. It cannot demangle C++ mangled + names, like GNU nm(1) can. + +

    EXIT STATUS

    + + llvm-nm exits with an exit code of zero. + +

    SEE ALSO

    + + llvm-dis, + ar(1), + nm(1) + +
    + Maintained by the LLVM Team. + + + From gaeke at cs.uiuc.edu Thu Oct 16 13:05:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 13:05:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/index.html Message-ID: <200310161804.NAA26587@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: index.html updated: 1.7 -> 1.8 --- Log message: add llvm-nm entry. --- Diffs of the changes: (+5 -0) Index: llvm/docs/CommandGuide/index.html diff -u llvm/docs/CommandGuide/index.html:1.7 llvm/docs/CommandGuide/index.html:1.8 --- llvm/docs/CommandGuide/index.html:1.7 Tue Oct 7 15:35:55 2003 +++ llvm/docs/CommandGuide/index.html Thu Oct 16 13:04:40 2003 @@ -32,6 +32,11 @@ Disassemble an LLVM bytecode file into human-readable form.

    +

    llvm-dis +
    + Print out the names and types of symbols in an LLVM bytecode file. +

    +

    analyze
    Analyze an LLVM bytecode file. From gaeke at cs.uiuc.edu Thu Oct 16 13:06:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 13:06:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/index.html Message-ID: <200310161805.NAA27453@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: index.html updated: 1.8 -> 1.9 --- Log message: yikes, a copy-and-paste-o --- Diffs of the changes: (+1 -1) Index: llvm/docs/CommandGuide/index.html diff -u llvm/docs/CommandGuide/index.html:1.8 llvm/docs/CommandGuide/index.html:1.9 --- llvm/docs/CommandGuide/index.html:1.8 Thu Oct 16 13:04:40 2003 +++ llvm/docs/CommandGuide/index.html Thu Oct 16 13:05:09 2003 @@ -32,7 +32,7 @@ Disassemble an LLVM bytecode file into human-readable form.

    -

    llvm-dis +
    llvm-nm
    Print out the names and types of symbols in an LLVM bytecode file.

    From lattner at cs.uiuc.edu Thu Oct 16 13:28:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:28:01 2003 Subject: [llvm-commits] CVS: llvm/tools/llvm-nm/llvm-nm.cpp Message-ID: <200310161827.NAA03215@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-nm: llvm-nm.cpp updated: 1.1 -> 1.2 --- Log message: Geeze, what is with Brian and these ifdef's? --- Diffs of the changes: (+0 -2) Index: llvm/tools/llvm-nm/llvm-nm.cpp diff -u llvm/tools/llvm-nm/llvm-nm.cpp:1.1 llvm/tools/llvm-nm/llvm-nm.cpp:1.2 --- llvm/tools/llvm-nm/llvm-nm.cpp:1.1 Wed Oct 15 23:43:15 2003 +++ llvm/tools/llvm-nm/llvm-nm.cpp Thu Oct 16 13:27:24 2003 @@ -54,9 +54,7 @@ char TypeCharForSymbol (GlobalValue &GV) { if (GV.isExternal ()) return 'U'; if (GV.hasLinkOnceLinkage ()) return 'C'; -#ifdef WEAK_LINKAGE_EVENTUALLY_IMPLEMENTED if (GV.hasWeakLinkage ()) return 'W'; -#endif if (isa (GV) && GV.hasInternalLinkage ()) return 't'; if (isa (GV)) return 'T'; if (isa (GV) && GV.hasInternalLinkage ()) return 'd'; From lattner at cs.uiuc.edu Thu Oct 16 13:28:13 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:28:13 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/GlobalValue.h Message-ID: <200310161827.NAA03204@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: GlobalValue.h updated: 1.10 -> 1.11 --- Log message: Add weak linking type --- Diffs of the changes: (+2 -0) Index: llvm/include/llvm/GlobalValue.h diff -u llvm/include/llvm/GlobalValue.h:1.10 llvm/include/llvm/GlobalValue.h:1.11 --- llvm/include/llvm/GlobalValue.h:1.10 Tue Sep 30 13:37:37 2003 +++ llvm/include/llvm/GlobalValue.h Thu Oct 16 13:27:04 2003 @@ -20,6 +20,7 @@ enum LinkageTypes { ExternalLinkage, // Externally visible function LinkOnceLinkage, // Keep one copy of named function when linking (inline) + WeakLinkage, // Keep one copy of named function when linking (weak) AppendingLinkage, // Special purpose, only applies to global arrays InternalLinkage // Rename collisions when linking (static functions) }; @@ -40,6 +41,7 @@ bool hasExternalLinkage() const { return Linkage == ExternalLinkage; } bool hasLinkOnceLinkage() const { return Linkage == LinkOnceLinkage; } + bool hasWeakLinkage() const { return Linkage == WeakLinkage; } bool hasAppendingLinkage() const { return Linkage == AppendingLinkage; } bool hasInternalLinkage() const { return Linkage == InternalLinkage; } void setLinkage(LinkageTypes LT) { Linkage = LT; } From lattner at cs.uiuc.edu Thu Oct 16 13:29:03 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:29:03 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp Message-ID: <200310161829.NAA03311@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Writer: Writer.cpp updated: 1.39 -> 1.40 --- Log message: Add support for 'weak' linkage. For now, we translate linkonce into weak linkage in the bytecode format because we don't have enough bits to represent it. We will rev the bytecode version soon anyways, so this will be fixed in the near future. --- Diffs of the changes: (+13 -2) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.39 llvm/lib/Bytecode/Writer/Writer.cpp:1.40 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.39 Sun Oct 12 22:32:07 2003 +++ llvm/lib/Bytecode/Writer/Writer.cpp Thu Oct 16 13:28:50 2003 @@ -158,6 +158,17 @@ } } +static unsigned getEncodedLinkage(const GlobalValue *GV) { + switch (GV->getLinkage()) { + default: assert(0 && "Invalid linkage!"); + case GlobalValue::ExternalLinkage: return 0; + case GlobalValue::LinkOnceLinkage: return 1; + case GlobalValue::WeakLinkage: return 1; + case GlobalValue::AppendingLinkage: return 2; + case GlobalValue::InternalLinkage: return 3; + } +} + void BytecodeWriter::outputModuleInfoBlock(const Module *M) { BytecodeBlock ModuleInfoBlock(BytecodeFormat::ModuleGlobalInfo, Out); @@ -168,7 +179,7 @@ // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2,3=Linkage, // bit4+ = Slot # for type - unsigned oSlot = ((unsigned)Slot << 4) | ((unsigned)I->getLinkage() << 2) | + unsigned oSlot = ((unsigned)Slot << 4) | (getEncodedLinkage(I) << 2) | (I->hasInitializer() << 1) | I->isConstant(); output_vbr(oSlot, Out); @@ -195,7 +206,7 @@ void BytecodeWriter::outputFunction(const Function *F) { BytecodeBlock FunctionBlock(BytecodeFormat::Function, Out); - output_vbr((unsigned)F->getLinkage(), Out); + output_vbr(getEncodedLinkage(F), Out); // Only output the constant pool and other goodies if needed... if (!F->isExternal()) { From lattner at cs.uiuc.edu Thu Oct 16 13:31:13 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:31:13 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Message-ID: <200310161829.NAA03348@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: AsmWriter.cpp updated: 1.99 -> 1.100 --- Log message: Add support for 'weak' linkage. --- Diffs of the changes: (+6 -4) Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.99 llvm/lib/VMCore/AsmWriter.cpp:1.100 --- llvm/lib/VMCore/AsmWriter.cpp:1.99 Fri Oct 10 12:54:14 2003 +++ llvm/lib/VMCore/AsmWriter.cpp Thu Oct 16 13:29:00 2003 @@ -584,8 +584,9 @@ Out << "external "; else switch (GV->getLinkage()) { - case GlobalValue::InternalLinkage: Out << "internal "; break; - case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::InternalLinkage: Out << "internal "; break; + case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::WeakLinkage: Out << "weak "; break; case GlobalValue::AppendingLinkage: Out << "appending "; break; case GlobalValue::ExternalLinkage: break; } @@ -652,8 +653,9 @@ Out << "declare "; else switch (F->getLinkage()) { - case GlobalValue::InternalLinkage: Out << "internal "; break; - case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::InternalLinkage: Out << "internal "; break; + case GlobalValue::LinkOnceLinkage: Out << "linkonce "; break; + case GlobalValue::WeakLinkage: Out << "weak "; break; case GlobalValue::AppendingLinkage: Out << "appending "; break; case GlobalValue::ExternalLinkage: break; } From lattner at cs.uiuc.edu Thu Oct 16 13:31:25 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:31:25 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/Linker.cpp Message-ID: <200310161829.NAA03341@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: Linker.cpp updated: 1.55 -> 1.56 --- Log message: Add support for 'weak' linkage. --- Diffs of the changes: (+32 -5) Index: llvm/lib/Transforms/Utils/Linker.cpp diff -u llvm/lib/Transforms/Utils/Linker.cpp:1.55 llvm/lib/Transforms/Utils/Linker.cpp:1.56 --- llvm/lib/Transforms/Utils/Linker.cpp:1.55 Fri Oct 10 12:51:20 2003 +++ llvm/lib/Transforms/Utils/Linker.cpp Thu Oct 16 13:28:58 2003 @@ -433,6 +433,24 @@ } else if (DGV->isExternal()) { // If DGV is external but SGV is not... ValueMap.insert(std::make_pair(SGV, DGV)); DGV->setLinkage(SGV->getLinkage()); // Inherit linkage! + } else if (SGV->hasWeakLinkage()) { + // At this point we know that DGV has LinkOnce, Appending, Weak, or + // External linkage. If DGV is Appending, this is an error. + if (DGV->hasAppendingLinkage()) + return Error(Err, "Linking globals named '" + SGV->getName() + + " ' with 'weak' and 'appending' linkage is not allowed!"); + // Otherwise, just perform the link. + ValueMap.insert(std::make_pair(SGV, DGV)); + } else if (DGV->hasWeakLinkage()) { + // At this point we know that SGV has LinkOnce, Appending, or External + // linkage. If SGV is Appending, this is an error. + if (SGV->hasAppendingLinkage()) + return Error(Err, "Linking globals named '" + SGV->getName() + + " ' with 'weak' and 'appending' linkage is not allowed!"); + if (!SGV->hasLinkOnceLinkage()) + DGV->setLinkage(SGV->getLinkage()); // Inherit linkage! + ValueMap.insert(std::make_pair(SGV, DGV)); + } else if (SGV->getLinkage() != DGV->getLinkage()) { return Error(Err, "Global variables named '" + SGV->getName() + "' have different linkage specifiers!"); @@ -505,7 +523,7 @@ return Error(Err, "Global Variable Collision on '" + SGV->getType()->getDescription() +"':%"+SGV->getName()+ " - Global variables have different initializers"); - } else if (DGV->hasLinkOnceLinkage()) { + } else if (DGV->hasLinkOnceLinkage() || DGV->hasWeakLinkage()) { // Nothing is required, mapped values will take the new global // automatically. } else if (DGV->hasAppendingLinkage()) { @@ -574,6 +592,16 @@ ValueMap.insert(std::make_pair(SF, DF)); DF->setLinkage(SF->getLinkage()); + } else if (SF->hasWeakLinkage()) { + // At this point we know that DF has LinkOnce, Weak, or External linkage. + ValueMap.insert(std::make_pair(SF, DF)); + + } else if (DF->hasWeakLinkage()) { + // At this point we know that SF has LinkOnce or External linkage. + ValueMap.insert(std::make_pair(SF, DF)); + if (!SF->hasLinkOnceLinkage()) // Don't inherit linkonce linkage + DF->setLinkage(SF->getLinkage()); + } else if (SF->getLinkage() != DF->getLinkage()) { return Error(Err, "Functions named '" + SF->getName() + "' have different linkage specifiers!"); @@ -667,10 +695,9 @@ // DF not external SF external? if (!DF->isExternal()) { if (DF->hasLinkOnceLinkage()) continue; // No relinkage for link-once! - if (Err) - *Err = "Function '" + (SF->hasName() ? SF->getName() :std::string("")) - + "' body multiply defined!"; - return true; + if (SF->hasWeakLinkage()) continue; + return Error(Err, "Function '" + SF->getName() + + "' body multiply defined!"); } if (LinkFunctionBody(DF, SF, ValueMap, Err)) return true; From lattner at cs.uiuc.edu Thu Oct 16 13:31:36 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:31:36 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/Printer.cpp Message-ID: <200310161829.NAA03334@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: Printer.cpp updated: 1.62 -> 1.63 --- Log message: Add support for 'weak' linkage. --- Diffs of the changes: (+3 -1) Index: llvm/lib/Target/X86/Printer.cpp diff -u llvm/lib/Target/X86/Printer.cpp:1.62 llvm/lib/Target/X86/Printer.cpp:1.63 --- llvm/lib/Target/X86/Printer.cpp:1.62 Mon Oct 6 10:41:21 2003 +++ llvm/lib/Target/X86/Printer.cpp Thu Oct 16 13:28:56 2003 @@ -948,7 +948,8 @@ unsigned Align = TD.getTypeAlignment(C->getType()); if (C->isNullValue() && - (I->hasLinkOnceLinkage() || I->hasInternalLinkage())) { + (I->hasLinkOnceLinkage() || I->hasInternalLinkage() || + I->hasWeakLinkage() /* FIXME: Verify correct */)) { SwitchSection(O, CurSection, ".data"); if (I->hasInternalLinkage()) O << "\t.local " << name << "\n"; @@ -961,6 +962,7 @@ } else { switch (I->getLinkage()) { case GlobalValue::LinkOnceLinkage: + case GlobalValue::WeakLinkage: // FIXME: Verify correct for weak. // Nonnull linkonce -> weak O << "\t.weak " << name << "\n"; SwitchSection(O, CurSection, ""); From lattner at cs.uiuc.edu Thu Oct 16 13:31:47 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:31:47 2003 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200310161829.NAA03325@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.130 -> 1.131 --- Log message: Add support for 'weak' linkage. --- Diffs of the changes: (+1 -1) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.130 llvm/lib/AsmParser/llvmAsmParser.y:1.131 --- llvm/lib/AsmParser/llvmAsmParser.y:1.130 Wed Oct 15 11:46:48 2003 +++ llvm/lib/AsmParser/llvmAsmParser.y Thu Oct 16 13:27:55 2003 @@ -763,7 +763,7 @@ OptLinkage : INTERNAL { $$ = GlobalValue::InternalLinkage; } | LINKONCE { $$ = GlobalValue::LinkOnceLinkage; } | - WEAK { $$ = GlobalValue::LinkOnceLinkage; /* FIXME */ } | + WEAK { $$ = GlobalValue::WeakLinkage; } | APPENDING { $$ = GlobalValue::AppendingLinkage; } | /*empty*/ { $$ = GlobalValue::ExternalLinkage; }; From lattner at cs.uiuc.edu Thu Oct 16 13:31:58 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:31:58 2003 Subject: [llvm-commits] CVS: llvm/lib/CWriter/Writer.cpp Message-ID: <200310161829.NAA03320@zion.cs.uiuc.edu> Changes in directory llvm/lib/CWriter: Writer.cpp updated: 1.133 -> 1.134 --- Log message: Add support for 'weak' linkage. --- Diffs of the changes: (+4 -0) Index: llvm/lib/CWriter/Writer.cpp diff -u llvm/lib/CWriter/Writer.cpp:1.133 llvm/lib/CWriter/Writer.cpp:1.134 --- llvm/lib/CWriter/Writer.cpp:1.133 Wed Oct 15 11:48:26 2003 +++ llvm/lib/CWriter/Writer.cpp Thu Oct 16 13:28:54 2003 @@ -684,6 +684,8 @@ printType(Out, I->getType()->getElementType(), Mang->getValueName(I)); if (I->hasLinkOnceLinkage()) Out << " __attribute__((common))"; + else if (I->hasWeakLinkage()) + Out << " __attribute__((weak))"; if (!I->getInitializer()->isNullValue()) { Out << " = " ; writeOperand(I->getInitializer()); @@ -893,6 +895,8 @@ FunctionInnards << ")"; // Print out the return type and the entire signature for that matter printType(Out, F->getReturnType(), FunctionInnards.str()); + + if (F->hasWeakLinkage()) Out << " __attribute((weak))"; } void CWriter::printFunction(Function *F) { From lattner at cs.uiuc.edu Thu Oct 16 13:32:10 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:32:10 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200310161829.NAA03363@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.82 -> 1.83 --- Log message: Add support for 'weak' linkage. For now, we translate linkonce into weak linkage in the bytecode format because we don't have enough bits to represent it. We will rev the bytecode version soon anyways, so this will be fixed in the near future. --- Diffs of the changes: (+12 -2) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.82 llvm/lib/Bytecode/Reader/Reader.cpp:1.83 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.82 Mon Oct 13 09:57:53 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Thu Oct 16 13:28:47 2003 @@ -318,7 +318,12 @@ throw std::string("ParseFunction: Error reading from buffer."); if (LinkageType & ~0x3) throw std::string("Invalid linkage type for Function."); - Linkage = (GlobalValue::LinkageTypes)LinkageType; + switch (LinkageType) { + case 0: Linkage = GlobalValue::ExternalLinkage; break; + case 1: Linkage = GlobalValue::WeakLinkage; break; + case 2: Linkage = GlobalValue::AppendingLinkage; break; + case 3: Linkage = GlobalValue::InternalLinkage; break; + } } else { // We used to only support two linkage models: internal and external unsigned isInternal; @@ -436,7 +441,12 @@ // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, // bit2,3 = Linkage, bit4+ = slot# SlotNo = VarType >> 4; - Linkage = (GlobalValue::LinkageTypes)((VarType >> 2) & 3); + switch ((VarType >> 2) & 3) { + case 0: Linkage = GlobalValue::ExternalLinkage; break; + case 1: Linkage = GlobalValue::WeakLinkage; break; + case 2: Linkage = GlobalValue::AppendingLinkage; break; + case 3: Linkage = GlobalValue::InternalLinkage; break; + } } else { // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, // bit2 = isInternal, bit3+ = slot# From lattner at cs.uiuc.edu Thu Oct 16 13:46:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 13:46:01 2003 Subject: [llvm-commits] CVS: llvm/tools/llvm-nm/llvm-nm.cpp Message-ID: <200310161845.NAA05689@zion.cs.uiuc.edu> Changes in directory llvm/tools/llvm-nm: llvm-nm.cpp updated: 1.2 -> 1.3 --- Log message: Make llvm-nm work in "pipe mode" --- Diffs of the changes: (+7 -3) Index: llvm/tools/llvm-nm/llvm-nm.cpp diff -u llvm/tools/llvm-nm/llvm-nm.cpp:1.2 llvm/tools/llvm-nm/llvm-nm.cpp:1.3 --- llvm/tools/llvm-nm/llvm-nm.cpp:1.2 Thu Oct 16 13:27:24 2003 +++ llvm/tools/llvm-nm/llvm-nm.cpp Thu Oct 16 13:45:23 2003 @@ -28,7 +28,7 @@ cl::list InputFilenames(cl::Positional, cl::desc(""), - cl::OneOrMore); + cl::ZeroOrMore); cl::opt UndefinedOnly("undefined-only", cl::desc("Show only undefined symbols")); @@ -116,8 +116,12 @@ ToolName = argv[0]; if (BSDFormat) OutputFormat = bsd; if (POSIXFormat) OutputFormat = posix; - if (InputFilenames.size () != 1) - MultipleFiles = true; + + switch (InputFilenames.size()) { + case 0: InputFilenames.push_back("-"); + case 1: break; + default: MultipleFiles = true; + } std::for_each (InputFilenames.begin (), InputFilenames.end (), DumpSymbolNamesFromFile); From criswell at cs.uiuc.edu Thu Oct 16 14:55:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 14:55:01 2003 Subject: [llvm-commits] CVS: llvm/docs/Projects.html Message-ID: <200310161954.OAA25085@choi.cs.uiuc.edu> Changes in directory llvm/docs: Projects.html updated: 1.2 -> 1.3 --- Log message: Added a section on all of the wonderful Makefile variables used to locate LLVM. Added information on how to use the autoconf code to specify LLVM's location and setup separate source and object trees. Fixed some of the wording to be more accurate, especially regarding the building of libraries. Added information on where built files are placed. Added a link to the llvmdev mailing list so that they can ask us questions. --- Diffs of the changes: (+162 -30) Index: llvm/docs/Projects.html diff -u llvm/docs/Projects.html:1.2 llvm/docs/Projects.html:1.3 --- llvm/docs/Projects.html:1.2 Wed Oct 15 11:52:57 2003 +++ llvm/docs/Projects.html Thu Oct 16 14:53:53 2003 @@ -12,45 +12,142 @@

    Overview

    - In order to set up a new project that uses the LLVM build system, - libraries, and header files, follow these steps: + The LLVM build system is designed to facilitate the building of third party + projects that use LLVM header files, libraries, and tools. In order to use + these facilities, a Makefile from a project must do the following things: + +
      +
    1. Set environment variables. +

      + There are several environment variables that a Makefile needs to set to + use the LLVM build system: +

      +
      LLVM_SRC_ROOT +
      + The root of the LLVM source tree. +

      + +

      LLVM_OBJ_ROOT +
      + The root of the LLVM object tree. +

      + +

      BUILD_SRC_ROOT +
      + The root of the project's source tree. +

      + +

      BUILD_OBJ_ROOT +
      + The root of the project's object tree. +

      + +

      BUILD_SRC_DIR +
      + The directory containing the current source to be compiled. +

      + +

      BUILD_OBJ_DIR +
      + The directory where the current source will place the new object + files. This should always be the current directory. +

      + +

      LEVEL +
      + The relative path from the current directory to the root of the + object tree. +

      +

      + +
    2. Include the LLVM Makefile.config from $(LLVM_OBJ_ROOT). +

      + +

    3. Include the LLVM Makefile.rules from $(LLVM_SRC_ROOT). +
    + + There are two ways that you can set all of these variables: +
      +
    1. + You can write your own Makefiles which hard-code these values. + +
    2. + You can use the pre-made LLVM sample project. This sample project + includes Makefiles, a configure script that can be used to configure + the location of LLVM, and the ability to support multiple object + directories from a single source directory. +
    + + This document assumes that you will base your project off of the LLVM + sample project found in llvm/projects/sample. If you want to + devise your own build system, studying the sample project and LLVM + Makefiles will probably provide enough information on how to write your own + Makefiles. +

    + + +

    Create a Project from the Sample Project

    + + + Follow these simple steps to start your project:
    1. Copy the llvm/projects/sample directory to any place - of your choosing. You can place it anywhere you like, although - someplace underneath your home directory would work best. + of your choosing. You can place it anywhere you like. Rename the + directory to match the name of your project. +

      + +

    2. + Add your source code and Makefiles to your source tree.

    3. - Edit the Makefile.config and Makefile.common - files so that the LLVM_SRC_ROOT variable equals the absolute - pathname of the LLVM source tree and LLVM_OBJ_ROOT equals the - pathname of where LLVM was built. + If you want your Makefiles to be configured by the + configure script, or if you want to support multiple + object directories, add your Makefiles to the configure + script by adding them into the autoconf/configure.ac file. + The macro AC_CONFIG_MAKEFILE will copy a file, unmodified, + from the source directory to the object directory.

      + After updating autoconf/configure.ac, regenerate the + configure script with these commands: +

      + + cd autoconf
      + autoconf -o ../configure +
      - For example, if the LLVM source tree is in - /usr/home/joe/src/llvm, and you built LLVM in - /tmp/llvmobj, then - LLVM_SRC_ROOT=/usr/home/joe/src/llvm and - LLVM_OBJ_ROOT=/tmp/llvmobj.

      -

    4. - Add your source code to your source tree. + You must be using Autoconf version 2.57 or higher.

    5. - Modify the various Makefiles to contain the names of the - objects that you want to build. + Run configure in the directory in which you want to place + object code. Use the following options to tell your project where it + can find LLVM: + +
      +
      --with-llvmsrc=<directory> +
      + Tell your project where the LLVM source tree is located. +

      +

      --with-llvmobj=<directory> +
      + Tell your project where the LLVM object tree is located. +
    + That's it! Now all you have to do is type gmake in the root of + your object directory, and your project should build. +

    Source Tree Layout

    - In order to use the LLVM build system, you will want to lay out your + In order to use the LLVM build system, you will want to organize your source code so that it can benefit from the build system's features. Mainly, you want your source tree layout to look similar to the LLVM source tree layout. The best way to do this is to just copy the @@ -70,8 +167,8 @@

    Libraries can be object files, archives, or dynamic libraries. - The lib directory is just a good place for these as it - places them all in a directory from which they can be linked + The lib directory is just a convenient place for libraries + as it places them all in a directory from which they can be linked later.

    include @@ -97,10 +194,12 @@ followed by your tools directory. -

    Makefile Variables

    +

    Writing LLVM Style Makefiles

    - The LLVM build system provides several variables which you may - use. + The LLVM build system provides a convenient way to build libraries and + executables. Most of your project Makefiles will only need to define a few + variables. Below is a list of the variables one can set and what they can + do:

    Required Variables

    @@ -148,15 +247,14 @@
    BUILD_ARCHIVE
    By default, a library is a .o file that is linked - directly into a program. However, if you set the BUILD_ARCHIVE - variable, an archive library (sometimes known as a static - library) will be built instead. + directly into a program. To build an archive (also known as + a static library), set the BUILD_ARCHIVE variable.

    SHARED_LIBRARY
    - If SHARED_LIBRARY is defined in your Makefile, then the - Makefiles will generate a shared (or dynamic) library. + If SHARED_LIBRARY is defined in your Makefile, a shared + (or dynamic) library will be built.

    Variables for Building Programs

    @@ -184,7 +282,7 @@
    ExtraSource
    This variable contains a space separated list of extra source - files that needs to be built. It is useful for including the + files that need to be built. It is useful for including the output of Lex and Yacc programs.

    @@ -196,11 +294,45 @@ that tell the compiler the location of additional directories to search for header files.

    - It is highly suggested that you append to these variable as + It is highly suggested that you append to CFLAGS and CPPFLAGS as opposed to overwriting them. The master Makefiles may already have useful options in them that you may not want to overwrite.

    + +

    Placement of Object Code

    + + + The final location of built libraries and executables will depend upon + whether you do a Debug, Release, or Profile build. + +
    +
    Libraries +
    + All libraries (static and dynamic) will be stored in + BUILD_OBJ_ROOT/lib/<type>, where type is Debug, + Release, or Profile for a debug, optimized, or + profiled build, respectively. +

    + +

    Executables +
    + All executables will be stored in BUILD_OBJ_ROOT/lib/<type>, + where type is Debug, Release, or Profile for + a debug, optimized, or profiled build, respectively. +
    + + +

    Further Help

    + + + If you have any questions or need any help creating an LLVM project, + the LLVM team would be more than happy to help. You can always post your + questions to the LLVM Developers Mailing List (llvmdev at cs.uiuc.edu). + +
    +Written by the LLVM Team. From lattner at cs.uiuc.edu Thu Oct 16 14:59:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 14:59:01 2003 Subject: [llvm-commits] CVS: llvm/docs/Projects.html Message-ID: <200310161958.OAA03125@zion.cs.uiuc.edu> Changes in directory llvm/docs: Projects.html updated: 1.3 -> 1.4 --- Log message: Give credit where credit is due --- Diffs of the changes: (+1 -1) Index: llvm/docs/Projects.html diff -u llvm/docs/Projects.html:1.3 llvm/docs/Projects.html:1.4 --- llvm/docs/Projects.html:1.3 Thu Oct 16 14:53:53 2003 +++ llvm/docs/Projects.html Thu Oct 16 14:58:17 2003 @@ -333,6 +333,6 @@ href="mailto:llvmdev.cs.uiuc.edu">llvmdev at cs.uiuc.edu).
    -Written by the LLVM Team. +Written by the John Criswell. From criswell at cs.uiuc.edu Thu Oct 16 15:02:00 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 15:02:00 2003 Subject: [llvm-commits] CVS: llvm/docs/Projects.html Message-ID: <200310162001.PAA25152@choi.cs.uiuc.edu> Changes in directory llvm/docs: Projects.html updated: 1.4 -> 1.5 --- Log message: I am not the only John Criswell. :) --- Diffs of the changes: (+1 -1) Index: llvm/docs/Projects.html diff -u llvm/docs/Projects.html:1.4 llvm/docs/Projects.html:1.5 --- llvm/docs/Projects.html:1.4 Thu Oct 16 14:58:17 2003 +++ llvm/docs/Projects.html Thu Oct 16 15:01:04 2003 @@ -333,6 +333,6 @@ href="mailto:llvmdev.cs.uiuc.edu">llvmdev at cs.uiuc.edu).
    -Written by the John Criswell. +Written by John Criswell. From criswell at cs.uiuc.edu Thu Oct 16 15:06:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 15:06:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/gccas.html Message-ID: <200310162005.PAA25188@choi.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: gccas.html updated: 1.5 -> 1.6 --- Log message: Added documentation on the new -disable-inlining option. --- Diffs of the changes: (+5 -0) Index: llvm/docs/CommandGuide/gccas.html diff -u llvm/docs/CommandGuide/gccas.html:1.5 llvm/docs/CommandGuide/gccas.html:1.6 --- llvm/docs/CommandGuide/gccas.html:1.5 Tue Oct 7 15:12:03 2003 +++ llvm/docs/CommandGuide/gccas.html Thu Oct 16 15:05:48 2003 @@ -39,6 +39,11 @@ Specify the output filename which will hold the assembled bytecode.

    +

  • -disable-inlining +
    + Disable the inlining pass. By default, it is enabled. +

    +

  • -stats
    Print statistics. From lattner at cs.uiuc.edu Thu Oct 16 15:13:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Thu Oct 16 15:13:01 2003 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/llvmAsmParser.y Message-ID: <200310162012.PAA03707@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: llvmAsmParser.y updated: 1.131 -> 1.132 --- Log message: Minor cleanups --- Diffs of the changes: (+28 -30) Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.131 llvm/lib/AsmParser/llvmAsmParser.y:1.132 --- llvm/lib/AsmParser/llvmAsmParser.y:1.131 Thu Oct 16 13:27:55 2003 +++ llvm/lib/AsmParser/llvmAsmParser.y Thu Oct 16 15:12:13 2003 @@ -137,8 +137,6 @@ isDeclare = false; } - inline ~PerFunctionInfo() {} - inline void FunctionStart(Function *M) { CurrentFunction = M; } @@ -172,9 +170,9 @@ CurrentFunction = 0; isDeclare = false; } -} CurMeth; // Info for the current function... +} CurFun; // Info for the current function... -static bool inFunctionScope() { return CurMeth.CurrentFunction != 0; } +static bool inFunctionScope() { return CurFun.CurrentFunction != 0; } //===----------------------------------------------------------------------===// @@ -182,7 +180,7 @@ //===----------------------------------------------------------------------===// static int InsertValue(Value *D, - std::vector &ValueTab = CurMeth.Values) { + std::vector &ValueTab = CurFun.Values) { if (D->hasName()) return -1; // Is this a numbered definition? // Yes, insert the value into the value table... @@ -211,8 +209,8 @@ Num -= CurModule.Types.size(); // Check that the number is within bounds... - if (Num <= CurMeth.Types.size()) - return CurMeth.Types[Num]; + if (Num <= CurFun.Types.size()) + return CurFun.Types[Num]; break; } case ValID::NameVal: { // Is it a named definition? @@ -220,7 +218,7 @@ SymbolTable *SymTab = 0; Value *N = 0; if (inFunctionScope()) { - SymTab = &CurMeth.CurrentFunction->getSymbolTable(); + SymTab = &CurFun.CurrentFunction->getSymbolTable(); N = SymTab->lookup(Type::TypeTy, Name); } @@ -247,7 +245,7 @@ if (DoNotImprovise) return 0; // Do we just want a null to be returned? std::map &LateResolver = inFunctionScope() ? - CurMeth.LateResolveTypes : CurModule.LateResolveTypes; + CurFun.LateResolveTypes : CurModule.LateResolveTypes; std::map::iterator I = LateResolver.find(D); if (I != LateResolver.end()) { @@ -261,7 +259,7 @@ static Value *lookupInSymbolTable(const Type *Ty, const std::string &Name) { SymbolTable &SymTab = - inFunctionScope() ? CurMeth.CurrentFunction->getSymbolTable() : + inFunctionScope() ? CurFun.CurrentFunction->getSymbolTable() : CurModule.CurrentModule->getSymbolTable(); return SymTab.lookup(Ty, Name); } @@ -289,12 +287,12 @@ } // Make sure that our type is within bounds - if (CurMeth.Values.size() <= type) return 0; + if (CurFun.Values.size() <= type) return 0; // Check that the number is within bounds... - if (CurMeth.Values[type].size() <= Num) return 0; + if (CurFun.Values[type].size() <= Num) return 0; - return CurMeth.Values[type][Num]; + return CurFun.Values[type][Num]; } case ValID::NameVal: { // Is it a named definition? @@ -376,7 +374,7 @@ assert(d != 0 && "How did we not make something?"); if (inFunctionScope()) - InsertValue(d, CurMeth.LateResolveValues); + InsertValue(d, CurFun.LateResolveValues); else InsertValue(d, CurModule.LateResolveValues); return d; @@ -391,7 +389,7 @@ // values not defined yet... for example, a forward branch, or the PHI node for // a loop body. // -// This keeps a table (CurMeth.LateResolveValues) of all such forward references +// This keeps a table (CurFun.LateResolveValues) of all such forward references // and back patchs after we are done. // @@ -441,14 +439,14 @@ // static void ResolveTypeTo(char *Name, const Type *ToTy) { std::vector &Types = inFunctionScope() ? - CurMeth.Types : CurModule.Types; + CurFun.Types : CurModule.Types; ValID D; if (Name) D = ValID::create(Name); else D = ValID::create((int)Types.size()); std::map &LateResolver = inFunctionScope() ? - CurMeth.LateResolveTypes : CurModule.LateResolveTypes; + CurFun.LateResolveTypes : CurModule.LateResolveTypes; std::map::iterator I = LateResolver.find(D); if (I != LateResolver.end()) { @@ -491,7 +489,7 @@ "' to a null valued instruction!"); SymbolTable &ST = inFunctionScope() ? - CurMeth.CurrentFunction->getSymbolTable() : + CurFun.CurrentFunction->getSymbolTable() : CurModule.CurrentModule->getSymbolTable(); Value *Existing = ST.lookup(V->getType(), Name); @@ -986,12 +984,12 @@ // which throws things all off. To get around this, we just tell // getValNonImprovising that we are at global scope here. // - Function *SavedCurFn = CurMeth.CurrentFunction; - CurMeth.CurrentFunction = 0; + Function *SavedCurFn = CurFun.CurrentFunction; + CurFun.CurrentFunction = 0; Value *V = getValNonImprovising(Ty, $2); - CurMeth.CurrentFunction = SavedCurFn; + CurFun.CurrentFunction = SavedCurFn; // If this is an initializer for a constant pointer, which is referencing a // (currently) undefined variable, create a stub now that shall be replaced @@ -1133,7 +1131,7 @@ $$ = $1; assert($2->getParent() == 0 && "Function already in module!"); $1->getFunctionList().push_back($2); - CurMeth.FunctionDone(); + CurFun.FunctionDone(); } | FunctionList FunctionProto { $$ = $1; @@ -1169,7 +1167,7 @@ // If this is not a redefinition of a type... if (!$2) { InsertType($4->get(), - inFunctionScope() ? CurMeth.Types : CurModule.Types); + inFunctionScope() ? CurFun.Types : CurModule.Types); } } @@ -1301,7 +1299,7 @@ if ((Fn = CurModule.CurrentModule->getFunction(FunctionName, FT))) { // Yes it is. If this is the case, either we need to be a forward decl, // or it needs to be. - if (!CurMeth.isDeclare && !Fn->isExternal()) + if (!CurFun.isDeclare && !Fn->isExternal()) ThrowException("Redefinition of function '" + FunctionName + "'!"); // If we found a preexisting function prototype, remove it from the @@ -1321,7 +1319,7 @@ } free($2); // Free strdup'd memory! - CurMeth.FunctionStart(Fn); + CurFun.FunctionStart(Fn); // Add all of the arguments we parsed to the function... if ($4) { // Is null if empty... @@ -1349,14 +1347,14 @@ BEGIN : BEGINTOK | '{'; // Allow BEGIN or '{' to start a function FunctionHeader : OptLinkage FunctionHeaderH BEGIN { - $$ = CurMeth.CurrentFunction; + $$ = CurFun.CurrentFunction; // Make sure that we keep track of the linkage type even if there was a // previous "declare". $$->setLinkage($1); // Resolve circular types before we parse the body of the function. - ResolveTypes(CurMeth.LateResolveTypes); + ResolveTypes(CurFun.LateResolveTypes); }; END : ENDTOK | '}'; // Allow end of '}' to end a function @@ -1365,11 +1363,11 @@ $$ = $1; }; -FunctionProto : DECLARE { CurMeth.isDeclare = true; } FunctionHeaderH { - $$ = CurMeth.CurrentFunction; +FunctionProto : DECLARE { CurFun.isDeclare = true; } FunctionHeaderH { + $$ = CurFun.CurrentFunction; assert($$->getParent() == 0 && "Function already in module!"); CurModule.CurrentModule->getFunctionList().push_back($$); - CurMeth.FunctionDone(); + CurFun.FunctionDone(); }; //===----------------------------------------------------------------------===// From criswell at cs.uiuc.edu Thu Oct 16 15:16:04 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 15:16:04 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/bugpoint.html Message-ID: <200310162015.PAA25297@choi.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: bugpoint.html updated: 1.5 -> 1.6 --- Log message: Removed the -mode option. Fixed some grammar, spelling, and punctuation. --- Diffs of the changes: (+4 -12) Index: llvm/docs/CommandGuide/bugpoint.html diff -u llvm/docs/CommandGuide/bugpoint.html:1.5 llvm/docs/CommandGuide/bugpoint.html:1.6 --- llvm/docs/CommandGuide/bugpoint.html:1.5 Thu Oct 16 13:14:43 2003 +++ llvm/docs/CommandGuide/bugpoint.html Thu Oct 16 15:15:17 2003 @@ -24,8 +24,7 @@ LLVM module which is not verifiable, bugpoint enters "crash debugging mode". Otherwise, bugpoint tries to run the resultant program with a code generator. If the code generated program does not match the reference output, -it enters "miscompilation debugging mode". If the -mode option is -specified, bugpoint enters "code generator debugging mode". +it enters "miscompilation debugging mode".

    Crash debugging mode

    @@ -56,7 +55,7 @@
  • -disable-(adce,dce,final-cleanup,simplifycfg)
    bugpoint uses several passes internally for cleanup routines to - reduce the size of the program. If you're trying to find a bug in out + reduce the size of the program. If you're trying to find a bug in one of these passes, bugpoint may crash. These options tell bugpoint not use the specified passes.

    @@ -81,13 +80,6 @@ opt -load <plugin.so> -help

    -

  • -mode=(compile|codegen) -
    - Specify whether bugpoint should operate in compilation - debugging mode (detecting miscompilations and optimizer crashes), or in - code generator debugging mode. -

    -

  • -output <filename>
    Specify a reference output for the <stdout> file stream. @@ -96,7 +88,7 @@
  • -run-(lli|jit|llc|cbe)
    Specify which code generator bugpoint should use to run the - program with. + program.

    @@ -107,7 +99,7 @@ Otherwise, if an error occurs, it will exit with a non-zero value.

    SEE ALSO

    -opt +opt, analyze
    From criswell at cs.uiuc.edu Thu Oct 16 15:39:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Thu Oct 16 15:39:01 2003 Subject: [llvm-commits] CVS: llvm/utils/TableGen/Makefile Message-ID: <200310162038.PAA02480@choi.cs.uiuc.edu> Changes in directory llvm/utils/TableGen: Makefile updated: 1.8 -> 1.9 --- Log message: Removed the .PRECIOUS of Lex and Yacc output files. They are already marked precious in llvm/Makefile.rules, and removing this line seems to fix the Makefile so that the Yacc output is placed into the object tree and not the source tree. --- Diffs of the changes: (+0 -2) Index: llvm/utils/TableGen/Makefile diff -u llvm/utils/TableGen/Makefile:1.8 llvm/utils/TableGen/Makefile:1.9 --- llvm/utils/TableGen/Makefile:1.8 Sun Oct 5 14:27:59 2003 +++ llvm/utils/TableGen/Makefile Thu Oct 16 15:38:16 2003 @@ -2,8 +2,6 @@ TOOLNAME = tblgen USEDLIBS = support.a -.PRECIOUS: FileLexer.cpp FileParser.cpp - include $(LEVEL)/Makefile.common # From brukman at cs.uiuc.edu Thu Oct 16 15:42:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 15:42:01 2003 Subject: [llvm-commits] CVS: CVSROOT/loginfo Message-ID: <200310162041.PAA06210@zion.cs.uiuc.edu> Changes in directory CVSROOT: loginfo updated: 1.2 -> 1.3 --- Log message: Send commits regarding reoptimizer to the CVS list. --- Diffs of the changes: (+1 -0) Index: CVSROOT/loginfo diff -u CVSROOT/loginfo:1.2 CVSROOT/loginfo:1.3 --- CVSROOT/loginfo:1.2 Wed Oct 8 14:36:49 2003 +++ CVSROOT/loginfo Thu Oct 16 15:41:10 2003 @@ -27,4 +27,5 @@ # Automatically update the webpages ^llvm-www (/home/vadve/shared/InternalCVS/CVSROOT/update-www.sh &); /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu +^reopt /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu ^CVSROOT /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu From brukman at cs.uiuc.edu Thu Oct 16 15:43:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 15:43:01 2003 Subject: [llvm-commits] CVS: CVSROOT/loginfo Message-ID: <200310162042.PAA06236@zion.cs.uiuc.edu> Changes in directory CVSROOT: loginfo updated: 1.34 -> 1.35 --- Log message: The modules `llvm' and `reopt' have been moved out of this repository. --- Diffs of the changes: (+2 -2) Index: CVSROOT/loginfo diff -u CVSROOT/loginfo:1.34 CVSROOT/loginfo:1.35 --- CVSROOT/loginfo:1.34 Wed Oct 8 13:29:44 2003 +++ CVSROOT/loginfo Thu Oct 16 15:41:51 2003 @@ -28,7 +28,7 @@ #^CVSROOT mailx -s 'CVSROOT commit %s' llvm-commits at cs.uiuc.edu #^llvm mailx -s 'LLVM CVS: %s' llvm-commits at cs.uiuc.edu #^llvm/www ( /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/update-www.sh &); /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu -^llvm /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu +#^llvm /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu +#^reopt /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu ^poolalloc /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu -^reopt /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu ^CVSROOT /home/vadve/vadve/Research/DynOpt/CVSRepository/CVSROOT/commit-diffs.pl %{sVv} llvm-commits at cs.uiuc.edu From brukman at cs.uiuc.edu Thu Oct 16 16:17:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 16:17:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/ExecutionEngine/ExecutionEngine.h Message-ID: <200310162116.QAA31166@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/ExecutionEngine: ExecutionEngine.h updated: 1.14 -> 1.15 --- Log message: If we move the constructors to the .cpp file, we can drop the #include --- Diffs of the changes: (+3 -7) Index: llvm/include/llvm/ExecutionEngine/ExecutionEngine.h diff -u llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.14 llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.15 --- llvm/include/llvm/ExecutionEngine/ExecutionEngine.h:1.14 Tue Oct 14 16:35:52 2003 +++ llvm/include/llvm/ExecutionEngine/ExecutionEngine.h Thu Oct 16 16:16:21 2003 @@ -8,7 +8,6 @@ #ifndef EXECUTION_ENGINE_H #define EXECUTION_ENGINE_H -#include "llvm/ModuleProvider.h" #include #include #include @@ -18,6 +17,7 @@ union GenericValue; class GlobalValue; class Module; +class ModuleProvider; class TargetData; class Type; @@ -36,12 +36,8 @@ } public: - ExecutionEngine(ModuleProvider *P) : CurMod(*(P->getModule())), MP(P) { - assert(P && "ModuleProvider is null?"); - } - ExecutionEngine(Module *M) : CurMod(*M), MP(0) { - assert(M && "Module is null?"); - } + ExecutionEngine(ModuleProvider *P); + ExecutionEngine(Module *M); virtual ~ExecutionEngine(); Module &getModule() const { return CurMod; } From brukman at cs.uiuc.edu Thu Oct 16 16:19:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 16:19:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/ExecutionEngine.cpp Message-ID: <200310162118.QAA31184@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine: ExecutionEngine.cpp updated: 1.32 -> 1.33 --- Log message: * Reorder includes as per the style guide * Move the constructors from .h file here * Document ExecutionEngine::create() * Catch exception possibly thrown by ModuleProvider::releaseModule() --- Diffs of the changes: (+22 -6) Index: llvm/lib/ExecutionEngine/ExecutionEngine.cpp diff -u llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.32 llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.33 --- llvm/lib/ExecutionEngine/ExecutionEngine.cpp:1.32 Tue Oct 14 16:36:31 2003 +++ llvm/lib/ExecutionEngine/ExecutionEngine.cpp Thu Oct 16 16:18:05 2003 @@ -6,12 +6,13 @@ //===----------------------------------------------------------------------===// #define DEBUG_TYPE "jit" -#include "llvm/ExecutionEngine/ExecutionEngine.h" -#include "JIT/VM.h" #include "Interpreter/Interpreter.h" -#include "llvm/DerivedTypes.h" +#include "JIT/VM.h" #include "llvm/Constants.h" +#include "llvm/DerivedTypes.h" #include "llvm/Module.h" +#include "llvm/ModuleProvider.h" +#include "llvm/ExecutionEngine/ExecutionEngine.h" #include "llvm/ExecutionEngine/GenericValue.h" #include "llvm/Target/TargetData.h" #include "Support/Debug.h" @@ -21,11 +22,22 @@ Statistic<> NumInitBytes("lli", "Number of bytes of global vars initialized"); +ExecutionEngine::ExecutionEngine(ModuleProvider *P) : + CurMod(*P->getModule()), MP(P) { + assert(P && "ModuleProvider is null?"); +} + +ExecutionEngine::ExecutionEngine(Module *M) : CurMod(*M), MP(0) { + assert(M && "Module is null?"); +} + ExecutionEngine::~ExecutionEngine() { delete MP; } -/// FIXME: document +/// If possible, create a JIT, unless the caller specifically requests an +/// Interpreter or there's an error. If even an Interpreter cannot be created, +/// NULL is returned. /// ExecutionEngine *ExecutionEngine::create(ModuleProvider *MP, bool ForceInterpreter, @@ -37,8 +49,12 @@ EE = VM::create(MP); // If we can't make a JIT, make an interpreter instead. - if (EE == 0) - EE = Interpreter::create(MP->releaseModule(), TraceMode); + try { + if (EE == 0) + EE = Interpreter::create(MP->releaseModule(), TraceMode); + } catch (...) { + EE = 0; + } return EE; } From brukman at cs.uiuc.edu Thu Oct 16 16:20:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 16:20:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/JIT.cpp VM.cpp Message-ID: <200310162119.QAA32223@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: JIT.cpp updated: 1.19 -> 1.20 VM.cpp updated: 1.8 -> 1.9 --- Log message: JIT.cpp: * #include "llvm/ModuleProvider" * alphabetize #includes * omit extraneous parens in pointer expressions VM.cpp: * #include "llvm/ModuleProvider" * alphabetize #includes --- Diffs of the changes: (+7 -5) Index: llvm/lib/ExecutionEngine/JIT/JIT.cpp diff -u llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.19 llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.20 --- llvm/lib/ExecutionEngine/JIT/JIT.cpp:1.19 Tue Oct 14 16:37:41 2003 +++ llvm/lib/ExecutionEngine/JIT/JIT.cpp Thu Oct 16 16:19:34 2003 @@ -6,10 +6,11 @@ //===----------------------------------------------------------------------===// #include "VM.h" +#include "llvm/Module.h" +#include "llvm/ModuleProvider.h" #include "llvm/ExecutionEngine/GenericValue.h" #include "llvm/Target/TargetMachine.h" #include "llvm/Target/TargetMachineImpls.h" -#include "llvm/Module.h" #include "Support/CommandLine.h" // FIXME: REMOVE THIS @@ -71,7 +72,7 @@ } // Allocate a target... - TargetMachine *Target = TargetMachineAllocator(*(MP->getModule())); + TargetMachine *Target = TargetMachineAllocator(*MP->getModule()); assert(Target && "Could not allocate target machine!"); // Create the virtual machine object... @@ -99,7 +100,7 @@ // We cannot utilize function-at-a-time loading here because PreSelection // is a ModulePass. MP->materializeModule(); - PM.run(*(MP->getModule())); + PM.run(*MP->getModule()); } #endif Index: llvm/lib/ExecutionEngine/JIT/VM.cpp diff -u llvm/lib/ExecutionEngine/JIT/VM.cpp:1.8 llvm/lib/ExecutionEngine/JIT/VM.cpp:1.9 --- llvm/lib/ExecutionEngine/JIT/VM.cpp:1.8 Tue Oct 14 16:37:41 2003 +++ llvm/lib/ExecutionEngine/JIT/VM.cpp Thu Oct 16 16:19:34 2003 @@ -6,9 +6,10 @@ //===----------------------------------------------------------------------===// #include "VM.h" -#include "llvm/Target/TargetMachine.h" -#include "llvm/CodeGen/MachineCodeEmitter.h" #include "llvm/Function.h" +#include "llvm/ModuleProvider.h" +#include "llvm/CodeGen/MachineCodeEmitter.h" +#include "llvm/Target/TargetMachine.h" VM::~VM() { delete MCE; From brukman at cs.uiuc.edu Thu Oct 16 16:21:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Thu Oct 16 16:21:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp Message-ID: <200310162120.QAA32242@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: ReaderWrappers.cpp updated: 1.13 -> 1.14 --- Log message: Add separator between different types of readers. --- Diffs of the changes: (+1 -0) Index: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp diff -u llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.13 llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.14 --- llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.13 Wed Oct 8 14:55:47 2003 +++ llvm/lib/Bytecode/Reader/ReaderWrappers.cpp Thu Oct 16 16:19:54 2003 @@ -123,6 +123,7 @@ if (MustDelete) delete [] Buffer; } +//////////////////////////////////////////////////////////////////////////// namespace { /// BytecodeStdinReader - parses a bytecode file from stdin From gaeke at cs.uiuc.edu Thu Oct 16 18:34:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 18:34:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/JIT/Emitter.cpp Message-ID: <200310162333.SAA04011@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/JIT: Emitter.cpp updated: 1.28 -> 1.29 --- Log message: Fix a typo in a comment, and zap a blank line. --- Diffs of the changes: (+1 -2) Index: llvm/lib/ExecutionEngine/JIT/Emitter.cpp diff -u llvm/lib/ExecutionEngine/JIT/Emitter.cpp:1.28 llvm/lib/ExecutionEngine/JIT/Emitter.cpp:1.29 --- llvm/lib/ExecutionEngine/JIT/Emitter.cpp:1.28 Fri Oct 10 22:51:18 2003 +++ llvm/lib/ExecutionEngine/JIT/Emitter.cpp Thu Oct 16 18:33:38 2003 @@ -116,7 +116,7 @@ namespace { - /// Emitter - The JIT implementation of the MachineCodeEmiter, which is used + /// Emitter - The JIT implementation of the MachineCodeEmitter, which is used /// to output functions to memory for execution. class Emitter : public MachineCodeEmitter { JITMemoryManager MemMgr; @@ -214,7 +214,6 @@ *(unsigned*)CurByte = W; CurByte += sizeof(unsigned); } - uint64_t Emitter::getGlobalValueAddress(GlobalValue *V) { // Try looking up the function to see if it is already compiled, if not return From gaeke at cs.uiuc.edu Thu Oct 16 18:40:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 18:40:02 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/llvm-nm.html Message-ID: <200310162339.SAA09383@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: llvm-nm.html updated: 1.1 -> 1.2 --- Log message: Document that llvm-nm works in pipe mode, thanks to the efforts of Chris. --- Diffs of the changes: (+3 -1) Index: llvm/docs/CommandGuide/llvm-nm.html diff -u llvm/docs/CommandGuide/llvm-nm.html:1.1 llvm/docs/CommandGuide/llvm-nm.html:1.2 --- llvm/docs/CommandGuide/llvm-nm.html:1.1 Thu Oct 16 13:03:24 2003 +++ llvm/docs/CommandGuide/llvm-nm.html Thu Oct 16 18:39:10 2003 @@ -18,7 +18,9 @@

    The llvm-nm utility lists the names of symbols from the LLVM bytecode files named on the command line, along with some -ancillary information about each symbol.

    +ancillary information about each symbol. If no filename is specified, +or - is used as a filename, llvm-nm reads its input from standard +input.

    llvm-nm's default output format is the traditional BSD nm(1) output format. Each such output record consists of an From gaeke at cs.uiuc.edu Thu Oct 16 18:44:00 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 18:44:00 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/CodeGen/MachineCodeEmitter.h Message-ID: <200310162343.SAA10090@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/CodeGen: MachineCodeEmitter.h updated: 1.13 -> 1.14 --- Log message: This file has funny include guards and funny extra whitespace. Make this file less funny. --- Diffs of the changes: (+2 -4) Index: llvm/include/llvm/CodeGen/MachineCodeEmitter.h diff -u llvm/include/llvm/CodeGen/MachineCodeEmitter.h:1.13 llvm/include/llvm/CodeGen/MachineCodeEmitter.h:1.14 --- llvm/include/llvm/CodeGen/MachineCodeEmitter.h:1.13 Mon Jul 14 12:17:11 2003 +++ llvm/include/llvm/CodeGen/MachineCodeEmitter.h Thu Oct 16 18:43:35 2003 @@ -7,8 +7,8 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_CODEGEN_MACHINE_CODE_EMITTER_H -#define LLVM_CODEGEN_MACHINE_CODE_EMITTER_H +#ifndef LLVM_CODEGEN_MACHINECODEEMITTER_H +#define LLVM_CODEGEN_MACHINECODEEMITTER_H #include #include "Support/DataTypes.h" @@ -73,7 +73,6 @@ // virtual uint64_t getConstantPoolEntryAddress(unsigned Index) = 0; - // getCurrentPCValue - This returns the address that the next emitted byte // will be output to. // @@ -86,7 +85,6 @@ // virtual uint64_t forceCompilationOf(Function *F) = 0; - /// createDebugEmitter - Return a dynamically allocated machine /// code emitter, which just prints the opcodes and fields out the cout. This /// can be used for debugging users of the MachineCodeEmitter interface. From gaeke at cs.uiuc.edu Thu Oct 16 18:46:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 18:46:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86CodeEmitter.cpp Message-ID: <200310162345.SAA10107@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86CodeEmitter.cpp updated: 1.36 -> 1.37 --- Log message: Fix typo in comment. --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/X86/X86CodeEmitter.cpp diff -u llvm/lib/Target/X86/X86CodeEmitter.cpp:1.36 llvm/lib/Target/X86/X86CodeEmitter.cpp:1.37 --- llvm/lib/Target/X86/X86CodeEmitter.cpp:1.36 Mon Aug 18 09:32:46 2003 +++ llvm/lib/Target/X86/X86CodeEmitter.cpp Thu Oct 16 18:45:05 2003 @@ -176,7 +176,7 @@ } /// addPassesToEmitMachineCode - Add passes to the specified pass manager to get -/// machine code emitted. This uses a MAchineCodeEmitter object to handle +/// machine code emitted. This uses a MachineCodeEmitter object to handle /// actually outputting the machine code and resolving things like the address /// of functions. This method should returns true if machine code emission is /// not supported. From gaeke at cs.uiuc.edu Thu Oct 16 18:47:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Thu Oct 16 18:47:02 2003 Subject: [llvm-commits] CVS: llvm/utils/codegen-diff Message-ID: <200310162346.SAA10529@zion.cs.uiuc.edu> Changes in directory llvm/utils: codegen-diff updated: 1.2 -> 1.3 --- Log message: Add debug variable. --- Diffs of the changes: (+6 -0) Index: llvm/utils/codegen-diff diff -u llvm/utils/codegen-diff:1.2 llvm/utils/codegen-diff:1.3 --- llvm/utils/codegen-diff:1.2 Thu Jul 3 16:44:32 2003 +++ llvm/utils/codegen-diff Thu Oct 16 18:46:01 2003 @@ -1,11 +1,13 @@ #!/usr/bin/perl use Getopt::Std; +$DEBUG = 0; sub parse_objdump_file { my ($filename) = @_; my @result; open (INPUT, $filename) or die "$filename: $!\n"; + print "opened objdump output file $filename\n" if $DEBUG; while () { if (/\s*([0-9a-f]*):\t(([0-9a-f]{2} )+) *\t(.*)$/) { my ($addr, $bytes, $instr) = ($1, $2, $4); @@ -13,6 +15,7 @@ $bytes =~ s/\s*(.*\S)\s*/$1/; # trim any remaining whitespace $instr =~ s/\s*(.*\S)\s*/$1/; push (@result, {'addr' => $addr, 'bytes' => $bytes, 'instr' => $instr}); + print "addr=$addr bytes='$bytes' instr='$instr'\n" if $DEBUG; } } close INPUT; @@ -24,6 +27,7 @@ my @result; my $got_addr; open (INPUT, $filename) or die "$filename: $!\n"; + print "opened gdb output file $filename\n" if $DEBUG; while () { if (/^(0x[0-9a-f]*):\t([^\t]*)\t[^:]*:\t((0x[0-9a-f]{2}\s*)+)\s*$/) { my ($addr, $bytes, $instr) = ($1, $3, $2); @@ -32,6 +36,7 @@ $bytes =~ s/\s*(.*\S)\s*/$1/; # trim any remaining whitespace $instr =~ s/\s*(.*\S)\s*/$1/; push (@result, {'addr' => $addr, 'bytes' => $bytes, 'instr' => $instr}); + print "addr=$addr bytes='$bytes' instr='$instr'\n" if $DEBUG; } elsif (/^(0x[0-9a-f]*):\t$/) { # deal with gdb's line breaker $got_addr = $1; } elsif ($got_addr && /^ ([^\t]*)\t[^:]*:\t((0x[0-9a-f]{2}\s*)+)\s*$/) { @@ -41,6 +46,7 @@ $bytes =~ s/\s*(.*\S)\s*/$1/; # trim any remaining whitespace $instr =~ s/\s*(.*\S)\s*/$1/; push (@result, {'addr' => $addr, 'bytes' => $bytes, 'instr' => $instr}); + print "addr=$addr bytes='$bytes' instr='$instr'\n" if $DEBUG; undef $got_addr; } } From alkis at cs.uiuc.edu Thu Oct 16 21:03:01 2003 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Oct 16 21:03:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/EmitAssembly.cpp Message-ID: <200310170202.VAA20044@morpheus.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc: EmitAssembly.cpp updated: 1.91 -> 1.92 --- Log message: Eliminate some extraneous code in SlotCalculator::insertVal(). Rename SlotCalculator::getValSlot() to SlotCalculator::getSlot(), SlotCalculator::insertValue() to SlotCalculator::getOrCreateSlot(), SlotCalculator::insertVal() to SlotCalculator::insertValue(), and SlotCalculator::doInsertVal() to SlotCalculator::doInsertValue(). --- Diffs of the changes: (+1 -1) Index: llvm/lib/Target/Sparc/EmitAssembly.cpp diff -u llvm/lib/Target/Sparc/EmitAssembly.cpp:1.91 llvm/lib/Target/Sparc/EmitAssembly.cpp:1.92 --- llvm/lib/Target/Sparc/EmitAssembly.cpp:1.91 Mon Oct 6 10:41:20 2003 +++ llvm/lib/Target/Sparc/EmitAssembly.cpp Thu Oct 16 21:02:39 2003 @@ -148,7 +148,7 @@ // Qualify all internal names with a unique id. if (!isExternal(V)) { - int valId = idTable->Table.getValSlot(V); + int valId = idTable->Table.getSlot(V); if (valId == -1) { GlobalIdTable::ValIdMapConstIterator I = idTable->valToIdMap.find(V); if (I == idTable->valToIdMap.end()) From alkis at cs.uiuc.edu Thu Oct 16 21:03:15 2003 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Oct 16 21:03:15 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/SlotCalculator.h Message-ID: <200310170202.VAA20061@morpheus.cs.uiuc.edu> Changes in directory llvm/include/llvm: SlotCalculator.h updated: 1.10 -> 1.11 --- Log message: Eliminate some extraneous code in SlotCalculator::insertVal(). Rename SlotCalculator::getValSlot() to SlotCalculator::getSlot(), SlotCalculator::insertValue() to SlotCalculator::getOrCreateSlot(), SlotCalculator::insertVal() to SlotCalculator::insertValue(), and SlotCalculator::doInsertVal() to SlotCalculator::doInsertValue(). --- Diffs of the changes: (+12 -11) Index: llvm/include/llvm/SlotCalculator.h diff -u llvm/include/llvm/SlotCalculator.h:1.10 llvm/include/llvm/SlotCalculator.h:1.11 --- llvm/include/llvm/SlotCalculator.h:1.10 Tue Sep 30 13:37:37 2003 +++ llvm/include/llvm/SlotCalculator.h Thu Oct 16 21:02:40 2003 @@ -39,8 +39,8 @@ SlotCalculator(const Function *M, bool IgnoreNamed); inline ~SlotCalculator() {} - // getValSlot returns < 0 on error! - int getValSlot(const Value *D) const; + // getSlot returns < 0 on error! + int getSlot(const Value *D) const; inline unsigned getNumPlanes() const { return Table.size(); } inline unsigned getModuleLevel(unsigned Plane) const { @@ -58,19 +58,20 @@ void purgeFunction(); protected: - // insertVal - Insert a value into the value table... Return the slot that it - // occupies, or -1 if the declaration is to be ignored because of the - // IgnoreNamedNodes flag. + // getOrCreateSlot - Values can be crammed into here at will... if + // they haven't been inserted already, they get inserted, otherwise + // they are ignored. // - int insertVal(const Value *D, bool dontIgnore = false); + int getOrCreateSlot(const Value *D); - // insertValue - Values can be crammed into here at will... if they haven't - // been inserted already, they get inserted, otherwise they are ignored. + // insertValue - Insert a value into the value table... Return the + // slot that it occupies, or -1 if the declaration is to be ignored + // because of the IgnoreNamedNodes flag. // - int insertValue(const Value *D); + int insertValue(const Value *D, bool dontIgnore = false); - // doInsertVal - Small helper function to be called only be insertVal. - int doInsertVal(const Value *D); + // doInsertValue - Small helper function to be called only be insertVal. + int doInsertValue(const Value *D); // processModule - Process all of the module level function declarations and // types that are available. From alkis at cs.uiuc.edu Thu Oct 16 21:03:28 2003 From: alkis at cs.uiuc.edu (Alkis Evlogimenos) Date: Thu Oct 16 21:03:28 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/SlotCalculator.cpp AsmWriter.cpp Message-ID: <200310170202.VAA20045@morpheus.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: SlotCalculator.cpp updated: 1.29 -> 1.30 AsmWriter.cpp updated: 1.100 -> 1.101 --- Log message: Eliminate some extraneous code in SlotCalculator::insertVal(). Rename SlotCalculator::getValSlot() to SlotCalculator::getSlot(), SlotCalculator::insertValue() to SlotCalculator::getOrCreateSlot(), SlotCalculator::insertVal() to SlotCalculator::insertValue(), and SlotCalculator::doInsertVal() to SlotCalculator::doInsertValue(). --- Diffs of the changes: (+35 -37) Index: llvm/lib/VMCore/SlotCalculator.cpp diff -u llvm/lib/VMCore/SlotCalculator.cpp:1.29 llvm/lib/VMCore/SlotCalculator.cpp:1.30 --- llvm/lib/VMCore/SlotCalculator.cpp:1.29 Mon Oct 13 10:21:58 2003 +++ llvm/lib/VMCore/SlotCalculator.cpp Thu Oct 16 21:02:39 2003 @@ -35,7 +35,7 @@ // for (unsigned i = 0; i < Type::FirstDerivedTyID; ++i) { assert(Type::getPrimitiveType((Type::PrimitiveID)i)); - insertVal(Type::getPrimitiveType((Type::PrimitiveID)i), true); + insertValue(Type::getPrimitiveType((Type::PrimitiveID)i), true); } if (M == 0) return; // Empty table... @@ -51,7 +51,7 @@ // for (unsigned i = 0; i < Type::FirstDerivedTyID; ++i) { assert(Type::getPrimitiveType((Type::PrimitiveID)i)); - insertVal(Type::getPrimitiveType((Type::PrimitiveID)i), true); + insertValue(Type::getPrimitiveType((Type::PrimitiveID)i), true); } if (TheModule == 0) return; // Empty table... @@ -71,21 +71,21 @@ // for (Module::const_giterator I = TheModule->gbegin(), E = TheModule->gend(); I != E; ++I) - insertValue(I); + getOrCreateSlot(I); // Scavenge the types out of the functions, then add the functions themselves // to the value table... // for (Module::const_iterator I = TheModule->begin(), E = TheModule->end(); I != E; ++I) - insertValue(I); + getOrCreateSlot(I); // Add all of the module level constants used as initializers // for (Module::const_giterator I = TheModule->gbegin(), E = TheModule->gend(); I != E; ++I) if (I->hasInitializer()) - insertValue(I->getInitializer()); + getOrCreateSlot(I->getInitializer()); // Insert constants that are named at module level into the slot pool so that // the module symbol table can refer to them... @@ -105,7 +105,7 @@ for (SymbolTable::const_iterator I = ST->begin(), E = ST->end(); I != E; ++I) for (SymbolTable::type_const_iterator TI = I->second.begin(), TE = I->second.end(); TI != TE; ++TI) - insertValue(TI->second); + getOrCreateSlot(TI->second); } void SlotCalculator::processSymbolTableConstants(const SymbolTable *ST) { @@ -113,7 +113,7 @@ for (SymbolTable::type_const_iterator TI = I->second.begin(), TE = I->second.end(); TI != TE; ++TI) if (isa(TI->second)) - insertValue(TI->second); + getOrCreateSlot(TI->second); } @@ -130,7 +130,7 @@ // Iterate over function arguments, adding them to the value table... for(Function::const_aiterator I = M->abegin(), E = M->aend(); I != E; ++I) - insertValue(I); + getOrCreateSlot(I); // Iterate over all of the instructions in the function, looking for constant // values that are referenced. Add these to the value pools before any @@ -147,7 +147,7 @@ // Emit all of the constants that are being used by the instructions in the // function... for_each(constant_begin(M), constant_end(M), - bind_obj(this, &SlotCalculator::insertValue)); + bind_obj(this, &SlotCalculator::getOrCreateSlot)); // If there is a symbol table, it is possible that the user has names for // constants that are not being used. In this case, we will have problems @@ -162,13 +162,13 @@ // Iterate over basic blocks, adding them to the value table... for (Function::const_iterator I = M->begin(), E = M->end(); I != E; ++I) - insertValue(I); + getOrCreateSlot(I); SC_DEBUG("Inserting Instructions:\n"); // Add all of the instructions to the type planes... for_each(inst_begin(M), inst_end(M), - bind_obj(this, &SlotCalculator::insertValue)); + bind_obj(this, &SlotCalculator::getOrCreateSlot)); if (!IgnoreNamedNodes) { SC_DEBUG("Inserting SymbolTable values:\n"); @@ -219,7 +219,7 @@ SC_DEBUG("end purgeFunction!\n"); } -int SlotCalculator::getValSlot(const Value *D) const { +int SlotCalculator::getSlot(const Value *D) const { std::map::const_iterator I = NodeMap.find(D); if (I == NodeMap.end()) return -1; @@ -227,8 +227,8 @@ } -int SlotCalculator::insertValue(const Value *V) { - int SlotNo = getValSlot(V); // Check to see if it's already in! +int SlotCalculator::getOrCreateSlot(const Value *V) { + int SlotNo = getSlot(V); // Check to see if it's already in! if (SlotNo != -1) return SlotNo; if (!isa(V)) @@ -238,16 +238,16 @@ // for (User::const_op_iterator I = C->op_begin(), E = C->op_end(); I != E; ++I) - insertValue(*I); + getOrCreateSlot(*I); } - return insertVal(V); + return insertValue(V); } -int SlotCalculator::insertVal(const Value *D, bool dontIgnore) { +int SlotCalculator::insertValue(const Value *D, bool dontIgnore) { assert(D && "Can't insert a null value!"); - assert(getValSlot(D) == -1 && "Value is already in the table!"); + assert(getSlot(D) == -1 && "Value is already in the table!"); // If this node does not contribute to a plane, or if the node has a // name and we don't want names, then ignore the silly node... Note that types @@ -270,12 +270,9 @@ // // global { \2 * } { { \2 }* null } // - int ResultSlot; - if ((ResultSlot = getValSlot(TheTy)) == -1) { - ResultSlot = doInsertVal(TheTy); - SC_DEBUG(" Inserted type: " << TheTy->getDescription() << " slot=" << - ResultSlot << "\n"); - } + int ResultSlot = doInsertValue(TheTy); + SC_DEBUG(" Inserted type: " << TheTy->getDescription() << " slot=" << + ResultSlot << "\n"); // Loop over any contained types in the definition... in depth first order. // @@ -284,9 +281,9 @@ if (*I != TheTy) { // If we haven't seen this sub type before, add it to our type table! const Type *SubTy = *I; - if (getValSlot(SubTy) == -1) { + if (getSlot(SubTy) == -1) { SC_DEBUG(" Inserting subtype: " << SubTy->getDescription() << "\n"); - int Slot = doInsertVal(SubTy); + int Slot = doInsertValue(SubTy); SC_DEBUG(" Inserted subtype: " << SubTy->getDescription() << " slot=" << Slot << "\n"); } @@ -295,13 +292,14 @@ } // Okay, everything is happy, actually insert the silly value now... - return doInsertVal(D); + return doInsertValue(D); } -// doInsertVal - This is a small helper function to be called only be insertVal. +// doInsertValue - This is a small helper function to be called only +// be insertValue. // -int SlotCalculator::doInsertVal(const Value *D) { +int SlotCalculator::doInsertValue(const Value *D) { const Type *Typ = D->getType(); unsigned Ty; @@ -310,10 +308,10 @@ // cerr << "Inserting type '" << cast(D)->getDescription() << "'!\n"; if (Typ->isDerivedType()) { - int ValSlot = getValSlot(Typ); + int ValSlot = getSlot(Typ); if (ValSlot == -1) { // Have we already entered this type? // Nope, this is the first we have seen the type, process it. - ValSlot = insertVal(Typ, true); + ValSlot = insertValue(Typ, true); assert(ValSlot != -1 && "ProcessType returned -1 for a type?"); } Ty = (unsigned)ValSlot; Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.100 llvm/lib/VMCore/AsmWriter.cpp:1.101 --- llvm/lib/VMCore/AsmWriter.cpp:1.100 Thu Oct 16 13:29:00 2003 +++ llvm/lib/VMCore/AsmWriter.cpp Thu Oct 16 21:02:39 2003 @@ -357,7 +357,7 @@ if (V->hasName()) { Out << getLLVMName(V->getName()); } else if (Table) { - int Slot = Table->getValSlot(V); + int Slot = Table->getSlot(V); if (Slot >= 0) Out << "%" << Slot; else @@ -405,7 +405,7 @@ } else { int Slot; if (Table) { - Slot = Table->getValSlot(V); + Slot = Table->getSlot(V); } else { if (const Type *Ty = dyn_cast(V)) { Out << Ty->getDescription(); @@ -415,7 +415,7 @@ Table = createSlotCalculator(V); if (Table == 0) { Out << "BAD VALUE TYPE!"; return; } - Slot = Table->getValSlot(V); + Slot = Table->getSlot(V); delete Table; } if (Slot >= 0) Out << "%" << Slot; @@ -706,7 +706,7 @@ // Output name, if available... if (Arg->hasName()) Out << " " << getLLVMName(Arg->getName()); - else if (Table.getValSlot(Arg) < 0) + else if (Table.getSlot(Arg) < 0) Out << ""; } @@ -716,7 +716,7 @@ if (BB->hasName()) { // Print out the label if it exists... Out << "\n" << BB->getName() << ":"; } else if (!BB->use_empty()) { // Don't print block # of no uses... - int Slot = Table.getValSlot(BB); + int Slot = Table.getSlot(BB); Out << "\n;

    Server Error (Application)

    \n"); + put_st("An application on this server has encountered an error\n"); + put_st("which prevents it from fulfilling your request."); + put_st("

    Error Message: ");
    +     lprint(car(result),NIL);
    +     if NNULLP(cdr(result))
    +       {put_st("\n");
    +        lprint(cdr(result),NIL);}
    +     put_st("
    \n"); + err("cgi-main",NIL);} + return(NIL);} + + + static int htqs_arg(char *value) + {char tmpbuff[1024],*p1,*p2; + if ((strcmp(value,"(repl)") == 0) || + (strcmp(value,"repl") == 0)) + return(repl_driver(1,1,NULL)); + else if (!strchr(value,'(')) + {strcpy(tmpbuff,"(require \""); + for(p1 = &tmpbuff[strlen(tmpbuff)],p2 = value;*p2;++p2) + {if (strchr("\\\"",*p2)) *p1++ = '\\'; + *p1++ = *p2;} + *p1 = 0; + strcat(tmpbuff,"\")"); + return(repl_c_string(tmpbuff,0,0,0));} + else + return(repl_c_string(value,0,0,0));} + + + int __stdcall siod_main(int argc,char **argv, char **env) + {int j,retval = 0,iargc,mainflag = 0,text_plain_flag = 0; + char *iargv[2],*start,*end; + LISP l; + iargv[0] = ""; + for(iargc=0,j=1;j 0) && + (iargv[1][2] != '0')) + {printf("Content-type: text/plain\r\n\r\n"); + text_plain_flag = 1;} + if ((strncmp(iargv[1],"-m",2) == 0)) + mainflag = atol(&iargv[1][2]); + else + process_cla(2,iargv,1); + /* Note: Not doing free(iargv[1]); */ + start = (*end) ? end+1 : end;}} + else + ++iargc; + print_welcome(); + print_hs_1(); + init_storage(); + for(l=NIL,j=0;j= 2) && (argc > 3)) ? 3 : argc);++j) + if (argv[j][0] != '-') + {retval = htqs_arg(argv[j]); + if (retval != 0) break;} + if (mainflag) + retval = htqs_arg(((mainflag > 2) && !text_plain_flag) + ? "(__cgi-main (*catch 'errobj (main))))" + : "(main)");} + if (siod_verbose_check(2)) + printf("EXIT\n"); + #ifdef VMS + if (retval == 0) retval = 1; + #endif + return(retval);} + + long position_script(FILE *f,char *buff,size_t bufflen) + /* This recognizes #!/ sequence. Exersize: compute the probability + of the sequence showing up in a file of N random bytes. */ + {int c,s = 0; + long pos = -1,offset; + size_t j; + buff[0] = 0; + for(offset=0;offset<250000;++offset) + {c = getc(f); + switch(c) + {case EOF: + return(-1); + case '#': + s = '#'; + pos = offset; + break; + case '!': + s = (s == '#') ? '!' : 0; + break; + case '/': + if (s == '!') + {while((c = getc(f)) != EOF) if (c == ' ') break; + for(j=0;((c = getc(f)) != '\n') && (c != EOF) && (j+1 <= bufflen);++j) + {buff[j] = c; buff[j+1] = 0;} + if (strspn(buff," \t\r") == strlen(buff)) buff[0] = 0; + return(pos);} + s = 0; + break; + default: + s = 0; + break;}} + return(-1);} + + #ifdef WIN32 + char *find_exe_self(char *cmd) + /* This is for the benefit of WINDOWS NT, which is in fact + unix compatible in what it passes in as argv[0]. There + are other ways of getting a handle to the current executable. */ + {DWORD retsize; + char exe_self[512]; + retsize = SearchPath(NULL,cmd,".EXE",sizeof(exe_self),exe_self,NULL); + if (retsize > 0) + return(strdup(exe_self)); + else + return(cmd);} + #endif + + void __stdcall siod_shuffle_args(int *pargc,char ***pargv) + /* shuffle arguments in the same way that the unix exec loader + would do for a #!/xxx script execution. */ + {FILE *f; + char flagbuff[100],**argv,**nargv,offbuff[10]; + long pos; + int argc,nargc,j,k; + argc = *pargc; + argv = *pargv; + #ifdef WIN32 + argv[0] = find_exe_self(argv[0]); + process_cla(1,argv,1); + #endif + if (!(f = fopen(argv[0],"rb"))) + {/* perror(argv[0]); */ + return;} + pos = position_script(f,flagbuff,sizeof(flagbuff)); + fclose(f); + if (pos < 0) return; + nargc = argc + ((*flagbuff) ? 2 : 1); + nargv = (char **) malloc(sizeof(char *) * nargc); + j = 0; + nargv[j++] = "siod.exe"; + if (*flagbuff) nargv[j++] = strdup(flagbuff); + sprintf(offbuff,"%ld",pos); + nargv[j] = (char *) malloc(strlen(offbuff)+strlen(argv[0])+2); + sprintf(nargv[j],"%s%c%s",offbuff,VLOAD_OFFSET_HACK_CHAR,argv[0]); + j++; + for(k=1;kstrtime",utime2str); + init_subr_0("unix-time",unix_time); + init_subr_1("unix-ctime",unix_ctime); + init_subr_1("getenv",lgetenv); + init_subr_1("sleep",lsleep); + init_subr_1("url-encode",url_encode); + init_subr_1("url-decode",url_decode); + init_subr_2("gets",lgets); + init_subr_1("readline",readline); + init_subr_1("html-encode",html_encode); + init_subr_1("html-decode",html_decode); + #if defined(unix) || defined(WIN32) + init_subr_1("decode-file-mode",decode_st_mode); + init_subr_1("encode-file-mode",encode_st_mode); + init_subr_1("stat",l_stat); + init_subr_1("fstat",l_fstat); + #endif + #ifdef unix + init_subr_1("encode-open-flags",encode_open_flags); + init_subr_1("lstat",l_lstat); + #endif + #if defined(__osf__) || defined(SUN5) + init_subr_3("fnmatch",l_fnmatch); + #endif + #ifdef unix + init_subr_2("symlink",lsymlink); + init_subr_2("link",llink); + init_subr_1("unlink",lunlink); + init_subr_1("rmdir",lrmdir); + init_subr_2("mkdir",lmkdir); + init_subr_2("rename",lrename); + init_subr_1("readlink",lreadlink); + #endif + #ifndef WIN32 + init_subr_3("chown",l_chown); + #endif + #if defined(unix) && !defined(linux) + init_subr_3("lchown",l_lchown); + #endif + init_subr_1("http-date",http_date); + #if defined(__osf__) + init_subr_1("http-date-parse",http_date_parse); + #endif + #ifdef unix + init_subr_2("popen",popen_l); + init_subr_1("pclose",pclose_l); + #endif + init_subr_2("load-so",load_so); + init_subr_1("require-so",require_so); + init_subr_1("so-ext",so_ext); + #ifdef unix + setvar(cintern("SEEK_SET"),flocons(SEEK_SET),NIL); + setvar(cintern("SEEK_CUR"),flocons(SEEK_CUR),NIL); + setvar(cintern("SEEK_END"),flocons(SEEK_END),NIL); + setvar(cintern("F_RDLCK"),flocons(F_RDLCK),NIL); + setvar(cintern("F_WRLCK"),flocons(F_WRLCK),NIL); + setvar(cintern("F_UNLCK"),flocons(F_UNLCK),NIL); + init_subr_5("F_SETLK",lF_SETLK); + init_subr_5("F_SETLKW",lF_SETLKW); + init_subr_5("F_GETLK",lF_GETLK); + + #endif + init_subr_0("siod-lib",siod_lib_l); + + #ifdef unix + if ((!(tmp1 = getenv(ld_library_path_env))) || + (!strstr(tmp1,siod_lib))) + {tmp2 = (char *) must_malloc(strlen(ld_library_path_env) + 1 + + ((tmp1) ? strlen(tmp1) + 1 : 0) + + strlen(siod_lib) + 1); + sprintf(tmp2,"%s=%s%s%s", + ld_library_path_env, + (tmp1) ? tmp1 : "", + (tmp1) ? ":" : "", + siod_lib); + /* note that we cannot free the string afterwards. */ + putenv(tmp2);} + #endif + #ifdef vms + setvar(cintern("*require-so-dir*"), + string_append(listn(2, + strcons(-1,siod_lib), + strcons(-1,".EXE"))), + NIL); + #endif + init_subr_1("localtime",llocaltime); + init_subr_1("gmtime",lgmtime); + #if defined(unix) || defined(WIN32) + init_subr_0("tzset",ltzset); + #endif + init_subr_1("mktime",lmktime); + init_subr_1("chdir",lchdir); + #if defined(__osf__) + init_subr_0("rld-pathnames",rld_pathnames); + #endif + #if defined(__osf__) || defined(SUN5) || defined(linux) + init_subr_3("strptime",lstrptime); + #endif + #ifdef unix + init_subr_2("strftime",lstrftime); + init_subr_1("getpass",lgetpass); + init_subr_0("pipe",lpipe); + init_subr_2("alarm",lalarm); + #endif + + setvar(cintern("CTYPE_FLOAT"),flocons(CTYPE_FLOAT),NIL); + setvar(cintern("CTYPE_DOUBLE"),flocons(CTYPE_DOUBLE),NIL); + setvar(cintern("CTYPE_LONG"),flocons(CTYPE_LONG),NIL); + setvar(cintern("CTYPE_SHORT"),flocons(CTYPE_SHORT),NIL); + setvar(cintern("CTYPE_CHAR"),flocons(CTYPE_CHAR),NIL); + setvar(cintern("CTYPE_INT"),flocons(CTYPE_INT),NIL); + setvar(cintern("CTYPE_ULONG"),flocons(CTYPE_ULONG),NIL); + setvar(cintern("CTYPE_USHORT"),flocons(CTYPE_USHORT),NIL); + setvar(cintern("CTYPE_UCHAR"),flocons(CTYPE_UCHAR),NIL); + setvar(cintern("CTYPE_UINT"),flocons(CTYPE_UINT),NIL); + init_subr_3("datref",datref); + init_subr_2("sdatref",sdatref); + init_subr_2("mkdatref",mkdatref); + init_subr_2("datlength",datlength); + init_subr_1("position-script",lposition_script); + + init_slibu_version();} Index: llvm/test/Programs/MultiSource/Applications/siod/test.scm diff -c /dev/null llvm/test/Programs/MultiSource/Applications/siod/test.scm:1.1 *** /dev/null Fri Oct 17 13:48:56 2003 --- llvm/test/Programs/MultiSource/Applications/siod/test.scm Fri Oct 17 13:48:45 2003 *************** *** 0 **** --- 1,72 ---- + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; These are some really basic tests of SIOD that I wrote for the LLVM + ;; testsuite... later we should replace these with code that actually does + ;; something, I guess. -Brian + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Some standard-Scheme compatibility routines + (define else #t) + (define (display x) + (cond ((number? x) (puts (number->string x))) + ((string? x) (puts x)) + ((symbol? x) (puts x)) + (else (err "can't display errobj" x)))) + (define (newline) (puts "\n")) + (define (cadddr x) (caddr (cdr x))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Property lists like in LISP. + (define *properties* '()) + (define (get table key) + (let ((result (assoc (cons key table) *properties*))) + (if result + (cadr result) + #f))) + (define (put table key value) + (let* ((real-key (cons key table)) + (result (assoc real-key *properties*))) + (if result + (set-car! (cdr result) value) + (set! *properties* (cons (list real-key value) *properties*))))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; simple test code for proplist code, presented above + (define (simple-proplist-test) + (put 'answer 'value 42) + (display "the value of (get 'answer 'value) is ") + (display (get 'answer 'value)) + (newline) + (put 'answer 'value 'xyzzy) + (display "the value of (get 'answer 'value) is ") + (display (get 'answer 'value)) + (newline)) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; recursively count down from COUNTER, printing out the numbers + (define (print-countdown counter) + (if (equal? counter 0) + #t + (begin + (display counter) + (newline) + (print-countdown (- counter 1))))) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; print out whether VALUE is positive, zero, or negative + (define (print-signum value) + (display value) + (display " is ") + (display (cond ((> value 0) "positive") + ((< value 0) "negative") + (else "zero"))) + (newline)) + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + ;; Run some simple tests + (print-countdown 10) + (print-signum -42) + (print-signum 0) + (print-signum 42) + (simple-proplist-test) + Index: llvm/test/Programs/MultiSource/Applications/siod/trace.c diff -c /dev/null llvm/test/Programs/MultiSource/Applications/siod/trace.c:1.1 *** /dev/null Fri Oct 17 13:48:56 2003 --- llvm/test/Programs/MultiSource/Applications/siod/trace.c Fri Oct 17 13:48:45 2003 *************** *** 0 **** --- 1,146 ---- + /* COPYRIGHT (c) 1992-1994 BY + * MITECH CORPORATION, ACTON, MASSACHUSETTS. + * See the source file SLIB.C for more information. + + (trace procedure1 procedure2 ...) + (untrace procedure1 procedure2 ...) + + Currently only user-defined procedures can be traced. + Fancy printing features such as indentation based on + recursion level will also have to wait for a future version. + + + */ + + #include + #include + #include "siod.h" + #include "siodp.h" + + static void init_trace_version(void) + {setvar(cintern("*trace-version*"), + cintern("$Id: trace.c,v 1.1 2003/10/17 18:48:45 gaeke Exp $"), + NIL);} + + + static long tc_closure_traced = 0; + + static LISP sym_traced = NIL; + static LISP sym_quote = NIL; + static LISP sym_begin = NIL; + + LISP ltrace_fcn_name(LISP body); + LISP ltrace_1(LISP fcn_name,LISP env); + LISP ltrace(LISP fcn_names,LISP env); + LISP luntrace_1(LISP fcn); + LISP luntrace(LISP fcns); + static void ct_gc_scan(LISP ptr); + static LISP ct_gc_mark(LISP ptr); + void ct_prin1(LISP ptr,struct gen_printio *f); + LISP ct_eval(LISP ct,LISP *px,LISP *penv); + + LISP ltrace_fcn_name(LISP body) + {LISP tmp; + if NCONSP(body) return(NIL); + if NEQ(CAR(body),sym_begin) return(NIL); + tmp = CDR(body); + if NCONSP(tmp) return(NIL); + tmp = CAR(tmp); + if NCONSP(tmp) return(NIL); + if NEQ(CAR(tmp),sym_quote) return(NIL); + tmp = CDR(tmp); + if NCONSP(tmp) return(NIL); + return(CAR(tmp));} + + LISP ltrace_1(LISP fcn_name,LISP env) + {LISP fcn,code; + fcn = leval(fcn_name,env); + if (TYPE(fcn) == tc_closure) + {code = fcn->storage_as.closure.code; + if NULLP(ltrace_fcn_name(cdr(code))) + setcdr(code,cons(sym_begin, + cons(cons(sym_quote,cons(fcn_name,NIL)), + cons(cdr(code),NIL)))); + fcn->type = (short) tc_closure_traced;} + else if (TYPE(fcn) == tc_closure_traced) + ; + else + err("not a closure, cannot trace",fcn); + return(NIL);} + + LISP ltrace(LISP fcn_names,LISP env) + {LISP l; + for(l=fcn_names;NNULLP(l);l=cdr(l)) + ltrace_1(car(l),env); + return(NIL);} + + LISP luntrace_1(LISP fcn) + {if (TYPE(fcn) == tc_closure) + ; + else if (TYPE(fcn) == tc_closure_traced) + fcn->type = tc_closure; + else + err("not a closure, cannot untrace",fcn); + return(NIL);} + + LISP luntrace(LISP fcns) + {LISP l; + for(l=fcns;NNULLP(l);l=cdr(l)) + luntrace_1(car(l)); + return(NIL);} + + static void ct_gc_scan(LISP ptr) + {CAR(ptr) = gc_relocate(CAR(ptr)); + CDR(ptr) = gc_relocate(CDR(ptr));} + + static LISP ct_gc_mark(LISP ptr) + {gc_mark(ptr->storage_as.closure.code); + return(ptr->storage_as.closure.env);} + + void ct_prin1(LISP ptr,struct gen_printio *f) + {gput_st(f,"#storage_as.closure.code),f); + gput_st(f," "); + lprin1g(cdr(ptr->storage_as.closure.code),f); + gput_st(f,">");} + + LISP ct_eval(LISP ct,LISP *px,LISP *penv) + {LISP fcn_name,args,env,result,l; + fcn_name = ltrace_fcn_name(cdr(ct->storage_as.closure.code)); + args = leval_args(CDR(*px),*penv); + fput_st(stdout,"->"); + lprin1f(fcn_name,stdout); + for(l=args;NNULLP(l);l=cdr(l)) + {fput_st(stdout," "); + lprin1f(car(l),stdout);} + fput_st(stdout,"\n"); + env = extend_env(args, + car(ct->storage_as.closure.code), + ct->storage_as.closure.env); + result = leval(cdr(ct->storage_as.closure.code),env); + fput_st(stdout,"<-"); + lprin1f(fcn_name,stdout); + fput_st(stdout," "); + lprin1f(result,stdout); + fput_st(stdout,"\n"); + *px = result; + return(NIL);} + + void __stdcall init_trace(void) + {long j; + tc_closure_traced = allocate_user_tc(); + set_gc_hooks(tc_closure_traced, + NULL, + ct_gc_mark, + ct_gc_scan, + NULL, + &j); + gc_protect_sym(&sym_traced,"*traced*"); + setvar(sym_traced,NIL,NIL); + gc_protect_sym(&sym_begin,"begin"); + gc_protect_sym(&sym_quote,"quote"); + set_print_hooks(tc_closure_traced,ct_prin1); + set_eval_hooks(tc_closure_traced,ct_eval); + init_fsubr("trace",ltrace); + init_lsubr("untrace",luntrace); + init_trace_version();} From gaeke at cs.uiuc.edu Fri Oct 17 13:49:31 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Fri Oct 17 13:49:31 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Applications/siod/ Message-ID: <200310171848.NAA30906@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Applications/siod: --- Log message: Directory /home/vadve/shared/PublicCVS/llvm/test/Programs/MultiSource/Applications/siod added to the repository --- Diffs of the changes: (+0 -0) From gaeke at cs.uiuc.edu Fri Oct 17 13:59:02 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Fri Oct 17 13:59:02 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/MultiSource/Applications/siod/LICENSE.TXT Message-ID: <200310171858.NAA32174@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/MultiSource/Applications/siod: LICENSE.TXT added (r1.1) --- Log message: add license information --- Diffs of the changes: (+24 -0) Index: llvm/test/Programs/MultiSource/Applications/siod/LICENSE.TXT diff -c /dev/null llvm/test/Programs/MultiSource/Applications/siod/LICENSE.TXT:1.1 *** /dev/null Fri Oct 17 13:58:19 2003 --- llvm/test/Programs/MultiSource/Applications/siod/LICENSE.TXT Fri Oct 17 13:58:09 2003 *************** *** 0 **** --- 1,24 ---- + SIOD (Scheme in One {Defun,Day}) by George J. Carrette + is licensed under the following license: + + ------------------------------------------------------------------------------ + + * COPYRIGHT (c) 1988-1997 BY * + * PARADIGM ASSOCIATES INCORPORATED, CAMBRIDGE, MASSACHUSETTS. * + * ALL RIGHTS RESERVED * + + Permission to use, copy, modify, distribute and sell this software + and its documentation for any purpose and without fee is hereby + granted, provided that the above copyright notice appear in all copies + and that both that copyright notice and this permission notice appear + in supporting documentation, and that the name of Paradigm Associates + Inc not be used in advertising or publicity pertaining to distribution + of the software without specific, written prior permission. + + PARADIGM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING + ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL + PARADIGM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR + ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, + WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, + ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + SOFTWARE. From criswell at cs.uiuc.edu Fri Oct 17 15:44:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri Oct 17 15:44:01 2003 Subject: [llvm-commits] CVS: llvm-www/www-index.html Message-ID: <200310172043.PAA21327@choi.cs.uiuc.edu> Changes in directory llvm-www: www-index.html updated: 1.59 -> 1.60 --- Log message: Subcatagorized the documentation. Fixed some spelling mistakes. Reformatted some of the documentation lists to (hopefully) make the HTML source a little more readable. --- Diffs of the changes: (+73 -23) Index: llvm-www/www-index.html diff -u llvm-www/www-index.html:1.59 llvm-www/www-index.html:1.60 --- llvm-www/www-index.html:1.59 Wed Oct 8 00:44:16 2003 +++ llvm-www/www-index.html Fri Oct 17 15:43:07 2003 @@ -267,32 +267,61 @@ Here are some technical and reference documents for the LLVM - system:
      -
    • The - LLVM Instruction Set and Compilation - Strategy - Describes the high level - picture of the LLVM instruction set and - compilation system. This should be the - first document you read to get an - overview of LLVM.
    • -
    • The - LLVM Getting Started Guide - - Discusses how to get up and running + system: +

      + +

      + LLVM Design +

      + + + +

      + LLVM User Guides +

      + + + +

      + Programming Documentation +

      + + +

      + Contributing +

      + +
      • Open Projects in the LLVM system. Look here if you are interested in doing something with LLVM, but aren't sure what needs @@ -317,24 +362,29 @@ instructions for the proper way to submit information about a bug you ran into in the LLVM system.
      -

      Other useful information:

      + +

      + +

      + Other Useful Information +

      +

      +

      From criswell at cs.uiuc.edu Fri Oct 17 16:12:03 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri Oct 17 16:12:03 2003 Subject: [llvm-commits] CVS: llvm/README.txt Message-ID: <200310172111.QAA29712@choi.cs.uiuc.edu> Changes in directory llvm: README.txt updated: 1.2 -> 1.3 --- Log message: Updated the README so that it catagorizes the docs similar to the web page. Added a few missing docs as well. --- Diffs of the changes: (+35 -10) Index: llvm/README.txt diff -u llvm/README.txt:1.2 llvm/README.txt:1.3 --- llvm/README.txt:1.2 Mon Oct 13 16:09:04 2003 +++ llvm/README.txt Fri Oct 17 16:10:57 2003 @@ -13,37 +13,62 @@ LLVM. Introductory Literature: + LLVM Home Page: http://llvm.cs.uiuc.edu License Information: llvm/LICENSE.txt - Downloading and Installation Instructions: - llvm/docs/GettingStarted.html - Release Notes: llvm/docs/ReleaseNotes.html -Technical Reference: - Command Documentation: - llvm/docs/CommandGuide/CommandGuide.html +LLVM Design: - Using the LLVM Test Suite: - llvm/docs/TestingGuide.html + The LLVM Instruction Set and Compilation Strategy: + http://llvm.cs.uiuc.edu/pubs/2002-08-09-LLVMCompilationStrategy.html + +LLVM User Guides: + + Download and Installation Instructions: + llvm/docs/GettingStarted.html + + LLVM Command Guide: + llvm/docs/CommandGuide/CommandGuide.html LLVM Assembly Language: llvm/docs/LangRef.html - LLVM Source Code Tree: + LLVM Test Suite Guide: + llvm/docs/TestingGuide.html + +LLVM Programming Documentation: + + LLVM Programmers Manual: llvm/docs/ProgrammersManual.html + Writing an LLVM Pass: + llvm/docs/WritingAnLLVMPass.html + + Alias Analysis in LLVM: + llvm/docs/AliasAnalysis.html + + Command Line Library: + llvm/docs/CommandLine.html + Coding Standards: llvm/docs/CodingStandards.html LLVM Community: + Submitting a Bug: - http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html + http://llvm.cs.uiuc.edu/docs/HowToSubmitABug.html + + Open Projects: + llvm/docs/OpenProjects.html + + Creating a new LLVM Project: + llvm/docs/Projects.html Mailing Lists: There are several mailing lists providing LLVM users with From criswell at cs.uiuc.edu Fri Oct 17 16:38:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri Oct 17 16:38:01 2003 Subject: [llvm-commits] CVS: llvm/projects/sample/autoconf/LICENSE.TXT Message-ID: <200310172137.QAA29782@choi.cs.uiuc.edu> Changes in directory llvm/projects/sample/autoconf: LICENSE.TXT added (r1.1) --- Log message: Adding license information for the sample project. --- Diffs of the changes: (+24 -0) Index: llvm/projects/sample/autoconf/LICENSE.TXT diff -c /dev/null llvm/projects/sample/autoconf/LICENSE.TXT:1.1 *** /dev/null Fri Oct 17 16:37:36 2003 --- llvm/projects/sample/autoconf/LICENSE.TXT Fri Oct 17 16:37:26 2003 *************** *** 0 **** --- 1,24 ---- + ------------------------------------------------------------------------------ + Autoconf Files + ------------------------------------------------------------------------------ + All autoconf files are licensed under the LLVM license with the following + additions: + + llvm/autoconf/install-sh: + This script is licensed under the LLVM license, with the following + additional copyrights and restrictions: + + Copyright 1991 by the Massachusetts Institute of Technology + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of M.I.T. not be used in advertising or + publicity pertaining to distribution of the software without specific, + written prior permission. M.I.T. makes no representations about the + suitability of this software for any purpose. It is provided "as is" + without express or implied warranty. + + Please see the source files for additional copyrights. + From gaeke at cs.uiuc.edu Fri Oct 17 16:48:01 2003 From: gaeke at cs.uiuc.edu (Brian Gaeke) Date: Fri Oct 17 16:48:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/X86TargetMachine.cpp Message-ID: <200310172147.QAA05275@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: X86TargetMachine.cpp updated: 1.31 -> 1.32 --- Log message: You can't just blat the address into memory, you have to blat its displacement. --- Diffs of the changes: (+7 -4) Index: llvm/lib/Target/X86/X86TargetMachine.cpp diff -u llvm/lib/Target/X86/X86TargetMachine.cpp:1.31 llvm/lib/Target/X86/X86TargetMachine.cpp:1.32 --- llvm/lib/Target/X86/X86TargetMachine.cpp:1.31 Fri Oct 17 13:27:46 2003 +++ llvm/lib/Target/X86/X86TargetMachine.cpp Fri Oct 17 16:47:25 2003 @@ -143,9 +143,12 @@ } bool X86TargetMachine::replaceMachineCodeForFunction (void *Old, void *New) { + // FIXME: This code could perhaps live in a more appropriate place. char *OldByte = (char *) Old; - *OldByte++ = 0xE9; // JMP - unsigned *OldWord = (unsigned *) OldByte; - *OldWord = (unsigned) New; - return false; + *OldByte++ = 0xE9; // Emit JMP opcode. + int32_t *OldWord = (int32_t *) OldByte; + int32_t NewAddr = (int32_t) New; + int32_t OldAddr = (int32_t) OldWord; + *OldWord = NewAddr - OldAddr - 4; // Emit PC-relative addr of New code. + return false; // success! } From criswell at cs.uiuc.edu Fri Oct 17 16:51:01 2003 From: criswell at cs.uiuc.edu (John Criswell) Date: Fri Oct 17 16:51:01 2003 Subject: [llvm-commits] CVS: llvm/docs/Projects.html Message-ID: <200310172150.QAA29848@choi.cs.uiuc.edu> Changes in directory llvm/docs: Projects.html updated: 1.5 -> 1.6 --- Log message: Added additional information about linking dynamic libraries. --- Diffs of the changes: (+15 -0) Index: llvm/docs/Projects.html diff -u llvm/docs/Projects.html:1.5 llvm/docs/Projects.html:1.6 --- llvm/docs/Projects.html:1.5 Thu Oct 16 15:01:04 2003 +++ llvm/docs/Projects.html Fri Oct 17 16:50:38 2003 @@ -275,6 +275,21 @@ For example, to link libsample.a, you would set USEDLIBS to sample.

      + Note that this works only for statically linked libraries. +

      + +

      LIBS +
      + To link dynamic libraries, add -l<library base name> to + the LIBS variable. The LLVM build system will look in the same places + for dynamic libraries as it does for static libraries. +

      + For example, to link libsample.so, you would have the + following line in your Makefile: +

      + + LIBS+=-lsample +

      Miscellaneous Variables

      From brukman at cs.uiuc.edu Fri Oct 17 17:01:08 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Fri Oct 17 17:01:08 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/ModuleProvider.cpp Message-ID: <200310172200.RAA05407@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: ModuleProvider.cpp updated: 1.4 -> 1.5 --- Log message: Chris says it's better to assert that TheModule is valid than silently return 0. --- Diffs of the changes: (+1 -2) Index: llvm/lib/VMCore/ModuleProvider.cpp diff -u llvm/lib/VMCore/ModuleProvider.cpp:1.4 llvm/lib/VMCore/ModuleProvider.cpp:1.5 --- llvm/lib/VMCore/ModuleProvider.cpp:1.4 Fri Oct 17 13:27:13 2003 +++ llvm/lib/VMCore/ModuleProvider.cpp Fri Oct 17 16:59:57 2003 @@ -20,8 +20,7 @@ /// materializeFunction - make sure the given function is fully read. /// Module* ModuleProvider::materializeModule() { - // FIXME: throw an exception instead? - if (!TheModule) return 0; + assert(TheModule && "Attempting to materialize an invalid module!"); for (Module::iterator i = TheModule->begin(), e = TheModule->end(); i != e; ++i) From brukman at cs.uiuc.edu Fri Oct 17 18:01:01 2003 From: brukman at cs.uiuc.edu (Misha Brukman) Date: Fri Oct 17 18:01:01 2003 Subject: [llvm-commits] CVS: llvm/docs/doxygen.cfg Message-ID: <200310172300.SAA25483@zion.cs.uiuc.edu> Changes in directory llvm/docs: doxygen.cfg updated: 1.5 -> 1.6 --- Log message: * Align comments into 80 columns * Stop using full pathnames (we don't know where the source could be) * Use only relative distance to the source, so a user can download the code and generate their own copy of the doxygen documentation easily * Since `docs' has moved one level up, all relative path names lost a `..' --- Diffs of the changes: (+17 -18) Index: llvm/docs/doxygen.cfg diff -u llvm/docs/doxygen.cfg:1.5 llvm/docs/doxygen.cfg:1.6 --- llvm/docs/doxygen.cfg:1.5 Thu Sep 26 11:45:59 2002 +++ llvm/docs/doxygen.cfg Fri Oct 17 18:00:03 2003 @@ -100,10 +100,10 @@ ALWAYS_DETAILED_SEC = NO -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all inherited -# members of a class in the documentation of that class as if those members were -# ordinary class members. Constructors, destructors and assignment operators of -# the base classes will not be shown. +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. INLINE_INHERITED_MEMB = NO @@ -111,15 +111,14 @@ # path before files name in the file list and in the header files. If set # to NO the shortest path that makes the file name unique will be used. -FULL_PATH_NAMES = YES +FULL_PATH_NAMES = NO # If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag # can be used to strip a user defined part of the path. Stripping is # only done if one of the specified strings matches the left-hand part of # the path. It is allowed to use relative paths in the argument list. -STRIP_FROM_PATH = /home/vadve/lattner/cvs/ - +STRIP_FROM_PATH = ../.. # The INTERNAL_DOCS tag determines if documentation # that is typed after a \internal command is included. If the tag is set @@ -297,12 +296,12 @@ # configuration options related to the input files #--------------------------------------------------------------------------- -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories with +# spaces. -INPUT = ../.. +INPUT = .. # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp @@ -323,7 +322,7 @@ # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. -EXCLUDE = ../../test ../../include/boost +EXCLUDE = ../test ../include/boost # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude @@ -697,7 +696,7 @@ # contain include files that are not input files but should be processed by # the preprocessor. -INCLUDE_PATH = ../../include +INCLUDE_PATH = ../include # You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard # patterns (like *.h and *.hpp) to filter out the header-files in the @@ -756,10 +755,10 @@ # Configuration options related to the dot tool #--------------------------------------------------------------------------- -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in Html, RTF and LaTeX) for classes with base or -# super classes. Setting the tag to NO turns the diagrams off. Note that this -# option is superceded by the HAVE_DOT option below. This is only a fallback. It is +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will generate a +# inheritance diagram (in Html, RTF and LaTeX) for classes with base or super +# classes. Setting the tag to NO turns the diagrams off. Note that this option +# is superceded by the HAVE_DOT option below. This is only a fallback. It is # recommended to install and use dot, since it yield more powerful graphs. CLASS_DIAGRAMS = YES From lattner at cs.uiuc.edu Fri Oct 17 18:04:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Oct 17 18:04:00 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/BugDriver.h Miscompilation.cpp Message-ID: <200310172303.SAA31191@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: BugDriver.h updated: 1.16 -> 1.17 Miscompilation.cpp updated: 1.16 -> 1.17 --- Log message: Be more helpful if a pass fails while chasing down a miscompilation --- Diffs of the changes: (+9 -2) Index: llvm/tools/bugpoint/BugDriver.h diff -u llvm/tools/bugpoint/BugDriver.h:1.16 llvm/tools/bugpoint/BugDriver.h:1.17 --- llvm/tools/bugpoint/BugDriver.h:1.16 Tue Oct 14 16:59:36 2003 +++ llvm/tools/bugpoint/BugDriver.h Fri Oct 17 18:03:16 2003 @@ -57,6 +57,9 @@ bool addSources(const std::vector &FileNames); template void addPasses(It I, It E) { PassesToRun.insert(PassesToRun.end(), I, E); } + void setPassesToRun(const std::vector &PTR) { + PassesToRun = PTR; + } /// run - The top level method that is invoked after all of the instance /// variables are set up from command line arguments. Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.16 llvm/tools/bugpoint/Miscompilation.cpp:1.17 --- llvm/tools/bugpoint/Miscompilation.cpp:1.16 Tue Oct 14 15:52:55 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Fri Oct 17 18:03:16 2003 @@ -57,8 +57,10 @@ // prefix passes, then discard the prefix passes. // if (BD.runPasses(Prefix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << BD.getToolName() << ": Error running this sequence of passes" + std::cerr << ": Error running this sequence of passes" << " on the input program!\n"; + BD.setPassesToRun(Prefix); + BD.EmitProgressBytecode("pass-error", false); exit(1); } @@ -88,8 +90,10 @@ Module *OriginalInput = BD.Program; BD.Program = PrefixOutput; if (BD.runPasses(Suffix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << BD.getToolName() << ": Error running this sequence of passes" + std::cerr << ": Error running this sequence of passes" << " on the input program!\n"; + BD.setPassesToRun(Prefix); + BD.EmitProgressBytecode("pass-error", false); exit(1); } From lattner at cs.uiuc.edu Fri Oct 17 18:08:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Oct 17 18:08:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/Miscompilation.cpp Message-ID: <200310172307.SAA01211@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: Miscompilation.cpp updated: 1.17 -> 1.18 --- Log message: More cleanups --- Diffs of the changes: (+7 -3) Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.17 llvm/tools/bugpoint/Miscompilation.cpp:1.18 --- llvm/tools/bugpoint/Miscompilation.cpp:1.17 Fri Oct 17 18:03:16 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Fri Oct 17 18:07:47 2003 @@ -31,8 +31,10 @@ std::string BytecodeResult; if (BD.runPasses(Suffix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << BD.getToolName() << ": Error running this sequence of passes" + std::cerr << ": Error running this sequence of passes" << " on the input program!\n"; + BD.setPassesToRun(Suffix); + BD.EmitProgressBytecode("pass-error", false); exit(1); } @@ -92,7 +94,7 @@ if (BD.runPasses(Suffix, BytecodeResult, false/*delete*/, true/*quiet*/)) { std::cerr << ": Error running this sequence of passes" << " on the input program!\n"; - BD.setPassesToRun(Prefix); + BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); exit(1); } @@ -205,8 +207,10 @@ std::string BytecodeResult; if (BD.runPasses(BD.PassesToRun, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << BD.getToolName() << ": Error running this sequence of passes" + std::cerr << ": Error running this sequence of passes" << " on the input program!\n"; + BD.setPassesToRun(Suffix); + BD.EmitProgressBytecode("pass-error", false); exit(1); } From lattner at cs.uiuc.edu Fri Oct 17 19:06:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Oct 17 19:06:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/Miscompilation.cpp Message-ID: <200310180005.TAA25468@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: Miscompilation.cpp updated: 1.18 -> 1.19 --- Log message: Another formatting fix --- Diffs of the changes: (+4 -4) Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.18 llvm/tools/bugpoint/Miscompilation.cpp:1.19 --- llvm/tools/bugpoint/Miscompilation.cpp:1.18 Fri Oct 17 18:07:47 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Fri Oct 17 19:05:05 2003 @@ -31,7 +31,7 @@ std::string BytecodeResult; if (BD.runPasses(Suffix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << ": Error running this sequence of passes" + std::cerr << " Error running this sequence of passes" << " on the input program!\n"; BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); @@ -59,7 +59,7 @@ // prefix passes, then discard the prefix passes. // if (BD.runPasses(Prefix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << ": Error running this sequence of passes" + std::cerr << " Error running this sequence of passes" << " on the input program!\n"; BD.setPassesToRun(Prefix); BD.EmitProgressBytecode("pass-error", false); @@ -92,7 +92,7 @@ Module *OriginalInput = BD.Program; BD.Program = PrefixOutput; if (BD.runPasses(Suffix, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << ": Error running this sequence of passes" + std::cerr << " Error running this sequence of passes" << " on the input program!\n"; BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); @@ -207,7 +207,7 @@ std::string BytecodeResult; if (BD.runPasses(BD.PassesToRun, BytecodeResult, false/*delete*/, true/*quiet*/)) { - std::cerr << ": Error running this sequence of passes" + std::cerr << " Error running this sequence of passes" << " on the input program!\n"; BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); From lattner at cs.uiuc.edu Fri Oct 17 19:15:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Fri Oct 17 19:15:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/Miscompilation.cpp Message-ID: <200310180014.TAA27942@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: Miscompilation.cpp updated: 1.19 -> 1.20 --- Log message: Fix bug in my checkin --- Diffs of the changes: (+0 -1) Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.19 llvm/tools/bugpoint/Miscompilation.cpp:1.20 --- llvm/tools/bugpoint/Miscompilation.cpp:1.19 Fri Oct 17 19:05:05 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Fri Oct 17 19:14:13 2003 @@ -209,7 +209,6 @@ true/*quiet*/)) { std::cerr << " Error running this sequence of passes" << " on the input program!\n"; - BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); exit(1); } From lattner at cs.uiuc.edu Sat Oct 18 00:52:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:52:01 2003 Subject: [llvm-commits] CVS: llvm/docs/LangRef.html Message-ID: <200310180551.AAA13732@zion.cs.uiuc.edu> Changes in directory llvm/docs: LangRef.html updated: 1.32 -> 1.33 --- Log message: Update for new varargs support --- Diffs of the changes: (+100 -64) Index: llvm/docs/LangRef.html diff -u llvm/docs/LangRef.html:1.32 llvm/docs/LangRef.html:1.33 --- llvm/docs/LangRef.html:1.32 Fri Oct 10 00:01:39 2003 +++ llvm/docs/LangRef.html Sat Oct 18 00:51:36 2003 @@ -72,7 +72,8 @@
    • 'phi' Instruction
    • 'cast .. to' Instruction
    • 'call' Instruction -
    • 'va_arg' Instruction +
    • 'vanext' Instruction +
    • 'vaarg' Instruction
    • Intrinsic Functions @@ -1710,44 +1711,87 @@
  • -


    'va_arg' Instruction

      +


    'vanext' Instruction


    'vaarg' Instruction

    @@ -1781,37 +1825,35 @@
      Variable argument support is defined in LLVM with the va_arg instruction and these three intrinsic -functions. These function correspond almost directly to the similarly named -macros defined in the <stdarg.h> header file.

      - -All of these functions operate on arguments that use a target-specific type -"va_list". The LLVM assembly language reference manual does not define -what this type is, so all transformations should be prepared to handle +href="#i_vanext">vanext instruction and these three intrinsic +functions. These functions are related to the similarly named macros defined in +the <stdarg.h> header file.

      + +All of these functions operate on arguments that use a target-specific value +type "va_list". The LLVM assembly language reference manual does not +define what this type is, so all transformations should be prepared to handle intrinsics with any type used.

      -This example shows how the va_arg instruction +This example shows how the vanext instruction and the variable argument handling intrinsic functions are used.

       int %test(int %X, ...) {
      -  ; Allocate two va_list items.  On this target, va_list is of type sbyte*
      -  %ap = alloca sbyte*
      -  %aq = alloca sbyte*
      -
         ; Initialize variable argument processing
      -  call void (sbyte**)* %llvm.va_start(sbyte** %ap)
      +  %ap = call sbyte*()* %llvm.va_start()
       
         ; Read a single integer argument
      -  %tmp = va_arg sbyte** %ap, int 
      +  %tmp = vaarg sbyte* %ap, int
       
      -  ; Demonstrate usage of llvm.va_copy and llvm_va_end
      -  %apv = load sbyte** %ap
      -  call void %llvm.va_copy(sbyte** %aq, sbyte* %apv)
      -  call void %llvm.va_end(sbyte** %aq)
      +  ; Advance to the next argument
      +  %ap2 = vanext sbyte* %ap, int
      +
      +  ; Demonstrate usage of llvm.va_copy and llvm.va_end
      +  %aq = call sbyte* (sbyte*)* %llvm.va_copy(sbyte* %ap2)
      +  call void %llvm.va_end(sbyte* %aq)
       
         ; Stop processing of arguments.
      -  call void %llvm.va_end(sbyte** %ap)
      +  call void %llvm.va_end(sbyte* %ap2)
         ret int %tmp
       }
       
      @@ -1821,28 +1863,25 @@
      Syntax:
      -  call void (va_list*)* %llvm.va_start(<va_list>* <arglist>)
      +  call va_list ()* %llvm.va_start()
       
      Overview:
      -The 'llvm.va_start' intrinsic initializes *<arglist> for -subsequent use by va_arg and llvm.va_end, and must be called before either are -invoked.

      - -

      Arguments:
      - -The argument is a pointer to a va_list element to initialize.

      +The 'llvm.va_start' intrinsic returns a new <arglist> +for subsequent use by the variable argument intrinsics.

      Semantics:
      The 'llvm.va_start' intrinsic works just like the va_start -macro available in C. In a target-dependent way, it initializes the -va_list element the argument points to, so that the next call to -va_arg will produce the first variable argument passed to the function. -Unlike the C va_start macro, this intrinsic does not need to know the -last argument of the function, the compiler can figure that out.

      +macro available in C. In a target-dependent way, it initializes and returns a +va_list element, so that the next vaarg will produce the first +variable argument passed to the function. Unlike the C va_start macro, +this intrinsic does not need to know the last argument of the function, the +compiler can figure that out.

      + +Note that this intrinsic function is only legal to be called from within the +body of a variable argument function.

      @@ -1850,25 +1889,25 @@

      Syntax:
      -  call void (va_list*)* %llvm.va_end(<va_list>* <arglist>)
      +  call void (va_list)* %llvm.va_end(va_list <arglist>)
       
      Overview:
      -The 'llvm.va_end' intrinsic destroys *<arglist> which -has been initialized previously with llvm.va_begin.

      +The 'llvm.va_end' intrinsic destroys <arglist> which has +been initialized previously with llvm.va_begin or llvm.va_copy.

      Arguments:
      -The argument is a pointer to a va_list element to destroy.

      +The argument is a va_list to destroy.

      Semantics:
      The 'llvm.va_end' intrinsic works just like the va_end macro -available in C. In a target-dependent way, it destroys the va_list -that the argument points to. Calls to llvm.va_start and va_list. +Calls to llvm.va_start and llvm.va_copy must be matched exactly with calls to llvm.va_end.

      @@ -1879,8 +1918,7 @@

      Syntax:
      -  call void (va_list*, va_list)* %va_copy(<va_list>* <destarglist>,
      -                                          <va_list> <srcarglist>)
      +  call va_list (va_list)* %llvm.va_copy(va_list <destarglist>)
       
      Overview:
      @@ -1890,15 +1928,13 @@
      Arguments:
      -The first argument is a pointer to a va_list element to initialize. -The second argument is a va_list element to copy from.

      - +The argument is the va_list to copy.

      Semantics:
      The 'llvm.va_copy' intrinsic works just like the va_copy macro available in C. In a target-dependent way, it copies the source -va_list element into the destination list. This intrinsic is necessary +va_list element into the returned list. This intrinsic is necessary because the llvm.va_begin intrinsic may be arbitrarily complex and require memory allocation, for example.

      @@ -1913,7 +1949,7 @@

      Chris Lattner
      -Last modified: Thu Oct 9 23:58:41 CDT 2003 +Last modified: Fri Oct 17 18:28:10 CDT 2003 From lattner at cs.uiuc.edu Sat Oct 18 00:54:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:54:01 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Instruction.def Intrinsics.h iOther.h Message-ID: <200310180553.AAA13781@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm: Instruction.def updated: 1.8 -> 1.9 Intrinsics.h updated: 1.10 -> 1.11 iOther.h updated: 1.37 -> 1.38 --- Log message: New revised variable argument handling support --- Diffs of the changes: (+54 -20) Index: llvm/include/llvm/Instruction.def diff -u llvm/include/llvm/Instruction.def:1.8 llvm/include/llvm/Instruction.def:1.9 --- llvm/include/llvm/Instruction.def:1.8 Tue Sep 30 13:37:37 2003 +++ llvm/include/llvm/Instruction.def Sat Oct 18 00:52:51 2003 @@ -120,11 +120,12 @@ HANDLE_OTHER_INST(29, Shl , ShiftInst ) // Shift operations HANDLE_OTHER_INST(30, Shr , ShiftInst ) -HANDLE_OTHER_INST(31, VarArg , VarArgInst ) // va_arg instruction +HANDLE_OTHER_INST(31, VANext , VANextInst ) // vanext instruction +HANDLE_OTHER_INST(32, VAArg , VAArgInst ) // vaarg instruction -HANDLE_OTHER_INST(32, UserOp1, Instruction) // May be used internally in a pass -HANDLE_OTHER_INST(33, UserOp2, Instruction) - LAST_OTHER_INST(33) +HANDLE_OTHER_INST(33, UserOp1, Instruction) // May be used internally in a pass +HANDLE_OTHER_INST(34, UserOp2, Instruction) + LAST_OTHER_INST(34) #undef FIRST_TERM_INST #undef HANDLE_TERM_INST Index: llvm/include/llvm/Intrinsics.h diff -u llvm/include/llvm/Intrinsics.h:1.10 llvm/include/llvm/Intrinsics.h:1.11 --- llvm/include/llvm/Intrinsics.h:1.10 Mon Sep 8 14:44:47 2003 +++ llvm/include/llvm/Intrinsics.h Sat Oct 18 00:52:51 2003 @@ -18,9 +18,9 @@ not_intrinsic = 0, // Must be zero // Varargs handling intrinsics... - va_start, // Used to represent a va_start call in C - va_end, // Used to represent a va_end call in C - va_copy, // Used to represent a va_copy call in C + va_start, // Used to implement the va_start macro in C + va_end, // Used to implement the va_end macro in C + va_copy, // Used to implement the va_copy macro in C // Setjmp/Longjmp intrinsics... setjmp, // Used to represent a setjmp call in C Index: llvm/include/llvm/iOther.h diff -u llvm/include/llvm/iOther.h:1.37 llvm/include/llvm/iOther.h:1.38 --- llvm/include/llvm/iOther.h:1.37 Tue Sep 30 13:37:37 2003 +++ llvm/include/llvm/iOther.h Sat Oct 18 00:52:51 2003 @@ -123,34 +123,67 @@ //===----------------------------------------------------------------------===// -// VarArgInst Class +// VANextInst Class //===----------------------------------------------------------------------===// -/// VarArgInst - This class represents the va_arg llvm instruction, which reads -/// an argument of the destination type from the va_list operand pointed to by -/// the only operand. +/// VANextInst - This class represents the va_next llvm instruction, which +/// advances a vararg list passed an argument of the specified type, returning +/// the resultant list. /// -class VarArgInst : public Instruction { - VarArgInst(const VarArgInst &VAI) : Instruction(VAI.getType(), VarArg) { +class VANextInst : public Instruction { + PATypeHolder ArgTy; + VANextInst(const VANextInst &VAN) + : Instruction(VAN.getType(), VANext), ArgTy(VAN.getArgType()) { Operands.reserve(1); - Operands.push_back(Use(VAI.Operands[0], this)); + Operands.push_back(Use(VAN.Operands[0], this)); } public: - VarArgInst(Value *S, const Type *Ty, const std::string &Name = "", + VANextInst(Value *List, const Type *Ty, const std::string &Name = "", Instruction *InsertBefore = 0) - : Instruction(Ty, VarArg, Name, InsertBefore) { + : Instruction(List->getType(), VANext, Name, InsertBefore), ArgTy(Ty) { Operands.reserve(1); - Operands.push_back(Use(S, this)); + Operands.push_back(Use(List, this)); } - virtual Instruction *clone() const { return new VarArgInst(*this); } + const Type *getArgType() const { return ArgTy; } + + virtual Instruction *clone() const { return new VANextInst(*this); } + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const VANextInst *) { return true; } + static inline bool classof(const Instruction *I) { + return I->getOpcode() == VANext; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } +}; + +/// VAArgInst - This class represents the va_arg llvm instruction, which returns +/// an argument of the specified type given a va_list. +/// +class VAArgInst : public Instruction { + VAArgInst(const VAArgInst &VAA) + : Instruction(VAA.getType(), VAArg) { + Operands.reserve(1); + Operands.push_back(Use(VAA.Operands[0], this)); + } +public: + VAArgInst(Value *List, const Type *Ty, const std::string &Name = "", + Instruction *InsertBefore = 0) + : Instruction(Ty, VAArg, Name, InsertBefore) { + Operands.reserve(1); + Operands.push_back(Use(List, this)); + } + + virtual Instruction *clone() const { return new VAArgInst(*this); } bool mayWriteToMemory() const { return true; } // Methods for support type inquiry through isa, cast, and dyn_cast: - static inline bool classof(const VarArgInst *) { return true; } + static inline bool classof(const VAArgInst *) { return true; } static inline bool classof(const Instruction *I) { - return I->getOpcode() == VarArg; + return I->getOpcode() == VAArg; } static inline bool classof(const Value *V) { return isa(V) && classof(cast(V)); From lattner at cs.uiuc.edu Sat Oct 18 00:54:17 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:54:17 2003 Subject: [llvm-commits] CVS: llvm/lib/AsmParser/Lexer.l llvmAsmParser.y Message-ID: <200310180553.AAA13770@zion.cs.uiuc.edu> Changes in directory llvm/lib/AsmParser: Lexer.l updated: 1.40 -> 1.41 llvmAsmParser.y updated: 1.133 -> 1.134 --- Log message: New revised variable argument handling support --- Diffs of the changes: (+108 -5) Index: llvm/lib/AsmParser/Lexer.l diff -u llvm/lib/AsmParser/Lexer.l:1.40 llvm/lib/AsmParser/Lexer.l:1.41 --- llvm/lib/AsmParser/Lexer.l:1.40 Fri Oct 10 14:12:08 2003 +++ llvm/lib/AsmParser/Lexer.l Sat Oct 18 00:53:13 2003 @@ -129,7 +129,7 @@ Label [-a-zA-Z$._0-9]+: /* Quoted names can contain any character except " and \ */ -StringConstant \"[^\"]+\" +StringConstant \"[^\"]*\" /* [PN]Integer: match positive and negative literal integer values that @@ -224,7 +224,9 @@ cast { RET_TOK(OtherOpVal, Cast, CAST); } shl { RET_TOK(OtherOpVal, Shl, SHL); } shr { RET_TOK(OtherOpVal, Shr, SHR); } -va_arg { RET_TOK(OtherOpVal, VarArg, VA_ARG); } +va_arg { return VA_ARG; /* FIXME: OBSOLETE */} +vanext { RET_TOK(OtherOpVal, VANext, VANEXT); } +vaarg { RET_TOK(OtherOpVal, VAArg , VAARG); } ret { RET_TOK(TermOpVal, Ret, RET); } br { RET_TOK(TermOpVal, Br, BR); } Index: llvm/lib/AsmParser/llvmAsmParser.y diff -u llvm/lib/AsmParser/llvmAsmParser.y:1.133 llvm/lib/AsmParser/llvmAsmParser.y:1.134 --- llvm/lib/AsmParser/llvmAsmParser.y:1.133 Fri Oct 17 00:11:44 2003 +++ llvm/lib/AsmParser/llvmAsmParser.y Sat Oct 18 00:53:13 2003 @@ -37,6 +37,14 @@ #define YYERROR_VERBOSE 1 +// HACK ALERT: This variable is used to implement the automatic conversion of +// variable argument instructions from their old to new forms. When this +// compatiblity "Feature" is removed, this should be too. +// +static BasicBlock *CurBB; +static bool ObsoleteVarArgs; + + // This contains info used when building the body of a function. It is // destroyed when the function is completed. // @@ -595,11 +603,76 @@ llvmAsmin = F; CurFilename = Filename; llvmAsmlineno = 1; // Reset the current line number... + ObsoleteVarArgs = false; // Allocate a new module to read CurModule.CurrentModule = new Module(Filename); yyparse(); // Parse the file. + Module *Result = ParserResult; + + // Check to see if they called va_start but not va_arg.. + if (!ObsoleteVarArgs) + if (Function *F = Result->getNamedFunction("llvm.va_start")) + if (F->asize() == 1) { + std::cerr << "WARNING: this file uses obsolete features. " + << "Assemble and disassemble to update it.\n"; + ObsoleteVarArgs = true; + } + + + if (ObsoleteVarArgs) { + // If the user is making use of obsolete varargs intrinsics, adjust them for + // the user. + if (Function *F = Result->getNamedFunction("llvm.va_start")) { + assert(F->asize() == 1 && "Obsolete va_start takes 1 argument!"); + + const Type *RetTy = F->getFunctionType()->getParamType(0); + RetTy = cast(RetTy)->getElementType(); + Function *NF = Result->getOrInsertFunction("llvm.va_start", RetTy, 0); + + while (!F->use_empty()) { + CallInst *CI = cast(F->use_back()); + Value *V = new CallInst(NF, "", CI); + new StoreInst(V, CI->getOperand(1), CI); + CI->getParent()->getInstList().erase(CI); + } + Result->getFunctionList().erase(F); + } + + if (Function *F = Result->getNamedFunction("llvm.va_end")) { + assert(F->asize() == 1 && "Obsolete va_end takes 1 argument!"); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + ArgTy = cast(ArgTy)->getElementType(); + Function *NF = Result->getOrInsertFunction("llvm.va_end", Type::VoidTy, + ArgTy, 0); + + while (!F->use_empty()) { + CallInst *CI = cast(F->use_back()); + Value *V = new LoadInst(CI->getOperand(1), "", CI); + new CallInst(NF, V, "", CI); + CI->getParent()->getInstList().erase(CI); + } + Result->getFunctionList().erase(F); + } + + if (Function *F = Result->getNamedFunction("llvm.va_copy")) { + assert(F->asize() == 2 && "Obsolete va_copy takes 2 argument!"); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + ArgTy = cast(ArgTy)->getElementType(); + Function *NF = Result->getOrInsertFunction("llvm.va_copy", ArgTy, + ArgTy, 0); + + while (!F->use_empty()) { + CallInst *CI = cast(F->use_back()); + Value *V = new CallInst(NF, CI->getOperand(2), "", CI); + new StoreInst(V, CI->getOperand(1), CI); + CI->getParent()->getInstList().erase(CI); + } + Result->getFunctionList().erase(F); + } + } + llvmAsmin = stdin; // F is about to go away, don't use it anymore... ParserResult = 0; @@ -712,7 +785,8 @@ // Other Operators %type ShiftOps -%token PHI CALL CAST SHL SHR VA_ARG +%token PHI CALL CAST SHL SHR VAARG VANEXT +%token VA_ARG // FIXME: OBSOLETE %start Module %% @@ -1452,7 +1526,7 @@ $$ = $1; } | /* empty */ { - $$ = new BasicBlock(); + $$ = CurBB = new BasicBlock(); }; BBTerminatorInst : RET ResolvedVal { // Return with a result... @@ -1643,7 +1717,34 @@ delete $4; } | VA_ARG ResolvedVal ',' Types { - $$ = new VarArgInst($2, *$4); + // FIXME: This is emulation code for an obsolete syntax. This should be + // removed at some point. + if (!ObsoleteVarArgs) { + std::cerr << "WARNING: this file uses obsolete features. " + << "Assemble and disassemble to update it.\n"; + ObsoleteVarArgs = true; + } + + // First, load the valist... + Instruction *CurVAList = new LoadInst($2, ""); + CurBB->getInstList().push_back(CurVAList); + + // Emit the vaarg instruction. + $$ = new VAArgInst(CurVAList, *$4); + + // Now we must advance the pointer and update it in memory. + Instruction *TheVANext = new VANextInst(CurVAList, *$4); + CurBB->getInstList().push_back(TheVANext); + + CurBB->getInstList().push_back(new StoreInst(TheVANext, $2)); + delete $4; + } + | VAARG ResolvedVal ',' Types { + $$ = new VAArgInst($2, *$4); + delete $4; + } + | VANEXT ResolvedVal ',' Types { + $$ = new VANextInst($2, *$4); delete $4; } | PHI PHIList { From lattner at cs.uiuc.edu Sat Oct 18 00:54:33 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:54:33 2003 Subject: [llvm-commits] CVS: llvm/include/llvm/Support/InstVisitor.h Message-ID: <200310180553.AAA13754@zion.cs.uiuc.edu> Changes in directory llvm/include/llvm/Support: InstVisitor.h updated: 1.22 -> 1.23 --- Log message: New revised variable argument handling support --- Diffs of the changes: (+5 -3) Index: llvm/include/llvm/Support/InstVisitor.h diff -u llvm/include/llvm/Support/InstVisitor.h:1.22 llvm/include/llvm/Support/InstVisitor.h:1.23 --- llvm/include/llvm/Support/InstVisitor.h:1.22 Tue Sep 30 13:37:46 2003 +++ llvm/include/llvm/Support/InstVisitor.h Sat Oct 18 00:53:01 2003 @@ -136,7 +136,7 @@ // #define HANDLE_INST(NUM, OPCODE, CLASS) \ RetTy visit##OPCODE(CLASS &I) { DELEGATE(CLASS); } -#define HANDLE_OTHER_INST(NUM, OPCODE, CLASS) // Ignore "other" instructions +#define HANDLE_OTHER_INST(NUM, OPCODE, CLASS) // Handle "other" insts specially #include "llvm/Instruction.def" // Implement all "other" instructions, except for PHINode @@ -144,7 +144,8 @@ RetTy visitCall(CallInst &I) { DELEGATE(CallInst); } RetTy visitShr(ShiftInst &I) { DELEGATE(ShiftInst); } RetTy visitShl(ShiftInst &I) { DELEGATE(ShiftInst); } - RetTy visitVarArg(VarArgInst &I) { DELEGATE(VarArgInst); } + RetTy visitVANext(VANextInst &I) { DELEGATE(VANextInst); } + RetTy visitVAArg (VAArgInst &I) { DELEGATE(VAArgInst); } RetTy visitUserOp1(Instruction &I) { DELEGATE(Instruction); } RetTy visitUserOp2(Instruction &I) { DELEGATE(Instruction); } @@ -168,7 +169,8 @@ RetTy visitCastInst(CastInst &I) { DELEGATE(Instruction); } RetTy visitCallInst(CallInst &I) { DELEGATE(Instruction); } RetTy visitShiftInst(ShiftInst &I) { DELEGATE(Instruction); } - RetTy visitVarArgInst(VarArgInst &I) { DELEGATE(Instruction); } + RetTy visitVANextInst(VANextInst &I) { DELEGATE(Instruction); } + RetTy visitVAArgInst(VAArgInst &I) { DELEGATE(Instruction); } // Next level propagators... if the user does not overload a specific // instruction type, they can overload one of these to get the whole class From lattner at cs.uiuc.edu Sat Oct 18 00:55:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:55:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/ConstantReader.cpp InstructionReader.cpp Reader.cpp ReaderInternals.h ReaderWrappers.cpp Message-ID: <200310180554.AAA13804@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: ConstantReader.cpp updated: 1.58 -> 1.59 InstructionReader.cpp updated: 1.59 -> 1.60 Reader.cpp updated: 1.83 -> 1.84 ReaderInternals.h updated: 1.59 -> 1.60 ReaderWrappers.cpp updated: 1.14 -> 1.15 --- Log message: * New revised variable argument handling support * More dense bytecode encoding for varargs calls (like printf) * Eliminated the extremely old bytecode format. rev #0 is now 1.0 --- Diffs of the changes: (+290 -149) Index: llvm/lib/Bytecode/Reader/ConstantReader.cpp diff -u llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.58 llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.59 --- llvm/lib/Bytecode/Reader/ConstantReader.cpp:1.58 Mon Oct 13 09:34:59 2003 +++ llvm/lib/Bytecode/Reader/ConstantReader.cpp Sat Oct 18 00:54:18 2003 @@ -258,64 +258,47 @@ return ConstantStruct::get(ST, Elements); } - case Type::PointerTyID: { + case Type::PointerTyID: { // ConstantPointerRef value... const PointerType *PT = cast(Ty); - unsigned SubClass; - if (HasImplicitZeroInitializer) - SubClass = 1; - else - if (read_vbr(Buf, EndBuf, SubClass)) throw Error_readvbr; - - switch (SubClass) { - case 0: // ConstantPointerNull value... - return ConstantPointerNull::get(PT); - - case 1: { // ConstantPointerRef value... - unsigned Slot; - if (read_vbr(Buf, EndBuf, Slot)) throw Error_readvbr; - BCR_TRACE(4, "CPR: Type: '" << Ty << "' slot: " << Slot << "\n"); - - // Check to see if we have already read this global variable... - Value *Val = getValue(PT, Slot, false); - GlobalValue *GV; - if (Val) { - if (!(GV = dyn_cast(Val))) - throw std::string("Value of ConstantPointerRef not in ValueTable!"); - BCR_TRACE(5, "Value Found in ValueTable!\n"); - } else if (RevisionNum > 0) { - // Revision #0 could have forward references to globals that were weird. - // We got rid of this in subsequent revs. - throw std::string("Forward references to globals not allowed."); - } else { // Nope... find or create a forward ref. for it - GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PT, Slot)); - - if (I != GlobalRefs.end()) { - BCR_TRACE(5, "Previous forward ref found!\n"); - GV = cast(I->second); - } else { - BCR_TRACE(5, "Creating new forward ref to a global variable!\n"); - - // Create a placeholder for the global variable reference... - GlobalVariable *GVar = - new GlobalVariable(PT->getElementType(), false, - GlobalValue::InternalLinkage); - - // Keep track of the fact that we have a forward ref to recycle it - GlobalRefs.insert(std::make_pair(std::make_pair(PT, Slot), GVar)); - - // Must temporarily push this value into the module table... - TheModule->getGlobalList().push_back(GVar); - GV = GVar; - } + unsigned Slot; + if (read_vbr(Buf, EndBuf, Slot)) throw Error_readvbr; + BCR_TRACE(4, "CPR: Type: '" << Ty << "' slot: " << Slot << "\n"); + + // Check to see if we have already read this global variable... + Value *Val = getValue(PT, Slot, false); + GlobalValue *GV; + if (Val) { + if (!(GV = dyn_cast(Val))) + throw std::string("Value of ConstantPointerRef not in ValueTable!"); + BCR_TRACE(5, "Value Found in ValueTable!\n"); + } else if (RevisionNum > 0) { + // Revision #0 could have forward references to globals that were weird. + // We got rid of this in subsequent revs. + throw std::string("Forward references to globals not allowed."); + } else { // Nope... find or create a forward ref. for it + GlobalRefsType::iterator I = GlobalRefs.find(std::make_pair(PT, Slot)); + + if (I != GlobalRefs.end()) { + BCR_TRACE(5, "Previous forward ref found!\n"); + GV = cast(I->second); + } else { + BCR_TRACE(5, "Creating new forward ref to a global variable!\n"); + + // Create a placeholder for the global variable reference... + GlobalVariable *GVar = + new GlobalVariable(PT->getElementType(), false, + GlobalValue::InternalLinkage); + + // Keep track of the fact that we have a forward ref to recycle it + GlobalRefs.insert(std::make_pair(std::make_pair(PT, Slot), GVar)); + + // Must temporarily push this value into the module table... + TheModule->getGlobalList().push_back(GVar); + GV = GVar; } - - return ConstantPointerRef::get(GV); } - default: - BCR_TRACE(5, "UNKNOWN Pointer Constant Type!\n"); - throw std::string("Unknown pointer constant type."); - } + return ConstantPointerRef::get(GV); } default: Index: llvm/lib/Bytecode/Reader/InstructionReader.cpp diff -u llvm/lib/Bytecode/Reader/InstructionReader.cpp:1.59 llvm/lib/Bytecode/Reader/InstructionReader.cpp:1.60 --- llvm/lib/Bytecode/Reader/InstructionReader.cpp:1.59 Thu Oct 9 17:46:58 2003 +++ llvm/lib/Bytecode/Reader/InstructionReader.cpp Sat Oct 18 00:54:18 2003 @@ -13,6 +13,7 @@ #include "llvm/iMemory.h" #include "llvm/iPHINode.h" #include "llvm/iOther.h" +#include "llvm/Module.h" namespace { struct RawInst { // The raw fields out of the bytecode stream... @@ -102,24 +103,61 @@ } -Instruction *BytecodeParser::ParseInstruction(const unsigned char *&Buf, - const unsigned char *EndBuf, - std::vector &Args) { +void BytecodeParser::ParseInstruction(const unsigned char *&Buf, + const unsigned char *EndBuf, + std::vector &Args, + BasicBlock *BB) { Args.clear(); RawInst RI(Buf, EndBuf, Args); const Type *InstTy = getType(RI.Type); + Instruction *Result = 0; if (RI.Opcode >= Instruction::BinaryOpsBegin && RI.Opcode < Instruction::BinaryOpsEnd && Args.size() == 2) - return BinaryOperator::create((Instruction::BinaryOps)RI.Opcode, - getValue(RI.Type, Args[0]), - getValue(RI.Type, Args[1])); + Result = BinaryOperator::create((Instruction::BinaryOps)RI.Opcode, + getValue(RI.Type, Args[0]), + getValue(RI.Type, Args[1])); switch (RI.Opcode) { - case Instruction::VarArg: - return new VarArgInst(getValue(RI.Type, Args[0]), getType(Args[1])); + default: + if (Result == 0) throw std::string("Illegal instruction read!"); + break; + case Instruction::VAArg: + Result = new VAArgInst(getValue(RI.Type, Args[0]), getType(Args[1])); + break; + case Instruction::VANext: + if (!hasOldStyleVarargs) { + Result = new VANextInst(getValue(RI.Type, Args[0]), getType(Args[1])); + } else { + // In the old-style varargs scheme, this was the "va_arg" instruction. + // Emit emulation code now. + if (!usesOldStyleVarargs) { + usesOldStyleVarargs = true; + std::cerr << "WARNING: this bytecode file uses obsolete features. " + << "Disassemble and assemble to update it.\n"; + } + + Value *VAListPtr = getValue(RI.Type, Args[0]); + const Type *ArgTy = getType(Args[1]); + + // First, load the valist... + Instruction *CurVAList = new LoadInst(VAListPtr, ""); + BB->getInstList().push_back(CurVAList); + + // Construct the vaarg + Result = new VAArgInst(CurVAList, ArgTy); + + // Now we must advance the pointer and update it in memory. + Instruction *TheVANext = new VANextInst(CurVAList, ArgTy); + BB->getInstList().push_back(TheVANext); + + BB->getInstList().push_back(new StoreInst(TheVANext, VAListPtr)); + } + + break; case Instruction::Cast: - return new CastInst(getValue(RI.Type, Args[0]), getType(Args[1])); + Result = new CastInst(getValue(RI.Type, Args[0]), getType(Args[1])); + break; case Instruction::PHINode: { if (Args.size() == 0 || (Args.size() & 1)) throw std::string("Invalid phi node encountered!\n"); @@ -128,29 +166,34 @@ PN->op_reserve(Args.size()); for (unsigned i = 0, e = Args.size(); i != e; i += 2) PN->addIncoming(getValue(RI.Type, Args[i]), getBasicBlock(Args[i+1])); - return PN; + Result = PN; + break; } case Instruction::Shl: case Instruction::Shr: - return new ShiftInst((Instruction::OtherOps)RI.Opcode, - getValue(RI.Type, Args[0]), - getValue(Type::UByteTyID, Args[1])); + Result = new ShiftInst((Instruction::OtherOps)RI.Opcode, + getValue(RI.Type, Args[0]), + getValue(Type::UByteTyID, Args[1])); + break; case Instruction::Ret: if (Args.size() == 0) - return new ReturnInst(); + Result = new ReturnInst(); else if (Args.size() == 1) - return new ReturnInst(getValue(RI.Type, Args[0])); + Result = new ReturnInst(getValue(RI.Type, Args[0])); + else + throw std::string("Unrecognized instruction!"); break; case Instruction::Br: if (Args.size() == 1) - return new BranchInst(getBasicBlock(Args[0])); + Result = new BranchInst(getBasicBlock(Args[0])); else if (Args.size() == 3) - return new BranchInst(getBasicBlock(Args[0]), getBasicBlock(Args[1]), - getValue(Type::BoolTyID , Args[2])); - throw std::string("Invalid number of operands for a 'br' instruction!"); - + Result = new BranchInst(getBasicBlock(Args[0]), getBasicBlock(Args[1]), + getValue(Type::BoolTyID , Args[2])); + else + throw std::string("Invalid number of operands for a 'br' instruction!"); + break; case Instruction::Switch: { if (Args.size() & 1) throw std::string("Switch statement with odd number of arguments!"); @@ -160,7 +203,8 @@ for (unsigned i = 2, e = Args.size(); i != e; i += 2) I->addCase(cast(getValue(RI.Type, Args[i])), getBasicBlock(Args[i+1])); - return I; + Result = I; + break; } case Instruction::Call: { @@ -187,16 +231,31 @@ } if (It != PL.end()) throw std::string("Invalid call instruction!"); } else { - // FIXME: Args[1] is currently just a dummy padding field! + Args.erase(Args.begin(), Args.begin()+1+hasVarArgCallPadding); - if (Args.size() & 1) // Must be pairs of type/value - throw std::string("Invalid call instruction!"); + unsigned FirstVariableOperand; + if (!hasVarArgCallPadding) { + if (Args.size() < FTy->getNumParams()) + throw std::string("Call instruction missing operands!"); + + // Read all of the fixed arguments + for (unsigned i = 0, e = FTy->getNumParams(); i != e; ++i) + Params.push_back(getValue(FTy->getParamType(i), Args[i])); + + FirstVariableOperand = FTy->getNumParams(); + } else { + FirstVariableOperand = 0; + } - for (unsigned i = 2, e = Args.size(); i != e; i += 2) + if ((Args.size()-FirstVariableOperand) & 1) // Must be pairs of type/value + throw std::string("Invalid call instruction!"); + + for (unsigned i = FirstVariableOperand, e = Args.size(); i != e; i += 2) Params.push_back(getValue(Args[i], Args[i+1])); } - return new CallInst(F, Params); + Result = new CallInst(F, Params); + break; } case Instruction::Invoke: { if (Args.size() < 3) throw std::string("Invalid invoke instruction!"); @@ -224,46 +283,60 @@ } if (It != PL.end()) throw std::string("Invalid invoke instruction!"); } else { - // FIXME: Args[1] is a dummy padding field + Args.erase(Args.begin(), Args.begin()+1+hasVarArgCallPadding); - if (Args.size() < 6) throw std::string("Invalid invoke instruction!"); - if (Args[2] != Type::LabelTyID || Args[4] != Type::LabelTyID) - throw std::string("Invalid invoke instruction!"); + unsigned FirstVariableArgument; + if (!hasVarArgCallPadding) { + Normal = getBasicBlock(Args[0]); + Except = getBasicBlock(Args[1]); + + FirstVariableArgument = FTy->getNumParams()+2; + for (unsigned i = 2; i != FirstVariableArgument; ++i) + Params.push_back(getValue(FTy->getParamType(i-2), Args[i])); - Normal = getBasicBlock(Args[3]); - Except = getBasicBlock(Args[5]); + } else { + if (Args.size() < 4) throw std::string("Invalid invoke instruction!"); + if (Args[0] != Type::LabelTyID || Args[2] != Type::LabelTyID) + throw std::string("Invalid invoke instruction!"); + Normal = getBasicBlock(Args[1]); + Except = getBasicBlock(Args[3]); - if (Args.size() & 1) // Must be pairs of type/value + FirstVariableArgument = 4; + } + + if (Args.size()-FirstVariableArgument & 1) // Must be pairs of type/value throw std::string("Invalid invoke instruction!"); - for (unsigned i = 6; i < Args.size(); i += 2) + for (unsigned i = FirstVariableArgument; i < Args.size(); i += 2) Params.push_back(getValue(Args[i], Args[i+1])); } - return new InvokeInst(F, Normal, Except, Params); + Result = new InvokeInst(F, Normal, Except, Params); + break; } case Instruction::Malloc: if (Args.size() > 2) throw std::string("Invalid malloc instruction!"); if (!isa(InstTy)) throw std::string("Invalid malloc instruction!"); - return new MallocInst(cast(InstTy)->getElementType(), - Args.size() ? getValue(Type::UIntTyID, - Args[0]) : 0); + Result = new MallocInst(cast(InstTy)->getElementType(), + Args.size() ? getValue(Type::UIntTyID, + Args[0]) : 0); + break; case Instruction::Alloca: if (Args.size() > 2) throw std::string("Invalid alloca instruction!"); if (!isa(InstTy)) throw std::string("Invalid alloca instruction!"); - return new AllocaInst(cast(InstTy)->getElementType(), - Args.size() ? getValue(Type::UIntTyID, - Args[0]) : 0); + Result = new AllocaInst(cast(InstTy)->getElementType(), + Args.size() ? getValue(Type::UIntTyID, Args[0]) :0); + break; case Instruction::Free: if (!isa(InstTy)) throw std::string("Invalid free instruction!"); - return new FreeInst(getValue(RI.Type, Args[0])); - + Result = new FreeInst(getValue(RI.Type, Args[0])); + break; case Instruction::GetElementPtr: { if (Args.size() == 0 || !isa(InstTy)) throw std::string("Invalid getelementptr instruction!"); @@ -278,14 +351,16 @@ NextTy = GetElementPtrInst::getIndexedType(InstTy, Idx, true); } - return new GetElementPtrInst(getValue(RI.Type, Args[0]), Idx); + Result = new GetElementPtrInst(getValue(RI.Type, Args[0]), Idx); + break; } case 62: // volatile load case Instruction::Load: if (Args.size() != 1 || !isa(InstTy)) throw std::string("Invalid load instruction!"); - return new LoadInst(getValue(RI.Type, Args[0]), "", RI.Opcode == 62); + Result = new LoadInst(getValue(RI.Type, Args[0]), "", RI.Opcode == 62); + break; case 63: // volatile store case Instruction::Store: { @@ -294,14 +369,16 @@ Value *Ptr = getValue(RI.Type, Args[1]); const Type *ValTy = cast(Ptr->getType())->getElementType(); - return new StoreInst(getValue(ValTy, Args[0]), Ptr, RI.Opcode == 63); + Result = new StoreInst(getValue(ValTy, Args[0]), Ptr, RI.Opcode == 63); + break; } case Instruction::Unwind: if (Args.size() != 0) throw std::string("Invalid unwind instruction!"); - return new UnwindInst(); + Result = new UnwindInst(); + break; } // end switch(RI.Opcode) - std::cerr << "Unrecognized instruction! " << RI.Opcode - << " ADDR = 0x" << (void*)Buf << "\n"; - throw std::string("Unrecognized instruction!"); + insertValue(Result, Values); + BB->getInstList().push_back(Result); + BCR_TRACE(4, *Result); } Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.83 llvm/lib/Bytecode/Reader/Reader.cpp:1.84 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.83 Thu Oct 16 13:28:47 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Sat Oct 18 00:54:18 2003 @@ -80,8 +80,7 @@ unsigned BytecodeParser::insertValue(Value *Val, unsigned type, ValueTable &ValueTab) { - assert((!HasImplicitZeroInitializer || !isa(Val) || - Val->getType()->isPrimitiveType() || + assert((!isa(Val) || Val->getType()->isPrimitiveType() || !cast(Val)->isNullValue()) && "Cannot read null values from bytecode!"); assert(type != Type::TypeTyID && "Types should never be insertValue'd!"); @@ -97,9 +96,7 @@ // << "] = " << Val << "\n"; ValueTab[type]->push_back(Val); - bool HasOffset = HasImplicitZeroInitializer && - !Val->getType()->isPrimitiveType(); - + bool HasOffset = !Val->getType()->isPrimitiveType(); return ValueTab[type]->size()-1 + HasOffset; } @@ -113,7 +110,7 @@ assert(type != Type::LabelTyID && "getValue() cannot get blocks!"); unsigned Num = oNum; - if (HasImplicitZeroInitializer && type >= FirstDerivedTyID) { + if (type >= FirstDerivedTyID) { if (Num == 0) return Constant::getNullValue(getType(type)); --Num; @@ -203,13 +200,9 @@ else BB = ParsedBasicBlocks[BlockNo]; - while (Buf < EndBuf) { - std::vector Args; - Instruction *Inst = ParseInstruction(Buf, EndBuf, Args); - insertValue(Inst, Values); - BB->getInstList().push_back(Inst); - BCR_TRACE(4, Inst); - } + std::vector Args; + while (Buf < EndBuf) + ParseInstruction(Buf, EndBuf, Args, BB); return BB; } @@ -313,16 +306,19 @@ GlobalValue::LinkageTypes Linkage = GlobalValue::ExternalLinkage; if (!hasInternalMarkerOnly) { + // We didn't support weak linkage explicitly. unsigned LinkageType; if (read_vbr(Buf, EndBuf, LinkageType)) throw std::string("ParseFunction: Error reading from buffer."); - if (LinkageType & ~0x3) + if ((!hasExtendedLinkageSpecs && LinkageType > 3) || + ( hasExtendedLinkageSpecs && LinkageType > 4)) throw std::string("Invalid linkage type for Function."); switch (LinkageType) { case 0: Linkage = GlobalValue::ExternalLinkage; break; case 1: Linkage = GlobalValue::WeakLinkage; break; case 2: Linkage = GlobalValue::AppendingLinkage; break; case 3: Linkage = GlobalValue::InternalLinkage; break; + case 4: Linkage = GlobalValue::LinkOnceLinkage; break; } } else { // We used to only support two linkage models: internal and external @@ -538,31 +534,33 @@ RevisionNum = Version >> 4; // Default values for the current bytecode version - HasImplicitZeroInitializer = true; hasInternalMarkerOnly = false; + hasExtendedLinkageSpecs = true; + hasOldStyleVarargs = false; + hasVarArgCallPadding = false; FirstDerivedTyID = 14; switch (RevisionNum) { - case 0: // Initial revision - // Version #0 didn't have any of the flags stored correctly, and in fact as - // only valid with a 14 in the flags values. Also, it does not support - // encoding zero initializers for arrays compactly. - // - if (Version != 14) throw std::string("Unknown revision 0 flags?"); - HasImplicitZeroInitializer = false; - Endianness = Module::BigEndian; - PointerSize = Module::Pointer64; - hasInternalMarkerOnly = true; - hasNoEndianness = hasNoPointerSize = false; - break; - case 1: + case 1: // LLVM pre-1.0 release: will be deleted on the next rev // Version #1 has four bit fields: isBigEndian, hasLongPointers, // hasNoEndianness, and hasNoPointerSize. hasInternalMarkerOnly = true; + hasExtendedLinkageSpecs = false; + hasOldStyleVarargs = true; + hasVarArgCallPadding = true; break; - case 2: + case 2: // LLVM pre-1.0 release: // Version #2 added information about all 4 linkage types instead of just // having internal and external. + hasExtendedLinkageSpecs = false; + hasOldStyleVarargs = true; + hasVarArgCallPadding = true; + break; + case 0: // LLVM 1.0 release version + // Compared to rev #2, we added support for weak linkage, a more dense + // encoding, and better varargs support. + + // FIXME: densify the encoding! break; default: throw std::string("Unknown bytecode version number!"); @@ -576,7 +574,6 @@ BCR_TRACE(1, "Bytecode Rev = " << (unsigned)RevisionNum << "\n"); BCR_TRACE(1, "Endianness/PointerSize = " << Endianness << "," << PointerSize << "\n"); - BCR_TRACE(1, "HasImplicitZeroInit = " << HasImplicitZeroInitializer << "\n"); } void BytecodeParser::ParseModule(const unsigned char *Buf, @@ -656,9 +653,8 @@ BCR_TRACE(0, "} end block\n\n"); } -void -BytecodeParser::ParseBytecode(const unsigned char *Buf, unsigned Length, - const std::string &ModuleID) { +void BytecodeParser::ParseBytecode(const unsigned char *Buf, unsigned Length, + const std::string &ModuleID) { unsigned char *EndBuf = (unsigned char*)(Buf + Length); @@ -670,6 +666,7 @@ TheModule = new Module(ModuleID); try { + usesOldStyleVarargs = false; ParseModule(Buf, EndBuf); } catch (std::string &Error) { freeState(); // Must destroy handles before deleting module! Index: llvm/lib/Bytecode/Reader/ReaderInternals.h diff -u llvm/lib/Bytecode/Reader/ReaderInternals.h:1.59 llvm/lib/Bytecode/Reader/ReaderInternals.h:1.60 --- llvm/lib/Bytecode/Reader/ReaderInternals.h:1.59 Mon Oct 13 09:34:59 2003 +++ llvm/lib/Bytecode/Reader/ReaderInternals.h Sat Oct 18 00:54:18 2003 @@ -80,8 +80,12 @@ // Information about the module, extracted from the bytecode revision number. unsigned char RevisionNum; // The rev # itself unsigned char FirstDerivedTyID; // First variable index to use for type - bool HasImplicitZeroInitializer; // Is entry 0 of every slot implicity zeros? bool hasInternalMarkerOnly; // Only types of linkage are intern/external + bool hasExtendedLinkageSpecs; // Supports more than 4 linkage types + bool hasOldStyleVarargs; // Has old version of varargs intrinsics? + bool hasVarArgCallPadding; // Bytecode has extra padding in vararg call + + bool usesOldStyleVarargs; // Does this module USE old style varargs? typedef std::vector ValueTable; ValueTable Values; @@ -148,9 +152,8 @@ const unsigned char *End, unsigned BlockNo); - Instruction *ParseInstruction(const unsigned char *&Buf, - const unsigned char *End, - std::vector &Args); + void ParseInstruction(const unsigned char *&Buf, const unsigned char *End, + std::vector &Args, BasicBlock *BB); void ParseConstantPool(const unsigned char *&Buf, const unsigned char *EndBuf, ValueTable &Tab, TypeValuesListTy &TypeTab); Index: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp diff -u llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.14 llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.15 --- llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.14 Thu Oct 16 16:19:54 2003 +++ llvm/lib/Bytecode/Reader/ReaderWrappers.cpp Sat Oct 18 00:54:18 2003 @@ -6,12 +6,18 @@ //===----------------------------------------------------------------------===// #include "ReaderInternals.h" +#include "llvm/Module.h" +#include "llvm/Instructions.h" #include "Support/StringExtras.h" #include "Config/fcntl.h" #include #include "Config/unistd.h" #include "Config/sys/mman.h" +//===----------------------------------------------------------------------===// +// BytecodeFileReader - Read from an mmap'able file descriptor. +// + namespace { /// FDHandle - Simple handle class to make sure a file descriptor gets closed /// when the object is destroyed. @@ -73,7 +79,9 @@ munmap((char*)Buffer, Length); } -//////////////////////////////////////////////////////////////////////////// +//===----------------------------------------------------------------------===// +// BytecodeBufferReader - Read from a memory buffer +// namespace { /// BytecodeBufferReader - parses a bytecode file from a buffer @@ -123,7 +131,9 @@ if (MustDelete) delete [] Buffer; } -//////////////////////////////////////////////////////////////////////////// +//===----------------------------------------------------------------------===// +// BytecodeStdinReader - Read bytecode from Standard Input +// namespace { /// BytecodeStdinReader - parses a bytecode file from stdin @@ -160,18 +170,89 @@ ParseBytecode(FileBuf, FileData.size(), ""); } -///////////////////////////////////////////////////////////////////////////// +//===----------------------------------------------------------------------===// +// Varargs transmogrification code... // + +// CheckVarargs - This is used to automatically translate old-style varargs to +// new style varargs for backwards compatibility. +static ModuleProvider *CheckVarargs(ModuleProvider *MP) { + Module *M = MP->getModule(); + + // Check to see if va_start takes arguments... + Function *F = M->getNamedFunction("llvm.va_start"); + if (F == 0) return MP; // No varargs use, just return. + + if (F->getFunctionType()->getNumParams() == 0) + return MP; // Modern varargs processing, just return. + + // If we get to this point, we know that we have an old-style module. + // Materialize the whole thing to perform the rewriting. + MP->materializeModule(); + + // If the user is making use of obsolete varargs intrinsics, adjust them for + // the user. + if (Function *F = M->getNamedFunction("llvm.va_start")) { + assert(F->asize() == 1 && "Obsolete va_start takes 1 argument!"); + + const Type *RetTy = F->getFunctionType()->getParamType(0); + RetTy = cast(RetTy)->getElementType(); + Function *NF = M->getOrInsertFunction("llvm.va_start", RetTy, 0); + + for (Value::use_iterator I = F->use_begin(), E = F->use_end(); I != E; ) + if (CallInst *CI = dyn_cast(*I++)) { + Value *V = new CallInst(NF, "", CI); + new StoreInst(V, CI->getOperand(1), CI); + CI->getParent()->getInstList().erase(CI); + } + F->setName(""); + } + + if (Function *F = M->getNamedFunction("llvm.va_end")) { + assert(F->asize() == 1 && "Obsolete va_end takes 1 argument!"); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + ArgTy = cast(ArgTy)->getElementType(); + Function *NF = M->getOrInsertFunction("llvm.va_end", Type::VoidTy, + ArgTy, 0); + + for (Value::use_iterator I = F->use_begin(), E = F->use_end(); I != E; ) + if (CallInst *CI = dyn_cast(*I++)) { + Value *V = new LoadInst(CI->getOperand(1), "", CI); + new CallInst(NF, V, "", CI); + CI->getParent()->getInstList().erase(CI); + } + F->setName(""); + } + + if (Function *F = M->getNamedFunction("llvm.va_copy")) { + assert(F->asize() == 2 && "Obsolete va_copy takes 2 argument!"); + const Type *ArgTy = F->getFunctionType()->getParamType(0); + ArgTy = cast(ArgTy)->getElementType(); + Function *NF = M->getOrInsertFunction("llvm.va_copy", ArgTy, + ArgTy, 0); + + for (Value::use_iterator I = F->use_begin(), E = F->use_end(); I != E; ) + if (CallInst *CI = dyn_cast(*I++)) { + Value *V = new CallInst(NF, CI->getOperand(2), "", CI); + new StoreInst(V, CI->getOperand(1), CI); + CI->getParent()->getInstList().erase(CI); + } + F->setName(""); + } + return MP; +} + + +//===----------------------------------------------------------------------===// // Wrapper functions -// -///////////////////////////////////////////////////////////////////////////// +//===----------------------------------------------------------------------===// /// getBytecodeBufferModuleProvider - lazy function-at-a-time loading from a /// buffer ModuleProvider* getBytecodeBufferModuleProvider(const unsigned char *Buffer, unsigned Length, const std::string &ModuleID) { - return new BytecodeBufferReader(Buffer, Length, ModuleID); + return CheckVarargs(new BytecodeBufferReader(Buffer, Length, ModuleID)); } /// ParseBytecodeBuffer - Parse a given bytecode buffer @@ -192,9 +273,9 @@ /// ModuleProvider *getBytecodeModuleProvider(const std::string &Filename) { if (Filename != std::string("-")) // Read from a file... - return new BytecodeFileReader(Filename); + return CheckVarargs(new BytecodeFileReader(Filename)); else // Read from stdin - return new BytecodeStdinReader(); + return CheckVarargs(new BytecodeStdinReader()); } /// ParseBytecodeFile - Parse the given bytecode file From lattner at cs.uiuc.edu Sat Oct 18 00:55:17 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:55:17 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Writer/InstructionWriter.cpp Writer.cpp Message-ID: <200310180554.AAA13815@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Writer: InstructionWriter.cpp updated: 1.32 -> 1.33 Writer.cpp updated: 1.41 -> 1.42 --- Log message: Updated to emit the final 1.0 bytecode format. This supports weak linkage, more efficient encoding of varargs calls, and the new varargs intrinsics. --- Diffs of the changes: (+40 -22) Index: llvm/lib/Bytecode/Writer/InstructionWriter.cpp diff -u llvm/lib/Bytecode/Writer/InstructionWriter.cpp:1.32 llvm/lib/Bytecode/Writer/InstructionWriter.cpp:1.33 --- llvm/lib/Bytecode/Writer/InstructionWriter.cpp:1.32 Thu Oct 16 21:02:40 2003 +++ llvm/lib/Bytecode/Writer/InstructionWriter.cpp Sat Oct 18 00:54:48 2003 @@ -30,7 +30,8 @@ output_vbr(Type, Out); // Result type unsigned NumArgs = I->getNumOperands(); - output_vbr(NumArgs + (isa(I) || isa(I)), Out); + output_vbr(NumArgs + (isa(I) || isa(I) || + isa(I)), Out); for (unsigned i = 0; i < NumArgs; ++i) { int Slot = Table.getSlot(I->getOperand(i)); @@ -38,9 +39,13 @@ output_vbr((unsigned)Slot, Out); } - if (isa(I) || isa(I)) { + if (isa(I) || isa(I)) { int Slot = Table.getSlot(I->getType()); - assert(Slot != -1 && "Cast/VarArg return type unknown?"); + assert(Slot != -1 && "Cast return type unknown?"); + output_vbr((unsigned)Slot, Out); + } else if (const VANextInst *VAI = dyn_cast(I)) { + int Slot = Table.getSlot(VAI->getArgType()); + assert(Slot != -1 && "VarArg argument type unknown?"); output_vbr((unsigned)Slot, Out); } @@ -65,29 +70,37 @@ output_vbr(Opcode << 2, Out); // Instruction Opcode ID output_vbr(Type, Out); // Result type (varargs type) - unsigned NumArgs = I->getNumOperands(); - output_vbr(NumArgs*2, Out); - // TODO: Don't need to emit types for the fixed types of the varargs function - // prototype... + const PointerType *PTy = cast(I->getOperand(0)->getType()); + const FunctionType *FTy = cast(PTy->getElementType()); + unsigned NumParams = FTy->getNumParams(); + + unsigned NumFixedOperands; + if (isa(I)) { + // Output an operand for the callee and each fixed argument, then two for + // each variable argument. + NumFixedOperands = 1+NumParams; + } else { + assert(isa(I) && "Not call or invoke??"); + // Output an operand for the callee and destinations, then two for each + // variable argument. + NumFixedOperands = 3+NumParams; + } + output_vbr(2 * I->getNumOperands()-NumFixedOperands, Out); // The type for the function has already been emitted in the type field of the // instruction. Just emit the slot # now. - int Slot = Table.getSlot(I->getOperand(0)); - assert(Slot >= 0 && "No slot number for value!?!?"); - output_vbr((unsigned)Slot, Out); - - // Output a dummy field to fill Arg#2 in the reader that is currently unused - // for varargs calls. This is a gross hack to make the code simpler, but we - // aren't really doing very small bytecode for varargs calls anyways. - // FIXME in the future: Smaller bytecode for varargs calls - output_vbr(0, Out); + for (unsigned i = 0; i != NumFixedOperands; ++i) { + int Slot = Table.getSlot(I->getOperand(i)); + assert(Slot >= 0 && "No slot number for value!?!?"); + output_vbr((unsigned)Slot, Out); + } - for (unsigned i = 1; i < NumArgs; ++i) { + for (unsigned i = NumFixedOperands, e = I->getNumOperands(); i != e; ++i) { // Output Arg Type ID - Slot = Table.getSlot(I->getOperand(i)->getType()); + int Slot = Table.getSlot(I->getOperand(i)->getType()); assert(Slot >= 0 && "No slot number for value!?!?"); output_vbr((unsigned)Slot, Out); - + // Output arg ID itself Slot = Table.getSlot(I->getOperand(i)); assert(Slot >= 0 && "No slot number for value!?!?"); @@ -214,11 +227,16 @@ if (Slot > MaxOpSlot) MaxOpSlot = Slot; // Handle the special case for cast... - if (isa(I) || isa(I)) { + if (isa(I) || isa(I)) { // Cast has to encode the destination type as the second argument in the // packet, or else we won't know what type to cast to! Slots[1] = Table.getSlot(I.getType()); assert(Slots[1] != -1 && "Cast return type unknown?"); + if (Slots[1] > MaxOpSlot) MaxOpSlot = Slots[1]; + NumOperands++; + } else if (const VANextInst *VANI = dyn_cast(&I)) { + Slots[1] = Table.getSlot(VANI->getArgType()); + assert(Slots[1] != -1 && "va_next return type unknown?"); if (Slots[1] > MaxOpSlot) MaxOpSlot = Slots[1]; NumOperands++; } else if (const CallInst *CI = dyn_cast(&I)){// Handle VarArg calls Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.41 llvm/lib/Bytecode/Writer/Writer.cpp:1.42 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.41 Thu Oct 16 21:02:39 2003 +++ llvm/lib/Bytecode/Writer/Writer.cpp Sat Oct 18 00:54:48 2003 @@ -48,8 +48,8 @@ bool hasNoEndianness = M->getEndianness() == Module::AnyEndianness; bool hasNoPointerSize = M->getPointerSize() == Module::AnyPointerSize; - // Output the version identifier... we are currently on bytecode version #2 - unsigned Version = (2 << 4) | isBigEndian | (hasLongPointers << 1) | + // Output the version identifier... we are currently on bytecode version #0 + unsigned Version = (0 << 4) | isBigEndian | (hasLongPointers << 1) | (hasNoEndianness << 2) | (hasNoPointerSize << 3); output_vbr(Version, Out); align32(Out); From lattner at cs.uiuc.edu Sat Oct 18 00:56:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:56:01 2003 Subject: [llvm-commits] CVS: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp ExternalFunctions.cpp Interpreter.h Message-ID: <200310180555.AAA13833@zion.cs.uiuc.edu> Changes in directory llvm/lib/ExecutionEngine/Interpreter: Execution.cpp updated: 1.100 -> 1.101 ExternalFunctions.cpp updated: 1.63 -> 1.64 Interpreter.h updated: 1.43 -> 1.44 --- Log message: Interpret the new varargs intrinsics correctly --- Diffs of the changes: (+13 -28) Index: llvm/lib/ExecutionEngine/Interpreter/Execution.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.100 llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.101 --- llvm/lib/ExecutionEngine/Interpreter/Execution.cpp:1.100 Fri Oct 10 12:42:19 2003 +++ llvm/lib/ExecutionEngine/Interpreter/Execution.cpp Sat Oct 18 00:55:25 2003 @@ -845,27 +845,17 @@ SetValue(&I, executeCastOperation(I.getOperand(0), I.getType(), SF), SF); } -void Interpreter::visitVarArgInst(VarArgInst &I) { +void Interpreter::visitVANextInst(VANextInst &I) { ExecutionContext &SF = ECStack.back(); - // Get the pointer to the valist element. LLI treats the valist in memory as - // an integer. - GenericValue VAListPtr = getOperandValue(I.getOperand(0), SF); - - // Load the pointer - GenericValue VAList = - TheEE->LoadValueFromMemory((GenericValue *)GVTOP(VAListPtr), Type::UIntTy); - + // Get the incoming valist element. LLI treats the valist as an integer. + GenericValue VAList = getOperandValue(I.getOperand(0), SF); + + // Move to the next operand. unsigned Argument = VAList.IntVal++; - - // Update the valist to point to the next argument... - TheEE->StoreValueToMemory(VAList, (GenericValue *)GVTOP(VAListPtr), - Type::UIntTy); - - // Set the value... assert(Argument < SF.VarArgs.size() && "Accessing past the last vararg argument!"); - SetValue(&I, SF.VarArgs[Argument], SF); + SetValue(&I, VAList, SF); } //===----------------------------------------------------------------------===// Index: llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp diff -u llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.63 llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.64 --- llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp:1.63 Tue Oct 14 16:42:11 2003 +++ llvm/lib/ExecutionEngine/Interpreter/ExternalFunctions.cpp Sat Oct 18 00:55:25 2003 @@ -687,14 +687,12 @@ // LLVM Intrinsic Functions... //===----------------------------------------------------------------------===// -// void llvm.va_start( *) - Implement the va_start operation... +// llvm.va_start() - Implement the va_start operation... GenericValue llvm_va_start(FunctionType *F, const vector &Args) { - assert(Args.size() == 1); - GenericValue *VAListP = (GenericValue *)GVTOP(Args[0]); + assert(Args.size() == 0); GenericValue Val; Val.UIntVal = 0; // Start at the first '...' argument... - TheInterpreter->StoreValueToMemory(Val, VAListP, Type::UIntTy); - return GenericValue(); + return Val; } // void llvm.va_end( *) - Implement the va_end operation... @@ -703,13 +701,10 @@ return GenericValue(); // Noop! } -// void llvm.va_copy( *, ) - Implement the va_copy -// operation... +// llvm.va_copy() - Implement the va_copy operation... GenericValue llvm_va_copy(FunctionType *F, const vector &Args) { - assert(Args.size() == 2); - GenericValue *DestVAList = (GenericValue*)GVTOP(Args[0]); - TheInterpreter->StoreValueToMemory(Args[1], DestVAList, Type::UIntTy); - return GenericValue(); + assert(Args.size() == 1); + return Args[0]; } } // End extern "C" Index: llvm/lib/ExecutionEngine/Interpreter/Interpreter.h diff -u llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.43 llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.44 --- llvm/lib/ExecutionEngine/Interpreter/Interpreter.h:1.43 Wed Sep 17 12:26:22 2003 +++ llvm/lib/ExecutionEngine/Interpreter/Interpreter.h Sat Oct 18 00:55:25 2003 @@ -131,7 +131,7 @@ void visitCallInst(CallInst &I); void visitShl(ShiftInst &I); void visitShr(ShiftInst &I); - void visitVarArgInst(VarArgInst &I); + void visitVANextInst(VANextInst &I); void visitInstruction(Instruction &I) { std::cerr << I; assert(0 && "Instruction not interpretable yet!"); From lattner at cs.uiuc.edu Sat Oct 18 00:57:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:57:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/Sparc/Sparc.burg.in SparcInstrSelection.cpp Message-ID: <200310180556.AAA13844@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/Sparc: Sparc.burg.in updated: 1.7 -> 1.8 SparcInstrSelection.cpp updated: 1.119 -> 1.120 --- Log message: Update the sparc backend to at least compile correctly with the new varargs stuff even if it's not all implemented yet. --- Diffs of the changes: (+16 -4) Index: llvm/lib/Target/Sparc/Sparc.burg.in diff -u llvm/lib/Target/Sparc/Sparc.burg.in:1.7 llvm/lib/Target/Sparc/Sparc.burg.in:1.8 --- llvm/lib/Target/Sparc/Sparc.burg.in:1.7 Fri Oct 10 13:46:50 2003 +++ llvm/lib/Target/Sparc/Sparc.burg.in Sat Oct 18 00:55:58 2003 @@ -87,8 +87,9 @@ %term Call=CallOPCODE %term Shl=ShlOPCODE %term Shr=ShrOPCODE -%term VaArg=VarArgOPCODE - /* 32...46 are unused */ +%term VANext=VANextOPCODE +%term VAArg=VAArgOPCODE + /* 33...46 are unused */ /* * The foll. values should match the constants in InstrForest.h */ @@ -258,7 +259,8 @@ reg: Shl(reg,reg) = 62 (20); /* 1 for issue restrictions */ reg: Shr(reg,reg) = 63 (20); /* 1 for issue restrictions */ reg: Phi(reg,reg) = 64 (0); -reg: VaArg(reg) = 65 (40); /* load from stack then incr */ +reg: VANext(reg) = 65 (40); /* incr stack slot pointer */ +reg: VAArg(reg) = 66 (40); /* get a vararg */ /* * Finally, leaf nodes of expression trees. Index: llvm/lib/Target/Sparc/SparcInstrSelection.cpp diff -u llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.119 llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.120 --- llvm/lib/Target/Sparc/SparcInstrSelection.cpp:1.119 Tue Sep 23 12:28:11 2003 +++ llvm/lib/Target/Sparc/SparcInstrSelection.cpp Sat Oct 18 00:55:58 2003 @@ -1408,6 +1408,9 @@ { switch (iid) { case LLVMIntrinsic::va_start: { + // FIXME: this needs to be updated! + abort(); + // Get the address of the first vararg value on stack and copy it to // the argument of va_start(va_list* ap). bool ignore; @@ -1426,6 +1429,9 @@ return true; // no-op on Sparc case LLVMIntrinsic::va_copy: + // FIXME: this needs to be updated! + abort(); + // Simple copy of current va_list (arg2) to new va_list (arg1) mvec.push_back(BuildMI(V9::ORr, 3). addMReg(target.getRegInfo().getZeroRegNum()). @@ -2829,8 +2835,11 @@ case 64: // reg: Phi(reg,reg) break; // don't forward the value - case 65: // reg: VaArg(reg): the va_arg instruction + case 65: // reg: VANext(reg): the va_next instruction + case 66: // reg: VAArg (reg): the va_arg instruction { + abort(); // FIXME: This is incorrect! +#if 0 // Use value initialized by va_start as pointer to args on the stack. // Load argument via current pointer value, then increment pointer. int argSize = target.getFrameInfo().getSizeOfEachArgOnStack(); @@ -2842,6 +2851,7 @@ mvec.push_back(BuildMI(V9::ADDi, 3).addReg(vaArgI->getOperand(0)). addSImm(argSize).addRegDef(vaArgI->getOperand(0))); break; +#endif } case 71: // reg: VReg From lattner at cs.uiuc.edu Sat Oct 18 00:57:17 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:57:17 2003 Subject: [llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp Message-ID: <200310180556.AAA13859@zion.cs.uiuc.edu> Changes in directory llvm/lib/Target/X86: InstSelectSimple.cpp updated: 1.129 -> 1.130 --- Log message: Add support for the new varargs intrinsics --- Diffs of the changes: (+36 -26) Index: llvm/lib/Target/X86/InstSelectSimple.cpp diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.129 llvm/lib/Target/X86/InstSelectSimple.cpp:1.130 --- llvm/lib/Target/X86/InstSelectSimple.cpp:1.129 Wed Oct 15 11:48:28 2003 +++ llvm/lib/Target/X86/InstSelectSimple.cpp Sat Oct 18 00:56:40 2003 @@ -173,7 +173,8 @@ void visitShiftInst(ShiftInst &I); void visitPHINode(PHINode &I) {} // PHI nodes handled by second pass void visitCastInst(CastInst &I); - void visitVarArgInst(VarArgInst &I); + void visitVANextInst(VANextInst &I); + void visitVAArgInst(VAArgInst &I); void visitInstruction(Instruction &I) { std::cerr << "Cannot instruction select: " << I; @@ -1000,18 +1001,16 @@ switch (ID) { case LLVMIntrinsic::va_start: // Get the address of the first vararg value... - TmpReg1 = makeAnotherReg(Type::UIntTy); + TmpReg1 = getReg(CI); addFrameReference(BuildMI(BB, X86::LEAr32, 5, TmpReg1), VarArgsFrameIndex); - TmpReg2 = getReg(CI.getOperand(1)); - addDirectMem(BuildMI(BB, X86::MOVrm32, 5), TmpReg2).addReg(TmpReg1); return; - case LLVMIntrinsic::va_end: return; // Noop on X86 case LLVMIntrinsic::va_copy: - TmpReg1 = getReg(CI.getOperand(2)); // Get existing va_list - TmpReg2 = getReg(CI.getOperand(1)); // Get va_list* to store into - addDirectMem(BuildMI(BB, X86::MOVrm32, 5), TmpReg2).addReg(TmpReg1); + TmpReg1 = getReg(CI); + TmpReg2 = getReg(CI.getOperand(1)); + BuildMI(BB, X86::MOVrr32, 1, TmpReg1).addReg(TmpReg2); return; + case LLVMIntrinsic::va_end: return; // Noop on X86 case LLVMIntrinsic::longjmp: case LLVMIntrinsic::siglongjmp: @@ -1884,46 +1883,57 @@ abort(); } -/// visitVarArgInst - Implement the va_arg instruction... +/// visitVANextInst - Implement the va_next instruction... /// -void ISel::visitVarArgInst(VarArgInst &I) { - unsigned SrcReg = getReg(I.getOperand(0)); +void ISel::visitVANextInst(VANextInst &I) { + unsigned VAList = getReg(I.getOperand(0)); unsigned DestReg = getReg(I); - // Load the va_list into a register... - unsigned VAList = makeAnotherReg(Type::UIntTy); - addDirectMem(BuildMI(BB, X86::MOVmr32, 4, VAList), SrcReg); - unsigned Size; - switch (I.getType()->getPrimitiveID()) { + switch (I.getArgType()->getPrimitiveID()) { default: std::cerr << I; - assert(0 && "Error: bad type for va_arg instruction!"); + assert(0 && "Error: bad type for va_next instruction!"); return; case Type::PointerTyID: case Type::UIntTyID: case Type::IntTyID: Size = 4; - addDirectMem(BuildMI(BB, X86::MOVmr32, 4, DestReg), VAList); break; case Type::ULongTyID: case Type::LongTyID: + case Type::DoubleTyID: Size = 8; + break; + } + + // Increment the VAList pointer... + BuildMI(BB, X86::ADDri32, 2, DestReg).addReg(VAList).addZImm(Size); +} + +void ISel::visitVAArgInst(VAArgInst &I) { + unsigned VAList = getReg(I.getOperand(0)); + unsigned DestReg = getReg(I); + + switch (I.getType()->getPrimitiveID()) { + default: + std::cerr << I; + assert(0 && "Error: bad type for va_next instruction!"); + return; + case Type::PointerTyID: + case Type::UIntTyID: + case Type::IntTyID: + addDirectMem(BuildMI(BB, X86::MOVmr32, 4, DestReg), VAList); + break; + case Type::ULongTyID: + case Type::LongTyID: addDirectMem(BuildMI(BB, X86::MOVmr32, 4, DestReg), VAList); addRegOffset(BuildMI(BB, X86::MOVmr32, 4, DestReg+1), VAList, 4); break; case Type::DoubleTyID: - Size = 8; addDirectMem(BuildMI(BB, X86::FLDr64, 4, DestReg), VAList); break; } - - // Increment the VAList pointer... - unsigned NextVAList = makeAnotherReg(Type::UIntTy); - BuildMI(BB, X86::ADDri32, 2, NextVAList).addReg(VAList).addZImm(Size); - - // Update the VAList in memory... - addDirectMem(BuildMI(BB, X86::MOVrm32, 5), SrcReg).addReg(NextVAList); } From lattner at cs.uiuc.edu Sat Oct 18 00:58:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:58:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Scalar/SCCP.cpp Message-ID: <200310180557.AAA13868@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Scalar: SCCP.cpp updated: 1.79 -> 1.80 --- Log message: ADd support for the new varargs instructions --- Diffs of the changes: (+2 -1) Index: llvm/lib/Transforms/Scalar/SCCP.cpp diff -u llvm/lib/Transforms/Scalar/SCCP.cpp:1.79 llvm/lib/Transforms/Scalar/SCCP.cpp:1.80 --- llvm/lib/Transforms/Scalar/SCCP.cpp:1.79 Fri Oct 10 12:50:50 2003 +++ llvm/lib/Transforms/Scalar/SCCP.cpp Sat Oct 18 00:56:52 2003 @@ -209,7 +209,8 @@ } void visitUnwindInst (TerminatorInst &I) { /*returns void*/ } void visitAllocationInst(Instruction &I) { markOverdefined(&I); } - void visitVarArgInst (Instruction &I) { markOverdefined(&I); } + void visitVANextInst (Instruction &I) { markOverdefined(&I); } + void visitVAArgInst (Instruction &I) { markOverdefined(&I); } void visitFreeInst (Instruction &I) { /*returns void*/ } void visitInstruction(Instruction &I) { From lattner at cs.uiuc.edu Sat Oct 18 00:58:18 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:58:18 2003 Subject: [llvm-commits] CVS: llvm/lib/CWriter/Writer.cpp Message-ID: <200310180557.AAA13899@zion.cs.uiuc.edu> Changes in directory llvm/lib/CWriter: Writer.cpp updated: 1.134 -> 1.135 --- Log message: Add support for the new varargs intrinsics and instructions --- Diffs of the changes: (+23 -14) Index: llvm/lib/CWriter/Writer.cpp diff -u llvm/lib/CWriter/Writer.cpp:1.134 llvm/lib/CWriter/Writer.cpp:1.135 --- llvm/lib/CWriter/Writer.cpp:1.134 Thu Oct 16 13:28:54 2003 +++ llvm/lib/CWriter/Writer.cpp Sat Oct 18 00:57:43 2003 @@ -90,7 +90,7 @@ // emit it inline where it would go. if (I.getType() == Type::VoidTy || !I.hasOneUse() || isa(I) || isa(I) || isa(I) || - isa(I) || isa(I)) + isa(I) || isa(I) || isa(I)) // Don't inline a load across a store or other bad things! return false; @@ -135,7 +135,8 @@ void visitLoadInst (LoadInst &I); void visitStoreInst (StoreInst &I); void visitGetElementPtrInst(GetElementPtrInst &I); - void visitVarArgInst(VarArgInst &I); + void visitVANextInst(VANextInst &I); + void visitVAArgInst (VAArgInst &I); void visitInstruction(Instruction &I) { std::cerr << "C Writer does not know about " << I; @@ -1181,26 +1182,25 @@ switch (ID) { default: assert(0 && "Unknown LLVM intrinsic!"); case LLVMIntrinsic::va_start: - Out << "va_start(*(va_list*)"; - writeOperand(I.getOperand(1)); - Out << ", "; + Out << "0; "; + + Out << "va_start(*(va_list*)&" << Mang->getValueName(&I) << ", "; // Output the last argument to the enclosing function... writeOperand(&I.getParent()->getParent()->aback()); Out << ")"; return; case LLVMIntrinsic::va_end: - Out << "va_end(*(va_list*)"; + Out << "va_end(*(va_list*)&"; writeOperand(I.getOperand(1)); Out << ")"; return; case LLVMIntrinsic::va_copy: - Out << "va_copy(*(va_list*)"; + Out << "0;"; + Out << "va_copy(*(va_list*)&" << Mang->getValueName(&I) << ", "; + Out << "*(va_list*)&"; writeOperand(I.getOperand(1)); - Out << ", (va_list)"; - writeOperand(I.getOperand(2)); Out << ")"; return; - case LLVMIntrinsic::setjmp: case LLVMIntrinsic::sigsetjmp: // This intrinsic should never exist in the program, but until we get @@ -1346,12 +1346,21 @@ printIndexingExpression(I.getPointerOperand(), I.idx_begin(), I.idx_end()); } -void CWriter::visitVarArgInst(VarArgInst &I) { - Out << "va_arg((va_list)*"; +void CWriter::visitVANextInst(VANextInst &I) { + Out << Mang->getValueName(I.getOperand(0)); + Out << "; va_arg(*(va_list*)&" << Mang->getValueName(&I) << ", "; + printType(Out, I.getArgType(), "", /*ignoreName*/false, + /*namedContext*/false); + Out << ")"; +} + +void CWriter::visitVAArgInst(VAArgInst &I) { + Out << "0;\n"; + Out << "{ va_list Tmp; va_copy(Tmp, *(va_list*)&"; writeOperand(I.getOperand(0)); - Out << ", "; + Out << ");\n " << Mang->getValueName(&I) << " = va_arg(Tmp, "; printType(Out, I.getType(), "", /*ignoreName*/false, /*namedContext*/false); - Out << ")"; + Out << ");\n va_end(Tmp); }"; } From lattner at cs.uiuc.edu Sat Oct 18 00:58:35 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 00:58:35 2003 Subject: [llvm-commits] CVS: llvm/lib/VMCore/AsmWriter.cpp Instruction.cpp Verifier.cpp Message-ID: <200310180557.AAA13888@zion.cs.uiuc.edu> Changes in directory llvm/lib/VMCore: AsmWriter.cpp updated: 1.101 -> 1.102 Instruction.cpp updated: 1.27 -> 1.28 Verifier.cpp updated: 1.63 -> 1.64 --- Log message: Add support for the new varargs intrinsics and instructions --- Diffs of the changes: (+15 -6) Index: llvm/lib/VMCore/AsmWriter.cpp diff -u llvm/lib/VMCore/AsmWriter.cpp:1.101 llvm/lib/VMCore/AsmWriter.cpp:1.102 --- llvm/lib/VMCore/AsmWriter.cpp:1.101 Thu Oct 16 21:02:39 2003 +++ llvm/lib/VMCore/AsmWriter.cpp Sat Oct 18 00:57:20 2003 @@ -661,7 +661,10 @@ } printType(F->getReturnType()) << " "; - if (!F->getName().empty()) Out << getLLVMName(F->getName()); + if (!F->getName().empty()) + Out << getLLVMName(F->getName()); + else + Out << "\"\""; Out << "("; Table.incorporateFunction(F); @@ -882,10 +885,14 @@ writeOperand(Operand, true); Out << " to "; printType(I.getType()); - } else if (isa(I)) { + } else if (isa(I)) { writeOperand(Operand, true); Out << ", "; printType(I.getType()); + } else if (const VANextInst *VAN = dyn_cast(&I)) { + writeOperand(Operand, true); + Out << ", "; + printType(VAN->getArgType()); } else if (Operand) { // Print the normal way... // PrintAllTypes - Instructions who have operands of all the same type Index: llvm/lib/VMCore/Instruction.cpp diff -u llvm/lib/VMCore/Instruction.cpp:1.27 llvm/lib/VMCore/Instruction.cpp:1.28 --- llvm/lib/VMCore/Instruction.cpp:1.27 Sun Oct 12 22:32:08 2003 +++ llvm/lib/VMCore/Instruction.cpp Sat Oct 18 00:57:20 2003 @@ -92,7 +92,8 @@ case Call: return "call"; case Shl: return "shl"; case Shr: return "shr"; - case VarArg: return "va_arg"; + case VANext: return "vanext"; + case VAArg: return "vaarg"; default: return " "; } Index: llvm/lib/VMCore/Verifier.cpp diff -u llvm/lib/VMCore/Verifier.cpp:1.63 llvm/lib/VMCore/Verifier.cpp:1.64 --- llvm/lib/VMCore/Verifier.cpp:1.63 Fri Oct 10 12:54:14 2003 +++ llvm/lib/VMCore/Verifier.cpp Sat Oct 18 00:57:20 2003 @@ -131,7 +131,8 @@ void visitPHINode(PHINode &PN); void visitBinaryOperator(BinaryOperator &B); void visitShiftInst(ShiftInst &SI); - void visitVarArgInst(VarArgInst &VAI) { visitInstruction(VAI); } + void visitVANextInst(VANextInst &VAN) { visitInstruction(VAN); } + void visitVAArgInst(VAArgInst &VAA) { visitInstruction(VAA); } void visitCallInst(CallInst &CI); void visitGetElementPtrInst(GetElementPtrInst &GEP); void visitLoadInst(LoadInst &LI); @@ -505,10 +506,10 @@ Assert1(CI.getParent()->getParent()->getFunctionType()->isVarArg(), "llvm.va_start intrinsic may only occur in function with variable" " args!", &CI); - NumArgs = 1; + NumArgs = 0; break; case LLVMIntrinsic::va_end: NumArgs = 1; break; - case LLVMIntrinsic::va_copy: NumArgs = 2; break; + case LLVMIntrinsic::va_copy: NumArgs = 1; break; case LLVMIntrinsic::setjmp: NumArgs = 1; break; case LLVMIntrinsic::longjmp: NumArgs = 2; break; From lattner at cs.uiuc.edu Sat Oct 18 01:16:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 01:16:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Message-ID: <200310180615.BAA16760@zion.cs.uiuc.edu> Changes in directory llvm/lib/Transforms/Utils: PromoteMemoryToRegister.cpp updated: 1.54 -> 1.55 --- Log message: Fix PR#50 --- Diffs of the changes: (+6 -6) Index: llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp diff -u llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.54 llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.55 --- llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp:1.54 Sun Oct 5 17:19:20 2003 +++ llvm/lib/Transforms/Utils/PromoteMemoryToRegister.cpp Sat Oct 18 01:14:59 2003 @@ -269,12 +269,12 @@ // At this point, the blocks left in the preds list must have dummy // entries inserted into every PHI nodes for the block. - for (unsigned i = 0, e = PNs.size(); i != e; ++i) { - PHINode *PN = PNs[i]; - Value *NullVal = Constant::getNullValue(PN->getType()); - for (unsigned pred = 0, e = Preds.size(); pred != e; ++pred) - PN->addIncoming(NullVal, Preds[pred]); - } + for (unsigned i = 0, e = PNs.size(); i != e; ++i) + if (PHINode *PN = PNs[i]) { + Value *NullVal = Constant::getNullValue(PN->getType()); + for (unsigned pred = 0, e = Preds.size(); pred != e; ++pred) + PN->addIncoming(NullVal, Preds[pred]); + } } } } From tbrethou at cs.uiuc.edu Sat Oct 18 01:31:02 2003 From: tbrethou at cs.uiuc.edu (Tanya Brethour) Date: Sat Oct 18 01:31:02 2003 Subject: [llvm-commits] CVS: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Message-ID: <200310180630.BAA02241@tank.cs.uiuc.edu> Changes in directory reopt/lib/LightWtProfiling: UnpackTraceFunction.cpp updated: 1.2 -> 1.3 --- Log message: Fixed incomplete type/forward declaration error I was getting by including MachineInstr.h --- Diffs of the changes: (+1 -0) Index: reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp diff -u reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.2 reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.3 --- reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp:1.2 Tue Oct 14 16:58:59 2003 +++ reopt/lib/LightWtProfiling/UnpackTraceFunction.cpp Sat Oct 18 01:30:37 2003 @@ -8,6 +8,7 @@ #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineFunction.h" +#include "llvm/CodeGen/MachineInstr.h" #include "llvm/Function.h" #include From lattner at cs.uiuc.edu Sat Oct 18 01:31:20 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 01:31:20 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Writer/Writer.cpp Message-ID: <200310180630.BAA20716@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Writer: Writer.cpp updated: 1.42 -> 1.43 --- Log message: add support for new linkage types --- Diffs of the changes: (+4 -4) Index: llvm/lib/Bytecode/Writer/Writer.cpp diff -u llvm/lib/Bytecode/Writer/Writer.cpp:1.42 llvm/lib/Bytecode/Writer/Writer.cpp:1.43 --- llvm/lib/Bytecode/Writer/Writer.cpp:1.42 Sat Oct 18 00:54:48 2003 +++ llvm/lib/Bytecode/Writer/Writer.cpp Sat Oct 18 01:30:21 2003 @@ -162,10 +162,10 @@ switch (GV->getLinkage()) { default: assert(0 && "Invalid linkage!"); case GlobalValue::ExternalLinkage: return 0; - case GlobalValue::LinkOnceLinkage: return 1; case GlobalValue::WeakLinkage: return 1; case GlobalValue::AppendingLinkage: return 2; case GlobalValue::InternalLinkage: return 3; + case GlobalValue::LinkOnceLinkage: return 4; } } @@ -177,9 +177,9 @@ int Slot = Table.getSlot(I->getType()); assert(Slot != -1 && "Module global vars is broken!"); - // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2,3=Linkage, - // bit4+ = Slot # for type - unsigned oSlot = ((unsigned)Slot << 4) | (getEncodedLinkage(I) << 2) | + // Fields: bit0 = isConstant, bit1 = hasInitializer, bit2-4=Linkage, + // bit5+ = Slot # for type + unsigned oSlot = ((unsigned)Slot << 5) | (getEncodedLinkage(I) << 2) | (I->hasInitializer() << 1) | I->isConstant(); output_vbr(oSlot, Out); From lattner at cs.uiuc.edu Sat Oct 18 01:31:37 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 01:31:37 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200310180630.BAA20709@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.84 -> 1.85 --- Log message: add support for new linkage types --- Diffs of the changes: (+14 -4) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.84 llvm/lib/Bytecode/Reader/Reader.cpp:1.85 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.84 Sat Oct 18 00:54:18 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Sat Oct 18 01:30:18 2003 @@ -434,14 +434,24 @@ GlobalValue::LinkageTypes Linkage; if (!hasInternalMarkerOnly) { - // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, - // bit2,3 = Linkage, bit4+ = slot# - SlotNo = VarType >> 4; - switch ((VarType >> 2) & 3) { + unsigned LinkageID; + if (hasExtendedLinkageSpecs) { + // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, + // bit2,3,4 = Linkage, bit4+ = slot# + SlotNo = VarType >> 5; + LinkageID = (VarType >> 2) & 7; + } else { + // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, + // bit2,3 = Linkage, bit4+ = slot# + SlotNo = VarType >> 4; + LinkageID = (VarType >> 2) & 3; + } + switch (LinkageID) { case 0: Linkage = GlobalValue::ExternalLinkage; break; case 1: Linkage = GlobalValue::WeakLinkage; break; case 2: Linkage = GlobalValue::AppendingLinkage; break; case 3: Linkage = GlobalValue::InternalLinkage; break; + case 4: Linkage = GlobalValue::LinkOnceLinkage; break; } } else { // VarType Fields: bit0 = isConstant, bit1 = hasInitializer, From lattner at cs.uiuc.edu Sat Oct 18 01:36:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 01:36:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp Makefile Message-ID: <200310180635.BAA20999@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/CustomChecked: stepanov_v1p2.cpp added (r1.1) Makefile updated: 1.7 -> 1.8 --- Log message: Add the stepanov benchmark --- Diffs of the changes: (+341 -1) Index: llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp diff -c /dev/null llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.1 *** /dev/null Sat Oct 18 01:35:56 2003 --- llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp Sat Oct 18 01:35:46 2003 *************** *** 0 **** --- 1,339 ---- + /* KAI's version of Stepanov Benchmark -- Version 1.2 + + Version 1.2 -- removed some special code for GNU systems that + GNU complained about without -O + + To verify how efficiently C++ (and in particular STL) is compiled by + the present day compilers, I composed a little benchmark. It outputs + 13 numbers. In the ideal world these numbers should be the same. In + the real world, however, ... + + The final number printed by the benchmark is a geometric mean of the + performance degradation factors of individual tests. It claims to + represent the factor by which you will be punished by your + compiler if you attempt to use C++ data abstraction features. I call + this number "Abstraction Penalty." + + As with any benchmark it is hard to prove such a claim; some people + told me that it does not represent typical C++ usage. It is, however, + a noteworthy fact that majority of the people who so object are + responsible for C++ compilers with disproportionatly large Abstraction + Penalty. + + The structure of the benchmark is really quite simple. It adds 2000 + doubles in an array 25000 times. It does it in 13 different ways that + introduce more and more abstract ways of doing it: + + 0 - uses simple Fortran-like for loop. + 1 - 12 use STL style accumulate template function with plus function object. + 1, 3, 5, 7 ,9, 11 use doubles. + 2, 4, 6, 8, 10, 12 use Double - double wrapped in a class. + 1, 2 - use regular pointers. + 3, 4 - use pointers wrapped in a class. + 5, 6 - use pointers wrapped in a reverse-iterator adaptor. + 7, 8 - use wrapped pointers wrapped in a reverse-iterator adaptor. + 9, 10 - use pointers wrapped in a reverse-iterator adaptor wrapped in a + reverse-iterator adaptor. + 11, 12 - use wrapped pointers wrapped in a reverse-iterator adaptor wrapped + in a reverse-iterator adaptor. + + All the operators on Double and different pointer-like classes are + declared inline. The only thing that is really measured is the penalty + for data abstraction. While templates are used, they do not cause any + performance degradation. They are used only to simplify the code. + + Since many of you are interested in the C++ performance issues, I + decided to post the benchmark here. I would appreciate if you run it + and (if possible) send me the results indicating what you have + compiled it with (CPU, clock rate, compiler, optimization level). It + is self contained and written so that it could be compiled even with + those compilers that at present cannot compile STL at all. + + It takes a fairly long time to run - on a really slow machine it might + take a full hour. (For those of you who want to run it faster - give + it a command line argument that specifies the number of + iterations. The default is 25000, but it gives an accurate predictions + even with 500 or a thousand.) + + + Alex Stepanov + stepanov at mti.sgi.com + + */ + + + #include + #include + #include + #include + #include + + template + inline int operator!=(const T& x, const T& y) { + return !(x == y); + } + + struct Double { + double value; + Double() {} + Double(const double& x) : value(x) {} + operator double() { return value; } + }; + + inline Double operator+(const Double& x, const Double& y) { + return Double(x.value + y.value); + } + + struct double_pointer { + double* current; + double_pointer() {} + double_pointer(double* x) : current(x) {} + double& operator*() const { return *current; } + double_pointer& operator++() { + ++current; + return *this; + } + double_pointer operator++(int) { + double_pointer tmp = *this; + ++*this; + return tmp; + } + double_pointer& operator--() { + --current; + return *this; + } + double_pointer operator--(int) { + double_pointer tmp = *this; + --*this; + return tmp; + } + }; + + + inline int operator==(const double_pointer& x, + const double_pointer& y) { + return x.current == y.current; + } + + struct Double_pointer { + Double* current; + Double_pointer() {} + Double_pointer(Double* x) : current(x) {} + Double& operator*() const { return *current; } + Double_pointer& operator++() { + ++current; + return *this; + } + Double_pointer operator++(int) { + Double_pointer tmp = *this; + ++*this; + return tmp; + } + Double_pointer& operator--() { + --current; + return *this; + } + Double_pointer operator--(int) { + Double_pointer tmp = *this; + --*this; + return tmp; + } + }; + + + inline int operator==(const Double_pointer& x, + const Double_pointer& y) { + return x.current == y.current; + } + + template + struct reverse_iterator { + RandomAccessIterator current; + reverse_iterator(RandomAccessIterator x) : current(x) {} + T& operator*() const { + RandomAccessIterator tmp = current; + return *(--tmp); + } + reverse_iterator& operator++() { + --current; + return *this; + } + reverse_iterator operator++(int) { + reverse_iterator tmp = *this; + ++*this; + return tmp; + } + reverse_iterator& operator--() { + ++current; + return *this; + } + reverse_iterator operator--(int) { + reverse_iterator tmp = *this; + --*this; + return tmp; + } + }; + + template + inline int operator==(const reverse_iterator& x, + const reverse_iterator& y) { + return x.current == y.current; + } + + struct { + double operator()(const double& x, const double& y) {return x + y; } + Double operator()(const Double& x, const Double& y) {return x + y; } + } plus; + + + template + Number accumulate(Iterator first, Iterator last, Number result) { + while (first != last) result = plus(result, *first++); + return result; + } + + int iterations = 25000; + #define SIZE 2000 + + int current_test = 0; + + double result_times[20]; + + void summarize() { + printf("\ntest absolute additions ratio with\n"); + printf("number time per second test0\n\n"); + int i; + double millions = (double(SIZE) * iterations)/1000000.; + for (i = 0; i < current_test; ++i) + printf("%2i %5.2fsec %5.2fM %.2f\n", + i, + result_times[i], + millions/result_times[i], + result_times[i]/result_times[0]); + double gmean_times = 0.; + double total_absolute_times = 0.; // sam added 12/05/95 + double gmean_rate = 0.; + double gmean_ratio = 0.; + for (i = 0; i < current_test; ++i) { + total_absolute_times += result_times[i]; // sam added 12/05/95 + gmean_times += log(result_times[i]); + gmean_rate += log(millions/result_times[i]); + gmean_ratio += log(result_times[i]/result_times[0]); + } + printf("mean: %5.2fsec %5.2fM %.2f\n", + exp(gmean_times/current_test), + exp(gmean_rate/current_test), + exp(gmean_ratio/current_test)); + printf("\nTotal absolute time: %.2f sec\n", total_absolute_times); // sam added 12/05/95 + printf("\nAbstraction Penalty: %.2f\n\n", exp(gmean_ratio/current_test)); + } + + clock_t start_time, end_time; + + inline void start_timer() { start_time = clock(); } + + inline double timer() { + end_time = clock(); + return (end_time - start_time)/double(CLOCKS_PER_SEC); + } + + const double init_value = 3.; + + + + double data[SIZE]; + + Double Data[SIZE]; + + inline void check(double result) { + if (result != SIZE * init_value) printf("test %i failed\n", current_test); + } + + void test0(double* first, double* last) { + start_timer(); + for(int i = 0; i < iterations; ++i) { + double result = 0; + for (int n = 0; n < last - first; ++n) result += first[n]; + check(result); + } + result_times[current_test++] = timer(); + } + + + template + void test(Iterator first, Iterator last, T zero) { + int i; + start_timer(); + for(i = 0; i < iterations; ++i) + check(double(accumulate(first, last, zero))); + result_times[current_test++] = timer(); + } + + template + void fill(Iterator first, Iterator last, T value) { + while (first != last) *first++ = value; + } + + + double d = 0.; + Double D = 0.; + typedef double* dp; + dp dpb = data; + dp dpe = data + SIZE; + typedef Double* Dp; + Dp Dpb = Data; + Dp Dpe = Data + SIZE; + typedef double_pointer dP; + dP dPb(dpb); + dP dPe(dpe); + typedef Double_pointer DP; + DP DPb(Dpb); + DP DPe(Dpe); + typedef reverse_iterator rdp; + rdp rdpb(dpe); + rdp rdpe(dpb); + typedef reverse_iterator rDp; + rDp rDpb(Dpe); + rDp rDpe(Dpb); + typedef reverse_iterator rdP; + rdP rdPb(dPe); + rdP rdPe(dPb); + typedef reverse_iterator rDP; + rDP rDPb(DPe); + rDP rDPe(DPb); + typedef reverse_iterator rrdp; + rrdp rrdpb(rdpe); + rrdp rrdpe(rdpb); + typedef reverse_iterator rrDp; + rrDp rrDpb(rDpe); + rrDp rrDpe(rDpb); + typedef reverse_iterator rrdP; + rrdP rrdPb(rdPe); + rrdP rrdPe(rdPb); + typedef reverse_iterator rrDP; + rrDP rrDPb(rDPe); + rrDP rrDPe(rDPb); + + int main(int argv, char** argc) { + if (argv > 1) iterations = atoi(argc[1]); + fill(dpb, dpe, double(init_value)); + fill(Dpb, Dpe, Double(init_value)); + test0(dpb, dpe); + test(dpb, dpe, d); + test(Dpb, Dpe, D); + test(dPb, dPe, d); + test(DPb, DPe, D); + test(rdpb, rdpe, d); + test(rDpb, rDpe, D); + test(rdPb, rdPe, d); + test(rDPb, rDPe, D); + test(rrdpb, rrdpe, d); + test(rrDpb, rrDpe, D); + test(rrdPb, rrdPe, d); + test(rrDPb, rrDPe, D); + summarize(); + return 0; + } + + + Index: llvm/test/Programs/SingleSource/CustomChecked/Makefile diff -u llvm/test/Programs/SingleSource/CustomChecked/Makefile:1.7 llvm/test/Programs/SingleSource/CustomChecked/Makefile:1.8 --- llvm/test/Programs/SingleSource/CustomChecked/Makefile:1.7 Mon Sep 15 10:20:29 2003 +++ llvm/test/Programs/SingleSource/CustomChecked/Makefile Sat Oct 18 01:35:46 2003 @@ -6,7 +6,8 @@ include $(LEVEL)/test/Programs/SingleSource/Makefile.singlesrc -LIBS += -lsupc++ +LIBS += -lsupc++ +LDFLAGS += -lm LLI_RUN := $(addsuffix .run-lli, $(PREFIXED_PROGRAMS_TO_TEST)) JIT_RUN := $(addsuffix .run-jit, $(PREFIXED_PROGRAMS_TO_TEST)) From lattner at cs.uiuc.edu Sat Oct 18 01:49:02 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 01:49:02 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT stepanov_v1p2.cpp Message-ID: <200310180648.BAA22042@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/CustomChecked: LICENSE.TXT updated: 1.1 -> 1.2 stepanov_v1p2.cpp updated: 1.1 -> 1.2 --- Log message: Add license and running information --- Diffs of the changes: (+7 -0) Index: llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT diff -u llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT:1.1 llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT:1.2 --- llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT:1.1 Mon Oct 13 15:42:04 2003 +++ llvm/test/Programs/SingleSource/CustomChecked/LICENSE.TXT Sat Oct 18 01:48:19 2003 @@ -9,3 +9,9 @@ Copyright (C) 1995 Arch D. Robison This program is licensed under the GNU General Public License, Version 2. + +Stepanov +------------------------------------------------------------------------------ +Copyright (C) Alex Stepanov +This program is in the public domain. + Index: llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp diff -u llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.1 llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.2 --- llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp:1.1 Sat Oct 18 01:35:46 2003 +++ llvm/test/Programs/SingleSource/CustomChecked/stepanov_v1p2.cpp Sat Oct 18 01:48:19 2003 @@ -1,3 +1,4 @@ +// RUN: %s | grep 'Abstraction Penalty' /* KAI's version of Stepanov Benchmark -- Version 1.2 Version 1.2 -- removed some special code for GNU systems that From lattner at cs.uiuc.edu Sat Oct 18 02:07:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 02:07:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c Message-ID: <200310180706.CAA26133@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Misc: whetstone.c added (r1.1) --- Log message: We've got to have the original whetstone benchmark! Modified to: 1. #define PRINTOUT so we don't optimize the whole thing away, and to provide something to diff 2. Remove timing printouts, because the timing is super low res and messes with the diffs anyway --- Diffs of the changes: (+435 -0) Index: llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c diff -c /dev/null llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c:1.1 *** /dev/null Sat Oct 18 02:06:53 2003 --- llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c Sat Oct 18 02:06:43 2003 *************** *** 0 **** --- 1,435 ---- + #define PRINTOUT + /* + * C Converted Whetstone Double Precision Benchmark + * Version 1.2 22 March 1998 + * + * (c) Copyright 1998 Painter Engineering, Inc. + * All Rights Reserved. + * + * Permission is granted to use, duplicate, and + * publish this text and program as long as it + * includes this entire comment block and limited + * rights reference. + * + * Converted by Rich Painter, Painter Engineering, Inc. based on the + * www.netlib.org benchmark/whetstoned version obtained 16 March 1998. + * + * A novel approach was used here to keep the look and feel of the + * FORTRAN version. Altering the FORTRAN-based array indices, + * starting at element 1, to start at element 0 for C, would require + * numerous changes, including decrementing the variable indices by 1. + * Instead, the array E1[] was declared 1 element larger in C. This + * allows the FORTRAN index range to function without any literal or + * variable indices changes. The array element E1[0] is simply never + * used and does not alter the benchmark results. + * + * The major FORTRAN comment blocks were retained to minimize + * differences between versions. Modules N5 and N12, like in the + * FORTRAN version, have been eliminated here. + * + * An optional command-line argument has been provided [-c] to + * offer continuous repetition of the entire benchmark. + * An optional argument for setting an alternate LOOP count is also + * provided. Define PRINTOUT to cause the POUT() function to print + * outputs at various stages. Final timing measurements should be + * made with the PRINTOUT undefined. + * + * Questions and comments may be directed to the author at + * r.painter at ieee.org + */ + /* + C********************************************************************** + C Benchmark #2 -- Double Precision Whetstone (A001) + C + C o This is a REAL*8 version of + C the Whetstone benchmark program. + C + C o DO-loop semantics are ANSI-66 compatible. + C + C o Final measurements are to be made with all + C WRITE statements and FORMAT sttements removed. + C + C********************************************************************** + */ + + /* standard C library headers required */ + #include + #include + #include + #include + + /* the following is optional depending on the timing function used */ + #include + + /* map the FORTRAN math functions, etc. to the C versions */ + #define DSIN sin + #define DCOS cos + #define DATAN atan + #define DLOG log + #define DEXP exp + #define DSQRT sqrt + #define IF if + + /* function prototypes */ + void POUT(long N, long J, long K, double X1, double X2, double X3, double X4); + void PA(double E[]); + void P0(void); + void P3(double X, double Y, double *Z); + #define USAGE "usage: whetdc [-c] [loops]\n" + + /* + COMMON T,T1,T2,E1(4),J,K,L + */ + double T,T1,T2,E1[5]; + int J,K,L; + + int + main(int argc, char *argv[]) + { + /* used in the FORTRAN version */ + long I; + long N1, N2, N3, N4, N6, N7, N8, N9, N10, N11; + double X1,X2,X3,X4,X,Y,Z; + long LOOP; + int II, JJ; + + /* added for this version */ + long loopstart; + long startsec, finisec; + float KIPS; + int continuous; + + loopstart = 10000; /* see the note about LOOP below */ + continuous = 0; + + II = 1; /* start at the first arg (temp use of II here) */ + while (II < argc) { + if (strncmp(argv[II], "-c", 2) == 0 || argv[II][0] == 'c') { + continuous = 1; + } else if (atol(argv[II]) > 0) { + loopstart = atol(argv[II]); + } else { + fprintf(stderr, USAGE); + return(1); + } + II++; + } + + LCONT: + /* + C + C Start benchmark timing at this point. + C + */ + startsec = time(0); + + /* + C + C The actual benchmark starts here. + C + */ + T = .499975; + T1 = 0.50025; + T2 = 2.0; + /* + C + C With loopcount LOOP=10, one million Whetstone instructions + C will be executed in EACH MAJOR LOOP..A MAJOR LOOP IS EXECUTED + C 'II' TIMES TO INCREASE WALL-CLOCK TIMING ACCURACY. + C + LOOP = 1000; + */ + LOOP = loopstart; + II = 1; + + JJ = 1; + + IILOOP: + N1 = 0; + N2 = 12 * LOOP; + N3 = 14 * LOOP; + N4 = 345 * LOOP; + N6 = 210 * LOOP; + N7 = 32 * LOOP; + N8 = 899 * LOOP; + N9 = 616 * LOOP; + N10 = 0; + N11 = 93 * LOOP; + /* + C + C Module 1: Simple identifiers + C + */ + X1 = 1.0; + X2 = -1.0; + X3 = -1.0; + X4 = -1.0; + + for (I = 1; I <= N1; I++) { + X1 = (X1 + X2 + X3 - X4) * T; + X2 = (X1 + X2 - X3 + X4) * T; + X3 = (X1 - X2 + X3 + X4) * T; + X4 = (-X1+ X2 + X3 + X4) * T; + } + #ifdef PRINTOUT + IF (JJ==II)POUT(N1,N1,N1,X1,X2,X3,X4); + #endif + + /* + C + C Module 2: Array elements + C + */ + E1[1] = 1.0; + E1[2] = -1.0; + E1[3] = -1.0; + E1[4] = -1.0; + + for (I = 1; I <= N2; I++) { + E1[1] = ( E1[1] + E1[2] + E1[3] - E1[4]) * T; + E1[2] = ( E1[1] + E1[2] - E1[3] + E1[4]) * T; + E1[3] = ( E1[1] - E1[2] + E1[3] + E1[4]) * T; + E1[4] = (-E1[1] + E1[2] + E1[3] + E1[4]) * T; + } + + #ifdef PRINTOUT + IF (JJ==II)POUT(N2,N3,N2,E1[1],E1[2],E1[3],E1[4]); + #endif + + /* + C + C Module 3: Array as parameter + C + */ + for (I = 1; I <= N3; I++) + PA(E1); + + #ifdef PRINTOUT + IF (JJ==II)POUT(N3,N2,N2,E1[1],E1[2],E1[3],E1[4]); + #endif + + /* + C + C Module 4: Conditional jumps + C + */ + J = 1; + for (I = 1; I <= N4; I++) { + if (J == 1) + J = 2; + else + J = 3; + + if (J > 2) + J = 0; + else + J = 1; + + if (J < 1) + J = 1; + else + J = 0; + } + + #ifdef PRINTOUT + IF (JJ==II)POUT(N4,J,J,X1,X2,X3,X4); + #endif + + /* + C + C Module 5: Omitted + C Module 6: Integer arithmetic + C + */ + + J = 1; + K = 2; + L = 3; + + for (I = 1; I <= N6; I++) { + J = J * (K-J) * (L-K); + K = L * K - (L-J) * K; + L = (L-K) * (K+J); + E1[L-1] = J + K + L; + E1[K-1] = J * K * L; + } + + #ifdef PRINTOUT + IF (JJ==II)POUT(N6,J,K,E1[1],E1[2],E1[3],E1[4]); + #endif + + /* + C + C Module 7: Trigonometric functions + C + */ + X = 0.5; + Y = 0.5; + + for (I = 1; I <= N7; I++) { + X = T * DATAN(T2*DSIN(X)*DCOS(X)/(DCOS(X+Y)+DCOS(X-Y)-1.0)); + Y = T * DATAN(T2*DSIN(Y)*DCOS(Y)/(DCOS(X+Y)+DCOS(X-Y)-1.0)); + } + + #ifdef PRINTOUT + IF (JJ==II)POUT(N7,J,K,X,X,Y,Y); + #endif + + /* + C + C Module 8: Procedure calls + C + */ + X = 1.0; + Y = 1.0; + Z = 1.0; + + for (I = 1; I <= N8; I++) + P3(X,Y,&Z); + + #ifdef PRINTOUT + IF (JJ==II)POUT(N8,J,K,X,Y,Z,Z); + #endif + + /* + C + C Module 9: Array references + C + */ + J = 1; + K = 2; + L = 3; + E1[1] = 1.0; + E1[2] = 2.0; + E1[3] = 3.0; + + for (I = 1; I <= N9; I++) + P0(); + + #ifdef PRINTOUT + IF (JJ==II)POUT(N9,J,K,E1[1],E1[2],E1[3],E1[4]); + #endif + + /* + C + C Module 10: Integer arithmetic + C + */ + J = 2; + K = 3; + + for (I = 1; I <= N10; I++) { + J = J + K; + K = J + K; + J = K - J; + K = K - J - J; + } + + #ifdef PRINTOUT + IF (JJ==II)POUT(N10,J,K,X1,X2,X3,X4); + #endif + + /* + C + C Module 11: Standard functions + C + */ + X = 0.75; + + for (I = 1; I <= N11; I++) + X = DSQRT(DEXP(DLOG(X)/T1)); + + #ifdef PRINTOUT + IF (JJ==II)POUT(N11,J,K,X,X,X,X); + #endif + + /* + C + C THIS IS THE END OF THE MAJOR LOOP. + C + */ + if (++JJ <= II) + goto IILOOP; + + /* + C + C Stop benchmark timing at this point. + C + */ + finisec = time(0); + + /* + C---------------------------------------------------------------- + C Performance in Whetstone KIP's per second is given by + C + C (100*LOOP*II)/TIME + C + C where TIME is in seconds. + C-------------------------------------------------------------------- + */ + printf("\n"); + if (finisec-startsec <= 0) { + printf("Insufficient duration- Increase the LOOP count\n"); + return(1); + } + + #if 0 + printf("Loops: %ld, Iterations: %d, Duration: %ld sec.\n", + LOOP, II, finisec-startsec); + + KIPS = (100.0*LOOP*II)/(float)(finisec-startsec); + if (KIPS >= 1000.0) + printf("C Converted Double Precision Whetstones: %.1f MIPS\n", KIPS/1000.0); + else + printf("C Converted Double Precision Whetstones: %.1f KIPS\n", KIPS); + #endif + if (continuous) + goto LCONT; + + return(0); + } + + void + PA(double E[]) + { + J = 0; + + L10: + E[1] = ( E[1] + E[2] + E[3] - E[4]) * T; + E[2] = ( E[1] + E[2] - E[3] + E[4]) * T; + E[3] = ( E[1] - E[2] + E[3] + E[4]) * T; + E[4] = (-E[1] + E[2] + E[3] + E[4]) / T2; + J += 1; + + if (J < 6) + goto L10; + } + + void + P0(void) + { + E1[J] = E1[K]; + E1[K] = E1[L]; + E1[L] = E1[J]; + } + + void + P3(double X, double Y, double *Z) + { + double X1, Y1; + + X1 = X; + Y1 = Y; + X1 = T * (X1 + Y1); + Y1 = T * (X1 + Y1); + *Z = (X1 + Y1) / T2; + } + + #ifdef PRINTOUT + void + POUT(long N, long J, long K, double X1, double X2, double X3, double X4) + { + printf("%7ld %7ld %7ld %12.4e %12.4e %12.4e %12.4e\n", + N, J, K, X1, X2, X3, X4); + } + #endif From lattner at cs.uiuc.edu Sat Oct 18 02:09:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 02:09:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT Message-ID: <200310180708.CAA26148@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Misc: LICENSE.TXT updated: 1.1 -> 1.2 --- Log message: Add license info for whetstone --- Diffs of the changes: (+5 -0) Index: llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT diff -u llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT:1.1 llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT:1.2 --- llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT:1.1 Mon Oct 13 15:42:03 2003 +++ llvm/test/Programs/SingleSource/Benchmarks/Misc/LICENSE.TXT Sat Oct 18 02:07:52 2003 @@ -4,3 +4,8 @@ This benchmark is licensed to you under the LLVM license. It was written by M. Richards and M. J. Jordan. +------------------------------------------------------------------------------ +Whetstone +------------------------------------------------------------------------------ +(c) Copyright 1998 Painter Engineering, Inc. See source file for +license details. From lattner at cs.uiuc.edu Sat Oct 18 02:10:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 02:10:01 2003 Subject: [llvm-commits] CVS: llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c Message-ID: <200310180709.CAA26309@zion.cs.uiuc.edu> Changes in directory llvm/test/Programs/SingleSource/Benchmarks/Misc: whetstone.c updated: 1.1 -> 1.2 --- Log message: Don't print insufficient duration --- Diffs of the changes: (+1 -1) Index: llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c diff -u llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c:1.1 llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c:1.2 --- llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c:1.1 Sat Oct 18 02:06:43 2003 +++ llvm/test/Programs/SingleSource/Benchmarks/Misc/whetstone.c Sat Oct 18 02:09:04 2003 @@ -368,12 +368,12 @@ C-------------------------------------------------------------------- */ printf("\n"); +#if 0 if (finisec-startsec <= 0) { printf("Insufficient duration- Increase the LOOP count\n"); return(1); } -#if 0 printf("Loops: %ld, Iterations: %d, Duration: %ld sec.\n", LOOP, II, finisec-startsec); From lattner at cs.uiuc.edu Sat Oct 18 14:28:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 14:28:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/Miscompilation.cpp Message-ID: <200310181927.OAA02084@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: Miscompilation.cpp updated: 1.20 -> 1.21 --- Log message: If we detect a pass crash during miscompilation testing, immediately enter the crash debugger --- Diffs of the changes: (+4 -4) Index: llvm/tools/bugpoint/Miscompilation.cpp diff -u llvm/tools/bugpoint/Miscompilation.cpp:1.20 llvm/tools/bugpoint/Miscompilation.cpp:1.21 --- llvm/tools/bugpoint/Miscompilation.cpp:1.20 Fri Oct 17 19:14:13 2003 +++ llvm/tools/bugpoint/Miscompilation.cpp Sat Oct 18 14:27:48 2003 @@ -35,7 +35,7 @@ << " on the input program!\n"; BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); - exit(1); + exit(BD.debugCrash()); } // Check to see if the finished program matches the reference output... @@ -63,7 +63,7 @@ << " on the input program!\n"; BD.setPassesToRun(Prefix); BD.EmitProgressBytecode("pass-error", false); - exit(1); + exit(BD.debugCrash()); } // If the prefix maintains the predicate by itself, only keep the prefix! @@ -96,7 +96,7 @@ << " on the input program!\n"; BD.setPassesToRun(Suffix); BD.EmitProgressBytecode("pass-error", false); - exit(1); + exit(BD.debugCrash()); } // Run the result... @@ -210,7 +210,7 @@ std::cerr << " Error running this sequence of passes" << " on the input program!\n"; BD.EmitProgressBytecode("pass-error", false); - exit(1); + exit(BD.debugCrash()); } if (!EmitBytecode) From lattner at cs.uiuc.edu Sat Oct 18 14:32:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 14:32:01 2003 Subject: [llvm-commits] CVS: llvm/utils/NightlyTest.pl Message-ID: <200310181931.OAA02105@zion.cs.uiuc.edu> Changes in directory llvm/utils: NightlyTest.pl updated: 1.35 -> 1.36 --- Log message: Print stuff to stdout if something changes. --- Diffs of the changes: (+10 -0) Index: llvm/utils/NightlyTest.pl diff -u llvm/utils/NightlyTest.pl:1.35 llvm/utils/NightlyTest.pl:1.36 --- llvm/utils/NightlyTest.pl:1.35 Mon Oct 13 20:22:08 2003 +++ llvm/utils/NightlyTest.pl Sat Oct 18 14:31:39 2003 @@ -255,6 +255,10 @@ $WarningsAdded = AddPreTag $WarningsAdded; $WarningsRemoved = AddPreTag $WarningsRemoved; +# Output something to stdout if something has changed +print "ADDED WARNINGS:\n$WarningsAdded\n\n" if (length $WarningsAdded); +print "REMOVED WARNINGS:\n$WarningsRemoved\n\n" if (length $WarningsRemoved); + # # Get some statistics about CVS commits over the current day... @@ -396,6 +400,12 @@ $TestsFixed = AddPreTag $TestsFixed; $TestsBroken = AddPreTag $TestsBroken; } + +print "TESTS ADDED: \n$TestsAdded\n\n" if (length $TestsAdded); +print "TESTS REMOVED:\n$TestsRemoved\n\n" if (length $TestsRemoved); +print "TESTS FIXED: \n$TestsFixed\n\n" if (length $TestsFixed); +print "TESTS BROKEN: \n$TestsBroken\n\n" if (length $TestsBroken); + # If we built the tree successfully, runs of the Olden suite with # LARGE_PROBLEM_SIZE on so that we can get some "running" statistics. From lattner at cs.uiuc.edu Sat Oct 18 14:49:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 14:49:01 2003 Subject: [llvm-commits] CVS: llvm/lib/Bytecode/Reader/Reader.cpp Message-ID: <200310181948.OAA19015@zion.cs.uiuc.edu> Changes in directory llvm/lib/Bytecode/Reader: Reader.cpp updated: 1.85 -> 1.86 --- Log message: Fix warning --- Diffs of the changes: (+1 -0) Index: llvm/lib/Bytecode/Reader/Reader.cpp diff -u llvm/lib/Bytecode/Reader/Reader.cpp:1.85 llvm/lib/Bytecode/Reader/Reader.cpp:1.86 --- llvm/lib/Bytecode/Reader/Reader.cpp:1.85 Sat Oct 18 01:30:18 2003 +++ llvm/lib/Bytecode/Reader/Reader.cpp Sat Oct 18 14:48:10 2003 @@ -447,6 +447,7 @@ LinkageID = (VarType >> 2) & 3; } switch (LinkageID) { + default: assert(0 && "Unknown linkage type!"); case 0: Linkage = GlobalValue::ExternalLinkage; break; case 1: Linkage = GlobalValue::WeakLinkage; break; case 2: Linkage = GlobalValue::AppendingLinkage; break; From lattner at cs.uiuc.edu Sat Oct 18 15:19:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 15:19:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/ExecutionDriver.cpp Message-ID: <200310182018.PAA01002@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: ExecutionDriver.cpp updated: 1.25 -> 1.26 --- Log message: Default to using the CBE instead of the Interpreter if no -run-* option is specified --- Diffs of the changes: (+2 -1) Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.25 llvm/tools/bugpoint/ExecutionDriver.cpp:1.26 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.25 Tue Oct 14 17:24:31 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Sat Oct 18 15:18:20 2003 @@ -37,7 +37,8 @@ clEnumValN(RunJIT, "run-jit", "Execute with JIT"), clEnumValN(RunLLC, "run-llc", "Compile with LLC"), clEnumValN(RunCBE, "run-cbe", "Compile with CBE"), - 0)); + 0), + cl::init(RunCBE)); cl::opt InputFile("input", cl::init("/dev/null"), From lattner at cs.uiuc.edu Sat Oct 18 15:31:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 15:31:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/ExecutionDriver.cpp Message-ID: <200310182030.PAA03333@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: ExecutionDriver.cpp updated: 1.26 -> 1.27 --- Log message: Change run-lli -> run-int Many people associate lli with the jit, so we don't want to suprise them --- Diffs of the changes: (+1 -1) Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.26 llvm/tools/bugpoint/ExecutionDriver.cpp:1.27 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.26 Sat Oct 18 15:18:20 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Sat Oct 18 15:30:48 2003 @@ -33,7 +33,7 @@ cl::opt InterpreterSel(cl::desc("Specify how LLVM code should be executed:"), - cl::values(clEnumValN(RunLLI, "run-lli", "Execute with LLI"), + cl::values(clEnumValN(RunLLI, "run-int", "Execute with the interpreter"), clEnumValN(RunJIT, "run-jit", "Execute with JIT"), clEnumValN(RunLLC, "run-llc", "Compile with LLC"), clEnumValN(RunCBE, "run-cbe", "Compile with CBE"), From lattner at cs.uiuc.edu Sat Oct 18 15:37:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 15:37:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/bugpoint.html Message-ID: <200310182036.PAA03398@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: bugpoint.html updated: 1.6 -> 1.7 --- Log message: Beef up the description of bugpoint a lot. Update for renamed options --- Diffs of the changes: (+50 -19) Index: llvm/docs/CommandGuide/bugpoint.html diff -u llvm/docs/CommandGuide/bugpoint.html:1.6 llvm/docs/CommandGuide/bugpoint.html:1.7 --- llvm/docs/CommandGuide/bugpoint.html:1.6 Thu Oct 16 15:15:17 2003 +++ llvm/docs/CommandGuide/bugpoint.html Sat Oct 18 15:36:15 2003 @@ -16,29 +16,60 @@

      DESCRIPTION

      The bugpoint tool is a generally useful tool for narrowing down -problems in LLVM tools and passes.

      - -bugpoint reads the specified list of .bc or .ll files specified on the -command-line and links them together. It then runs the specified LLVM passes on -the resultant bytecode file. If any of the passes crash, or if they produce an -LLVM module which is not verifiable, bugpoint enters "crash debugging mode". -Otherwise, bugpoint tries to run the resultant program with a code -generator. If the code generated program does not match the reference output, -it enters "miscompilation debugging mode". +problems in LLVM tools and passes. It can be used to debug three types of +failures: optimizer crashes, miscompilations by optimizers, or invalid native +code generation. It aims to reduce testcases to something useful. For example, +if gccas crashes while optimizing a file, it +will identify the optimization (or combination of optimizations) that causes the +crash, and reduce the file down to a small example which triggers the crash.

      + +bugpoint reads the specified list of .bc or .ll files +specified on the command-line and links them together. If any LLVM passes are +specified on the command line, it runs these passes on the resultant module. If +any of the passes crash, or if they produce an LLVM module which is not +verifiable, bugpoint enters crash debugging +mode.

      + +Otherwise, if the -output option was not +specified, bugpoint runs the initial program with the C backend (which +is assumed to generate good code) to generate a reference output. Once +bugpoint has a reference output to match, it tries executing the +original program with the selected code generator. If +the resultant output is different than the reference output, it exters code generator debugging mode.

      + +Otherwise, bugpoint runs the LLVM program after all of the LLVM passes +have been applied to it. If the executed program matches the reference output, +there is no problem bugpoint can debug. Otherwise, it enters miscompilation debugging mode.

      +

      Crash debugging mode

      -If a pass crashes, bugpoint will try to narrow down the list of passes and the -code to a more manageable amount. Using a sophisticated binary-search algorithm, -bugpoint pares down the list of passes to a minimum set. - -[unfinished] +If an optimizer crashes, bugpoint will try a variety of techniques to +narrow down the list of passes and the code to a more manageable amount. First, +bugpoint figures out which combination of passes trigger the bug. This +is useful when debugging a problem exposed by gccas for example, +because it has over 30 optimization it runs.

      + +Next, bugpoint tries removing functions from the module, to reduce the +size of the testcase to a reasonable amount. Usually it is able to get it down +to a single function for intraprocedural optimizations. Once the number of +functions has been reduced, it attempts to delete various edges in the control +flow graph, to reduce the size of the function as much as possible. Finally, +bugpoint deletes any individual LLVM instructions whose absense does +not eliminate the failure. At the end, bugpoint should tell you what +passes crash, give you a bytecode file, and give you instructions on how to +reproduce the failure with opt or +analyze.

      -

      Miscompilation debugging mode

      + +

      Code generator debugging mode

      TODO -

      Code generator debugging mode

      +
      +

      Miscompilation debugging mode

      TODO @@ -65,7 +96,7 @@ Print a summary of command line options.

      -

    • -input <filename> +
    • -input <filename>
      Specify the contents of <stdin> when the program must be executed.

      @@ -80,12 +111,12 @@ opt -load <plugin.so> -help

      -

    • -output <filename> +
    • -output <filename>
      Specify a reference output for the <stdout> file stream.

      -

    • -run-(lli|jit|llc|cbe) +
    • -run-(int|jit|llc|cbe)
      Specify which code generator bugpoint should use to run the program. From lattner at cs.uiuc.edu Sat Oct 18 15:55:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 15:55:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/bugpoint.html Message-ID: <200310182054.PAA03940@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: bugpoint.html updated: 1.7 -> 1.8 --- Log message: * Add the -additional-so option * Add info about codegen and miscompilation mode --- Diffs of the changes: (+56 -30) Index: llvm/docs/CommandGuide/bugpoint.html diff -u llvm/docs/CommandGuide/bugpoint.html:1.7 llvm/docs/CommandGuide/bugpoint.html:1.8 --- llvm/docs/CommandGuide/bugpoint.html:1.7 Sat Oct 18 15:36:15 2003 +++ llvm/docs/CommandGuide/bugpoint.html Sat Oct 18 15:54:37 2003 @@ -23,12 +23,22 @@ will identify the optimization (or combination of optimizations) that causes the crash, and reduce the file down to a small example which triggers the crash.

      +bugpoint has been designed to be a useful tool without requiring any +hooks into the LLVM intrastructure at all. It works with any and all LLVM +passes and code generators, and does not need to "know" how they work. Because +of this, it may appear to do a lot of stupid things or miss obvious +simplifications. Remember, however, that computer time is much cheaper than +programmer time, so if it takes a long time to reduce a testcase it is still +worth it. :)

      + + +

      Automatic Mode Selection

      + bugpoint reads the specified list of .bc or .ll files specified on the command-line and links them together. If any LLVM passes are specified on the command line, it runs these passes on the resultant module. If -any of the passes crash, or if they produce an LLVM module which is not -verifiable, bugpoint enters crash debugging -mode.

      +any of the passes crash, or if they produce a malformed LLVM module, +bugpoint enters crash debugging mode.

      Otherwise, if the -output option was not specified, bugpoint runs the initial program with the C backend (which @@ -66,43 +76,63 @@

      Code generator debugging mode

      -TODO +The code generator debugger attempts to narrow down the amount of code that is +being miscompiled by the selected code generator. To do +this, it takes the LLVM program and partitions it into two pieces: one piece +which it compiles with the C backend (into a shared object), and one piece which +it runs with either the JIT or the static LLC compiler. It uses several +techniques to reduce the amount of code pushed through the LLVM code generator, +to reduce the potential scope of the problem. After it is finished, it emits +two bytecode files (the "test" [to be compiled with the code generator] and +"safe" [to be compiled with the C backend] modules), and instructions for +reproducing the problem. This module assume the C backend produces good +code.

      + +If you are using this mode and get an error message that says "Non-instruction +is using an external function!", try using the -run-llc option instead +of the -run-jit option. This is due to an unimplemented feature in the +code generator debugging mode.

      Miscompilation debugging mode

      -TODO +The miscompilation debugging mode works similarly to the code generator +debugging mode. It works by splitting the program into two pieces, running the +optimizations specified on one piece, relinking the program, then executing it. +It attempts to narrow down the list of passes to the one (or few) which are +causing the miscompilation, then reduce the portion of the program which is +being miscompiled. This module assumes that the selected code generator is +working properly.

      OPTIONS

      EXIT STATUS

      From lattner at cs.uiuc.edu Sat Oct 18 15:58:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 15:58:00 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/bugpoint.html Message-ID: <200310182057.PAA03969@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: bugpoint.html updated: 1.8 -> 1.9 --- Log message: Expand the --args section --- Diffs of the changes: (+10 -1) Index: llvm/docs/CommandGuide/bugpoint.html diff -u llvm/docs/CommandGuide/bugpoint.html:1.8 llvm/docs/CommandGuide/bugpoint.html:1.9 --- llvm/docs/CommandGuide/bugpoint.html:1.8 Sat Oct 18 15:54:37 2003 +++ llvm/docs/CommandGuide/bugpoint.html Sat Oct 18 15:57:23 2003 @@ -116,8 +116,17 @@ run.

    • -args <arguments>
      + All arguments specified after -args are passed into the - executed program when the program must be executed.

      + executed program when the program must be executed. Note that if the + program takes an argument which starts with a '-', you should use: +

      + bugpoint .... -args -- (the arguments here) +

      + The "--" right after the -args option tells + bugpoint to consider any options starting with - to be + part of the -args option, not as options to bugpoint + itself.

    • -disable-(adce,dce,final-cleanup,simplifycfg)
      bugpoint uses several passes internally for cleanup routines to From lattner at cs.uiuc.edu Sat Oct 18 16:04:00 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 16:04:00 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/ExecutionDriver.cpp Message-ID: <200310182103.QAA04230@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: ExecutionDriver.cpp updated: 1.27 -> 1.28 --- Log message: Don't leave a trail of bugpoint-execution-output-* breadcrumbs all over the place --- Diffs of the changes: (+4 -0) Index: llvm/tools/bugpoint/ExecutionDriver.cpp diff -u llvm/tools/bugpoint/ExecutionDriver.cpp:1.27 llvm/tools/bugpoint/ExecutionDriver.cpp:1.28 --- llvm/tools/bugpoint/ExecutionDriver.cpp:1.27 Sat Oct 18 15:30:48 2003 +++ llvm/tools/bugpoint/ExecutionDriver.cpp Sat Oct 18 16:02:51 2003 @@ -195,7 +195,11 @@ } FilesDifferent = true; } + + // Remove the generated output. + removeFile(Output); + // Remove the bytecode file if we are supposed to. if (RemoveBytecode) removeFile(BytecodeFile); return FilesDifferent; } From lattner at cs.uiuc.edu Sat Oct 18 16:10:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 16:10:01 2003 Subject: [llvm-commits] CVS: llvm/tools/bugpoint/CodeGeneratorBug.cpp Message-ID: <200310182109.QAA04550@zion.cs.uiuc.edu> Changes in directory llvm/tools/bugpoint: CodeGeneratorBug.cpp updated: 1.22 -> 1.23 --- Log message: Print -fno-strict-aliasing as well --- Diffs of the changes: (+1 -1) Index: llvm/tools/bugpoint/CodeGeneratorBug.cpp diff -u llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.22 llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.23 --- llvm/tools/bugpoint/CodeGeneratorBug.cpp:1.22 Tue Oct 14 16:59:36 2003 +++ llvm/tools/bugpoint/CodeGeneratorBug.cpp Sat Oct 18 16:08:57 2003 @@ -259,7 +259,7 @@ #else << " -shared" // `-shared' for Linux/X86, maybe others #endif - << "\n"; + << " -fno-strict-aliasing\n"; } else { removeFile(TestModuleBC); removeFile(SafeModuleBC); From lattner at cs.uiuc.edu Sat Oct 18 16:35:01 2003 From: lattner at cs.uiuc.edu (Chris Lattner) Date: Sat Oct 18 16:35:01 2003 Subject: [llvm-commits] CVS: llvm/docs/CommandGuide/bugpoint.html Message-ID: <200310182134.QAA07430@zion.cs.uiuc.edu> Changes in directory llvm/docs/CommandGuide: bugpoint.html updated: 1.9 -> 1.10 --- Log message: Add bugpoint advice section --- Diffs of the changes: (+30 -1) Index: llvm/docs/CommandGuide/bugpoint.html diff -u llvm/docs/CommandGuide/bugpoint.html:1.9 llvm/docs/CommandGuide/bugpoint.html:1.10 --- llvm/docs/CommandGuide/bugpoint.html:1.9 Sat Oct 18 15:57:23 2003 +++ llvm/docs/CommandGuide/bugpoint.html Sat Oct 18 16:34:15 2003 @@ -105,6 +105,35 @@ working properly.

      + +

      Advice for using bugpoint

      + +bugpoint can be a remarkably useful tool, but it sometimes works in +non-obvious ways. Here are some hints and tips:

      + +

        +
      1. In code generator and miscompilation debugging modes, bugpoint only + works with programs that have deterministic output. Thus, if the program + outputs the date, time, or any other "random" data, it should be masked out. + +
      2. In code generator and miscompilation debugging modes, debugging will go + faster if you manually modify the program or its inputs to reduce the + runtime, but still exhibit the problem. + +
      3. bugpoint is extremely useful when working on a new optimization: + it helps track down regressions quickly. To avoid having to relink + bugpoint every time you change your optization however, have + bugpoint dynamically load your optimization with the -load option. + +
      4. bugpoint can generate a lot of output and run for a long period of + time. It is often useful to capture the output of the program to file. For + example:
        + bugpoint ..... |& tee bugpoint.log

        + +

      + +

      OPTIONS