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    }