Skip to content
Snippets Groups Projects
pre-config.rb.in 4.1 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Which directories to search?
    def search_directories
      dirs = [
              "/usr/include/fox-1.6",
              "/usr/local/include/fox-1.6",
    
              "/sw/include/fox-1.6",
    	  "/opt/local/include/fox-1.6"
    
             ]
      ARGV.each do |arg|
        if arg =~ /--with-fox-include/
          option, value = arg.split('=')
          dirs = [ value ] + dirs
          dirs.uniq! # remove duplicates
        end
      end
      dirs
    end
    
    # Return true if found in any of the search directories
    def fox_include_files_found?
      search_directories.each do |path|
        filename = File.join(path, "fxver.h")
    
        return true if FileTest.exist?(filename)
    
      end
      false
    end
    
    # Read installed FOX version info from fxver.h include file
    def read_fox_version(filename)
      foxMajor, foxMinor, foxLevel = nil, nil, nil
      File.foreach(filename) do |line|
        if    line =~ /FOX_MAJOR/
          foxMajor = line.split()[2]
        elsif line =~ /FOX_MINOR/
          foxMinor = line.split()[2]
        elsif line =~ /FOX_LEVEL/
          foxLevel = line.split()[2]
        end
      end
      [foxMajor, foxMinor, foxLevel]
    end
    
    # Returns a string (e.g. "1.0.36") indicating the installed version of FOX.
    def installed_fox_version
      search_directories.each do |path|
        filename = File.join(path, "fxver.h")
    
        if FileTest.exist?(filename)
    
          foxMajor, foxMinor, foxLevel = read_fox_version(filename)
          return [foxMajor, foxMinor, foxLevel].join('.')
        end
      end
      raise RuntimeError, "couldn't find FOX header files"
    end
    
    #
    # Confirm that FOX is installed; check for an "fxver.h"
    # include file in the directory specified via the
    # --with-fox-include command line argument (if any),
    # as well as /usr/include/fox-1.6, /usr/local/include/fox-1.6 and
    # /sw/include/fox-1.6.
    #
    unless fox_include_files_found?
      puts ""
      puts "   **********************************************************************"
      puts "   *                            Hey!                                    *"
      puts "   *                    Where is FOX installed?                         *"
      puts "   *                                                                    *"
      puts "   * I couldn't locate 'fxver.h' in any of the following directories:   *"
      puts "   *                                                                    *"
      search_directories.each { |incdir| puts "   *    #{incdir}" }
      puts "   *                                                                    *"
      puts "   * Please specify the locations for the FOX header files and library  *"
      puts "   * using the --with-fox-include and --with-fox-lib options to         *"
      puts "   * extconf.rb as described in the FXRuby installation instructions.   *"
      puts "   **********************************************************************"
      puts ""
      exit
    end
    
    #
    # Stable releases of FXRuby (i.e. FXRuby-1.0.x) should go with stable releases
    # of FOX (i.e. fox-1.0.x) but it's only necessary for the major and minor version
    # numbers to match. For example, FXRuby-1.0.22 should work fine with fox-1.0.40.
    #
    # Development releases of FXRuby (e.g. FXRuby-1.1.65) must go with a specific
    # development version of FOX, usually the one with the same version number
    # (e.g. fox-1.1.65). All three version numbers must match.
    #
    
    instMajor, instMinor, instLevel = installed_fox_version().split('.')
    thisMajor, thisMinor, thisLevel = "@@FOX_VERSION@@".split('.')
    
    expecting_stable_fox_release = ((thisMinor.to_i % 2) == 0)
    if expecting_stable_fox_release
      if (instMinor != thisMinor)
        puts ""
        puts "   ********************************************************"
        puts "   * This version of FXRuby (@@FXRUBY_VERSION@@) must be built against"
        puts "   * one of the stable releases of FOX, but it appears that"
        puts "   * you have a development version of FOX (version #{installed_fox_version})"
        puts "   * installed instead. Please download and install one of"
        puts "   * the stable releases of FOX first, and then try again."
        puts "   ********************************************************"
        puts ""
        exit
      end
    else
      # Minor version number is odd, so it's a development release
      raise RuntimeError unless ((instMajor == thisMajor) && (instMinor == thisMinor) && (instLevel == thisLevel))
    end