001 // This file is part of the program FRYSK. 002 // 003 // Copyright 2008, Red Hat Inc. 004 // 005 // FRYSK is free software; you can redistribute it and/or modify it 006 // under the terms of the GNU General Public License as published by 007 // the Free Software Foundation; version 2 of the License. 008 // 009 // FRYSK is distributed in the hope that it will be useful, but 010 // WITHOUT ANY WARRANTY; without even the implied warranty of 011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 012 // General Public License for more details. 013 // 014 // You should have received a copy of the GNU General Public License 015 // along with FRYSK; if not, write to the Free Software Foundation, 016 // Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. 017 // 018 // In addition, as a special exception, Red Hat, Inc. gives You the 019 // additional right to link the code of FRYSK with code not covered 020 // under the GNU General Public License ("Non-GPL Code") and to 021 // distribute linked combinations including the two, subject to the 022 // limitations in this paragraph. Non-GPL Code permitted under this 023 // exception must only link to the code of FRYSK through those well 024 // defined interfaces identified in the file named EXCEPTION found in 025 // the source code files (the "Approved Interfaces"). The files of 026 // Non-GPL Code may instantiate templates or use macros or inline 027 // functions from the Approved Interfaces without causing the 028 // resulting work to be covered by the GNU General Public 029 // License. Only Red Hat, Inc. may make changes or additions to the 030 // list of Approved Interfaces. You must obey the GNU General Public 031 // License in all respects for all of the FRYSK code and other code 032 // used in conjunction with FRYSK except the Non-GPL Code covered by 033 // this exception. If you modify this file, you may extend this 034 // exception to your version of the file, but you are not obligated to 035 // do so. If you do not wish to provide this exception without 036 // modification, you must delete this exception statement from your 037 // version and license this file solely under the GPL without 038 // exception. 039 040 package frysk.debuginfo; 041 042 import frysk.rsl.Log; 043 044 public class GNURedHatCompilerVersion extends CompilerVersion implements 045 Comparable { 046 047 private static Log fine = Log.fine(GNURedHatCompilerVersion.class); 048 049 private int version; 050 private int minorVersion; 051 private int patchLevel; 052 private int RHRelease; 053 054 private static GNURedHatCompilerVersion minSupportingClassType = new GNURedHatCompilerVersion( 055 "GNURedHatCompilerVersionSupportsClassType", 4, 1, 2, 37); 056 057 private static GNURedHatCompilerVersion minSupportingInterfaceType = new GNURedHatCompilerVersion( 058 "GNURedhatCompilerVersionSupportsInterfaceType", 4, 3, 0, 7); 059 060 public GNURedHatCompilerVersion(String string, int version, 061 int minorVersion, int patchLevel, int RHRelease) { 062 super(string); 063 064 fine.log(this, "Setting up GNU compiler"); 065 this.version = version; 066 this.minorVersion = minorVersion; 067 this.patchLevel = patchLevel; 068 this.RHRelease = RHRelease; 069 } 070 071 public boolean supportsClassType() { 072 boolean ret = this.compareTo(minSupportingClassType) >= 0; 073 fine.log(this, "Entering supportsClassType, returning: ", Boolean.valueOf(ret)); 074 return ret; 075 } 076 077 public boolean supportsInterfaceType() { 078 return this.compareTo(minSupportingInterfaceType) >= 0; 079 } 080 081 public int compareTo(Object arg0) { 082 fine.log("Entering compareTo, arg: ", arg0); 083 GNURedHatCompilerVersion that = (GNURedHatCompilerVersion) arg0; 084 085 if (this.version != that.version) { 086 return this.version - that.version; 087 } else if (this.minorVersion != that.minorVersion) { 088 return this.minorVersion - that.minorVersion; 089 } else if (this.patchLevel != that.patchLevel) { 090 return this.patchLevel - that.patchLevel; 091 } else { 092 return this.RHRelease - that.RHRelease; 093 } 094 } 095 096 }