aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/configure
diff options
context:
space:
mode:
Diffstat (limited to 'externals/gridflow/configure')
-rwxr-xr-xexternals/gridflow/configure1277
1 files changed, 0 insertions, 1277 deletions
diff --git a/externals/gridflow/configure b/externals/gridflow/configure
deleted file mode 100755
index 1cfed471..00000000
--- a/externals/gridflow/configure
+++ /dev/null
@@ -1,1277 +0,0 @@
-#!/usr/bin/env ruby
-# $Id: configure,v 1.2 2006-03-15 04:48:05 matju Exp $
-=begin
- GridFlow
- Copyright (c) 2001,2002,2003,2004,2005,2006 by Mathieu Bouchard
-
- 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.
-
- See file ./COPYING for further informations on licensing terms.
-
- 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.
-=end
-
-require "rbconfig"
-require "mkmf"
-require "ftools"
-include Config
-OSX = !!( CONFIG["arch"] =~ /darwin/ )
-
-require "win32/process" if CONFIG["arch"] =~ /mingw/
-LOG = File.open "./config.log", "w"
-
-Red = "\e[0;1;31m"
-Green = "\e[0;1;32m"
-Light = "\e[0m"
-Dark = "\e[0;1;30m"
-Yellow = "\e[0;1;33;44m"
-
-$verbose=false
-LOG.puts "-"*64
-LOG.puts "Environment Variables: "
-ENV.each {|k,v| LOG.puts "#{k}=#{v}" }
-LOG.puts "-"*64
-
-puts
-if not File.exist?("./configure")
- puts "Run me from the right directory please."
- exit 1
-end
-
-begin
- Dir.mkdir "tmp"
-rescue Errno::EEXIST
-end
-
-#----------------------------------------------------------------#
-
-class Or
- attr_reader :a
- class<<self; alias [] new end
- def initialize(*a) @a=a end
- def to_s; @a.join " or "; end
-end
-
-def launch2(log,*command)
- log << command.join(" ") << "\n"
- r,w = IO.pipe
- child = launch(nil,w,w,*command)
- w.close
- log << r.readlines.join << "\n"
- ret = join_pid(child)
- ret = ret.to_int if RUBY_VERSION > "1.7"
- log << "error \##{ret}\n" if ret>0
- return ret<=0
-end
-
-$conf={
- :LDSOFLAGS => ["-lm"],
- :BRIDGE_LDFLAGS => ["-lm"],
- :FEATURES => {},
- :OPTIONS => [],
- :DEFINES => {
-# :RUBY_PREFIX => CONFIG['prefix'],
- :RUBY_PREFIX => nil,
- :PREFIX => "/usr/local",
- :CPU => nil,
- :RUBY_ARCH => CONFIG['arch'],
- :GEM_SOURCE => "../Gem/src",
- },
- :CC => "g++",
- :OBJS => [],
-}
-
-def launch stdin,stdout,stderr,*command # -> returncode
- child = fork
- if not child then
- STDIN .reopen stdin if stdin
- STDOUT.reopen stdout if stdout
- STDERR.reopen stderr if stderr
- exec *command
- #!@#$ what happens with exception upon exec ?
- end
- child
-end
-
-def join_pid pid
- Process.waitpid2(pid)[1]
-end
-
-module Future; end
-
-class Feature
- $features = []
- def self.add(*a,&b) $features << Feature.new(*a,&b) end
- def initialize(&b) instance_eval(&b) end
- def self.attr2(sym,&b)
- eval "def #{sym}(*args,&b)
- raise args.inspect if args.length>1
- if b then @#{sym}=b.extend Future
- elsif args.length>0 then @#{sym}=args[0]
- else if Future===@#{sym} then @#{sym}.call else @#{sym} end end end"
- end
- attr2 :tag
- attr2 :name
- attr2 :status #!@#$
- attr2 :uses_so
- attr2 :uses_bridge_so
- attr2 :uses_o #!@#$
- attr2 :uses_h
- attr2 :uses_feature
- attr2 :test
- attr2 :options #!@#$
- attr2 :unless_feature #!@#$
- attr2 :action #!@#$
- attr2 :defines #!@#$
-
- def find_h name
- $C_INCLUDE_PATH.find {|x| File.exist?(x+"/"+name)}
- end
-
- def c_test code, link=nil, options=[], feature=nil
- link = (uses_so||[]).dup if not link
- link=link.flatten
- ldlpath = ENV["LD_LIBRARY_PATH"]
- uses_h.each {|h|
- find_h h or
- /framework/ =~ (uses_so||[]).join(" ") or
- raise "where is #{h} ?"
- } if uses_h
- ENV["LD_LIBRARY_PATH"] = ldlpath ? "./tmp:#{ldlpath}" : "./tmp"
- link[0,0]=$conf[:LDSOFLAGS].find_all {|x| String===x and /^-L/ =~ x }.flatten
- code=code.gsub(/#include#/) {
- uses_h.map {|inc| "#include <#{inc}>\n" }.join""
- }
- log = ""
- log << code << "\n"
- binname = "tmp/#{$$}"
- sourcename = binname+".cpp"
- File.open(sourcename,"w") {|f| f.puts code }
- command = ["/usr/bin/env", $conf[:CC]] +
- $CFLAGS.split(/ /).reject{|x| x.length==0 }
- if not launch2 log,*(command+options+[sourcename,
- "-o", binname, *link])
- pat = Regexp.new("^"+Regexp.quote(sourcename)+":\\d+: ")
- errs = log.split("\n").find_all {|l| pat =~ l }
- raise "gcc compilation error" if not errs or
- errs.length==0
- errs = errs[0].gsub(pat,"")
- raise "gcc: #{errs}"
- end
- if not launch2 log,"tmp/#{$$}"
- raise "runtime error"
- end
- return true
- ensure
- LOG.puts log
- ENV["LD_LIBRARY_PATH"] = ldlpath if ldlpath
- end
-
- def asm_test code, *link
- log = ""
- log << code << "\n"
- File.open("tmp/#{$$}.asm","w") {|f| f.puts code }
- command = ["/usr/bin/env", "nasm",
- "tmp/#{$$}.asm", "-f", "elf", "-o", "tmp/#{$$}.o"]
- launch2 log,*command or return false
- command = ["#{$conf[:CC]}","-o","tmp/#{$$}","tmp/#{$$}.o",*link]
- launch2 log,*command or return false
- command = ["tmp/#{$$}"]
- launch2 log,*command or return false
- true
- ensure
- LOG.puts log
- end
-end
-
-#----------------------------------------------------------------#
-
-def make_expand(x)
- y=x.gsub(/\$\(([^\)]*)\)/) {CONFIG[$1]}
- if x!=y then make_expand y else y end
-end
-
-def read_ld_so_conf
- return [] unless File.exist?("/etc/ld.so.conf")
- x = File.open("/etc/ld.so.conf"){|f| f.read }.split("\s")
- x.delete_if { x.length==0 }
- x
-end
-
-def epath x; (ENV[x]||"").split(":") end
-
-$C_INCLUDE_PATH = (
- epath("CPLUS_INCLUDE_PATH") +
- epath("C_INCLUDE_PATH") +
- ["/usr/include"]).uniq
-
-$LIBRARY_PATH = (
- epath("LIBRARY_PATH") +
- ["/usr/lib","/lib"]).uniq
-
-$LD_LIBRARY_PATH = (
- epath("LD_LIBRARY_PATH") +
- read_ld_so_conf +
- ["/usr/lib","/lib"]).uniq
-$LIBX11DIR = ["-L/usr/X11R6/lib"]
-$LIBX11 = ["-L/usr/X11R6/lib","-lX11"]
-
-# making it easier for everybody I hope:
-def prepend_path base
- bl = base+"/lib"
- bi = base+"/include"
- if not $LD_LIBRARY_PATH.include? bl and
- not $LIBRARY_PATH.include? bl then
- $conf[:LDSOFLAGS].unshift "-L"+bl
- $LD_LIBRARY_PATH.unshift bl
- $LIBRARY_PATH.unshift bl
- end
- #and not $CPLUS_INCLUDE_PATH.include? bi
- if not $C_INCLUDE_PATH.include? bi then
- $CFLAGS += " -I"+bi
- $C_INCLUDE_PATH.unshift bi
- end
-end
-prepend_path "/Applications/Pd.app/Contents/Resources" if OSX
-prepend_path "/sw" if OSX
-prepend_path "/usr/local"
-prepend_path ENV["HOME"]
-# prepend_path "."
-
-for var in [:$C_INCLUDE_PATH, :$LIBRARY_PATH, :$LD_LIBRARY_PATH] do
- LOG.puts "#{var}: #{eval(var.to_s).inspect}"
-end
-
-$conf[:BINDIR] = make_expand CONFIG['bindir']
-
-LOG.puts "-"*64
-
-$CFLAGS += " -xc++ -fno-operator-names -fno-omit-frame-pointer"
-$CFLAGS += " -I/usr/X11R6/include"
-$C_INCLUDE_PATH.unshift "/usr/X11R6/include"
-
-ruby16a = "#{CONFIG['libdir']}/ruby/#{CONFIG['MAJOR']}.#{CONFIG['MINOR']}/"\
-"#{CONFIG['arch']}/#{CONFIG['LIBRUBY_A']}"
-ruby18a = "#{CONFIG['libdir']}/#{CONFIG['LIBRUBY_A']}"
-for x in [ruby16a,ruby18a] do
- $LIBRUBY_A = make_expand x
- break if File.exist? $LIBRUBY_A
-end
-
-FILES = [
- [:directory, "base/",
- [:ruby, "main.rb"],
- [:ruby, "flow_objects.rb"],
- [:ruby, "test.rb"],
- [:ruby, "source_filter.rb"],
- ],
- [:directory, "bridge/",
- [:ruby, "puredata.rb"],
- [:ruby, "placebo.rb"],
- ],
- [:directory, "format/",
- [:ruby, "main.rb"],
- ],
- [:directory, "optional/",
- [:ruby, "usb.rb"],
- [:ruby, "lti.rb"],
- ],
- [:directory, "extra/",
- [:ruby, "smpte.rb"],
- [:ruby, "server_2.rb"],
- [:ruby, "server_1_grid.rb"],
- [:ruby, "server_1_ppm.rb"],
- [:ruby, "jmax_format.rb"],
- [:ruby, "puredata_format.rb"],
- ],
-]
-
-#----------------------------------------------------------------#
-Feature.add {
- tag :gcc3
- name "GNU C++ Compiler 3"
- options ["HAVE_GCC3"]
-=begin
- test proc {
- pi=File.popen "#{$conf[:CC]} -v 2>&1", "r"
- vline = pi.readlines.find {|l| /gcc version ([\d\.]+)/.match l }
- version = $1
- pi.close
- if version < "3" then raise "version #{version} < 3" end
- true
- }
-=end
- test proc {
- c_test %{
- #include <stdio.h>
- int main () {
- printf("GCC_VERSION %d.%d.%d\\n", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
- return !(__GNUC__>=3);
- }}
- }
- defines :GCC_VERSION => proc {
- m = /GCC_VERSION\s+(.*)/.match(File.popen("tmp/#{$$}","r"){|f| f.read })
- m[1]
- }
-
-}
-Feature.add {
- tag :stl
- name "C++ Standard Template Library"
- test proc {
- c_test %{
- #include <vector>
- int main () {
- std::vector<int> foo;
- }}
- }
-}
-Feature.add {
- tag :gcc64
- name "GNU C++ in 64-bit mode"
- options ["GCC64"]
- test proc {
- c_test %{
- #include <stdio.h>
- #include <stdlib.h>
- #include <cstddef>
- #define T(a) printf("%s:%ld; ",#a,(long)sizeof(a));
- int main () {
- T(void *)T(ptrdiff_t)T(off_t)T(size_t)puts("");
- T(char)T(short)T(int)T(long)T(long long)puts("");
- T(float)T(double)puts("");
- return !( sizeof(void*)==8 );
- }}
- }
-}
-
-#----------------------------------------------------------------#
-
-Feature.add {
- tag :libc_stack_end
- name "Stack end defined by LibC"
- status :disabled
- test proc { c_test '
- #include <stdio.h>
- extern void *__libc_stack_end;
- int main () {
- printf("#define STACK_END 0x%0*lx",sizeof(long)*2,__libc_stack_end);
- return 0;
- }
- ', uses_bridge_so }
- defines :HAVE_LIBC_STACK_END
- defines :STACK_END => proc {
- m = /STACK_END\s+(.*)/.match(File.popen("tmp/#{$$}","r"){|f| f.read })
- m[1]
- }
-}
-Feature.add {
- tag :segv_stack_end
- name "Stack end probed"
- test proc { c_test %`
- /* the segfault trick (by Mathieu Bouchard) */
- #ifndef STACK_GROW_DIRECTION
- #define STACK_GROW_DIRECTION -1
- #endif
- #include <stdio.h>
- #include <signal.h>
- #include <setjmp.h>
- static volatile long bogus = 0; // to force *bp to be read in memory
- static sigjmp_buf rescue_segfault;
- static void trap_segfault (int patate) { siglongjmp(rescue_segfault,11); }
- int main () {
- // get any stack address
- volatile long * volatile bp = (volatile long *)&bp;
- void (*oldsegv)(int) = signal(SIGSEGV,trap_segfault);
- void (*oldbus)(int) = signal(SIGBUS, trap_segfault);
- if (!sigsetjmp(rescue_segfault,0)) for (;;bp-=STACK_GROW_DIRECTION) bogus += *bp;
- printf("#define STACK_END 0x%0*lx\\n",sizeof(long)*2,(long)(bp+STACK_GROW_DIRECTION));
- return 0;
- }
- `, uses_bridge_so }
- defines :HAVE_LIBC_STACK_END
- defines :STACK_END => proc {
- m = /STACK_END\s+(.*)/.match(File.popen("tmp/#{$$}","r"){|f| f.read })
- m[1]
- }
-}
-Feature.add {
- tag :wild_stack_end
- name "Stack end wild guess"
- unless_feature [:libc_stack_end,:segv_stack_end]
- test proc { c_test '
- #include <stdio.h>
- int main () {
- void *bp;
- printf("#define STACK_END 0x%0*lx",sizeof(long)*2,(long)&bp);
- return 0;
- }
- ', uses_bridge_so }
- defines :STACK_END => proc {
- m = /STACK_END\s+(.*)/.match(File.popen("tmp/#{$$}","r"){|f| f.read })
- m[1]
- }
-}
-Feature.add {
- tag :libruby
- name "Ruby as a dynamic library"
- uses_bridge_so ["-lruby"]
- #uses_h ["ruby.h"] # is in special directory
- test proc { c_test "#include <ruby.h>
- int main () { return rb_rescue==0; }", uses_bridge_so }
-}
-Feature.add {
- tag :librubystatic
- unless_feature [:libruby]
- name "Ruby as a static library"
- #uses_h ["ruby.h"] # is in special directory
- uses_bridge_so {
- lib = " #{$LIBRUBY_A} #{CONFIG['LIBS']} "
- lib = "-Wl,--whole-archive"+lib+"-Wl,--no-whole-archive" unless OSX
- [lib]
- }
- test proc { c_test "#include <ruby.h>
- int main () { return rb_rescue==0; }",
- ["-xnone", $LIBRUBY_A, *(CONFIG['LIBS'].split)] }
- options ["HAVE_STATIC_RUBY"] #!@#$ useless?
-}
-#----------------------------------------------------------------#
-Feature.add {
- tag :pentium
- name "Pentium-compatible CPU"
- action proc { $conf[:DEFINES][:CPU] ||= "pentium" }
- test proc {
- (CONFIG["arch"] =~ /(i\d86|x86_64)/) or raise "#{CONFIG["arch"]} instead"
- c_test '
- #include <stdio.h>
- char get_cpuid[]={
- 96,49,192,15,162,139,124,36,36,137,31,
- 137,87,4,137,79,8,137,71,12,97,195};
- main() {
- char result[16];
- int code;
- ((void(*)(char*))get_cpuid)(result);
- code = ((int*)result)[3];
- result[12]=0;
- fprintf(stderr,"cpuid: name=\"%12s\", flags=0x%08x\n",
- result,code);
- return 0;}'
- }
- options ["HAVE_PENTIUM"]
-}
-Feature.add {
- tag :mmx
- uses_feature [:pentium]
- uses_o ["cpu/mmx.o","cpu/mmx_loader.o"]
- name "MMX-compatible CPU (using NASM)"
- test proc {
- asm_test '
- global main
- extern exit
- align 16
- SECTION .data
- foo: dd 42,0
- SECTION .text
- main:
- lea esi,[foo]
- movq mm0,qword[esi]
- paddd mm0,qword[esi]
- movq qword [esi],mm0
- emms
- cmp dword [foo], 84
- je yes
- push long 1
- call exit
- yes:
- push long 0
- call exit
- ', '-lc'
- }
- options ["HAVE_MMX"]
-}
-Feature.add {
- tag :simd
- uses_feature [:pentium]
- name "SIMD (MMX/SSE/Altivec) (using GCC)"
- test proc {
- c_test '
- #include <stdio.h>
- typedef int v8qi __attribute__ ((mode(V8QI)));
- union vv8qi { v8qi v; char c[8]; };
- int main () { return 0; }',nil,["-mmmx"]
- }
- options ["HAVE_SIMD"]
-}
-Feature.add {
- tag :profiler
- name "profiler (speed measurements)"
- uses_feature [:pentium]
- options ["HAVE_TSC_PROFILING"]
-}
-#----------------------------------------------------------------#
-Feature.add {
- tag :usb
- name "USB Library"
- uses_h ["usb.h"]
- uses_o ["optional/usb.o"]
- uses_so ["-lusb"]
- test proc {
- c_test "
- #include#
- int main () {return usb_open==0 || usb_get_busses==0;}
- "
- }
- options ["HAVE_USB"]
-}
-#----------------------------------------------------------------#
-Feature.add {
- tag :ieee1394
- name "IEEE1394 Libraries for Linux (raw1394/dc1394)"
- status :disabled
- uses_o ["optional/ieee1394.o"]
- uses_so ["-lraw1394","-ldc1394_control"]
- uses_h ["libraw1394/raw1394.h","libdc1394/dc1394_control.h"]
- test proc {
- c_test "
- #include#
- int main () {return raw1394_get_libversion==0 || dc1394_get_camera_info==0;}
- "
- }
- options ["HAVE_1394"]
- uses_o ["format/dc1394.o"]
-}
-Feature.add {
- tag :x11
- name "X11 Display Protocol"
- uses_so $LIBX11
- uses_h ["X11/Xlib.h"]
- test proc {
- c_test "
- #include#
- int main () {return XSetErrorHandler==0;}
- "
- }
- uses_o ["format/x11.o"]
-}
-Feature.add {
- tag :x11_shm
- name "X11 acceleration by shared memory (XSHM plugin)"
- uses_feature [:x11]
- uses_so $LIBX11+["-lXext"]
- uses_h ["X11/Xlib.h","sys/shm.h","X11/extensions/XShm.h"]
- test proc {
- c_test "
- #include#
- #include <X11/Xutil.h>
- #include <X11/StringDefs.h>
- #include <sys/ipc.h>
- int main () {return XShmPutImage==0;}
- "
- }
- options ["HAVE_X11_SHARED_MEMORY"]
-}
-Feature.add {
- tag :x11_xv
- status :disabled
- name "X11 acceleration (XVIDEO plugin)"
- uses_feature [:x11]
- uses_so $LIBX11+["-lXext","-lXv"]
- uses_h ["X11/Xlib.h","X11/extensions/Xv.h"]
- test proc {
- c_test "
- #include#
- int main () {return 0;}
- "
- }
- options ["HAVE_X11_XVIDEO"]
-}
-Feature.add {
- tag :opengl
- name "OpenGL (only as framebuffer)"
- uses_so $LIBX11DIR+["-lglut","-lGL","-lGLU"]
- uses_h ["GL/gl.h","GL/glu.h","GL/glut.h"]
- test proc {
- c_test "
- #include#
- int main () {return glutInit==0;}
- "
- }
- uses_o ["format/opengl.o"]
-}
-Feature.add {
- tag :sdl
- name "Simple Directmedia Layer (experimental support)"
- uses_so {
- a=["-lSDL","-lpthread"]
- a<<"-lobjc" if OSX
- a
- }
- uses_h ["SDL/SDL.h"]
- test proc {
- c_test "
- #include#
- int main () {return SDL_MapRGB==0;}
- "
- }
- uses_o ["format/sdl.o"]
-}
-Feature.add {
- tag :objcpp
- name "GNU/Apple ObjectiveC++ Compiler"
- uses_h ["objc/Object.h"]
- uses_so ["-lobjc"]
- test proc {
- c_test "
- #include#
- int main () { [[Object alloc] init]; }
- ", nil, ["-xobjective-c++"]
- }
-}
-Feature.add {
- tag :quartz
- name "Apple Quartz/Cocoa Display"
- uses_so ["-lobjc",["-framework","Cocoa"]]
- uses_feature [:objcpp]
- uses_h ["objc/Object.h","Cocoa/Cocoa.h"]
- test proc {
- c_test "
- #include#
- int main () {return CGImageRelease==0;}
- ", nil, ["-xobjective-c++"]
- }
- uses_o ["format/quartz.o"]
-}
-Feature.add {
- tag :aalib
- name "Ascii Art Library"
- uses_so ["-laa"]
- uses_h ["aalib.h"]
- test proc {
- c_test "
- #define aa_hardwareparams aa_hardware_params
- extern \"C\" {
- #include#
- };
- int main () {return aa_init==0;}
- "
- }
- uses_o ["format/aalib.o"]
-}
-Feature.add {
- tag :jpeg
- name "JPEG Library"
- uses_so ["-ljpeg"]
- uses_h ["jpeglib.h"]
- test proc {
- c_test "
- extern \"C\" {
- #include <stdio.h>
- #include#
- };
- int main () {
- return jpeg_write_scanlines==0;}
- "
- }
- uses_o ["format/jpeg.o"]
-}
-Feature.add {
- tag :png
- name "PNG Library"
- uses_so ["-lpng","-lz"]
- uses_h Or[["libpng12/png.h"],["png.h"]]
- test proc {|f|
- f.c_test %`
- extern "C" {
- #include <stdio.h>
- #include#
- };
- int main () {
- #define T(a) printf("%s:%d; ",#a,sizeof(a));
- T(png_uint_32)T(long)puts("");
- if (!png_check_sig) return 1;
- return 0;}
- `
- }
- uses_o ["format/png.o"]
-}
-#------------------------------------------------#
-Feature.add {
- tag :videodev
- name "Video4linux Digitizer Driver Interface"
- uses_h ["linux/videodev.h"]
- test proc {
- c_test "
- #include <stdlib.h>
- #include#
- int main () { struct video_window foo; return 0; }"
- }
- uses_o ["format/videodev.o"]
-}
-Feature.add {
- tag :mpeg3
- name "HeroineWarrior LibMPEG3"
- uses_so $LIBX11DIR+["-lmpeg3","-lpthread","-lm"]
- uses_h Or["libmpeg3/libmpeg3.h","libmpeg3.h"]
- test proc {|f|
- f.c_test "
- #include#
- int main () { return mpeg3_open==0; }
- "
- }
- uses_o ["format/mpeg3.o"]
-}
-Feature.add {
- tag :quicktimeapple
- name "Apple's QuickTime"
- uses_so [["-framework","Quicktime"]]
- uses_h ["Quicktime/quicktime.h","Quicktime/movies.h"]
- test proc {
- c_test "
- #include#
- int main () { return EnterMovies==0; }
- "
- }
- uses_o ["format/quicktimeapple.o"]
-}
-Feature.add {
- tag :quicktimehw
- unless_feature :quicktimeapple
- name "Plaum's LibQuickTime"
- uses_so Or[
- ["-lquicktime","-lpthread","-lpng","-ldl","-lglib","-lz"],
- ["-lquicktime","-lpthread","-lpng","-ldl","-lglib-1.2","-lz"]]
- f = ["quicktime.h","colormodels.h","lqt.h","lqt_version.h","lqt_codecinfo.h"]
- uses_h Or[
- f.map{|x| "quicktime/"+x },
- f.map{|x| "lqt/"+x }]
- test proc {|f|
- f.c_test %`
- #include <stdio.h>
- #include#
- int main () {
- fprintf(stderr,"LQT_VERSION = %s\\n",
- #ifdef LQT_VERSION
- LQT_VERSION
- #else
- "(undefined)"
- #endif
- ); return quicktime_open==0; }
- `
- }
- uses_o ["format/quicktimehw.o"]
-}
-Feature.add {
- tag :xine
- name "Xine movie decoder"
- uses_so ["-lxine"]
- uses_h ["xine.h"]
- status :disabled
- test proc {|f|
- f.c_test %`
- #include <stdio.h>
- #include#
- int main () {
- fprintf(stderr,"Xine version = %d.%d.%d (%s)\\n",
- XINE_MAJOR_VERSION, XINE_MINOR_VERSION,
- XINE_SUB_VERSION, XINE_VERSION);
- return xine_new==0; }`
- }
- uses_o ["format/xine.o"]
-}
-#Feature.add {
-# tag :example
-# name "example (example file optional/example.c)"
-# uses_o ["optional/example.o"]
-# test proc {|f|
-# c_test %`
-# #include <stdio.h>
-# int main () {
-# return 0 /* 0=ok, nonzero=bad */; }`
-# }
-#}
-#----------------------------------------------------------------#
-Feature.add {
- tag :puredata
- name "Miller Puckette's Pure Data"
- uses_feature [Or[:libruby,:librubystatic]]
- options ["HAVE_PUREDATA"]
- defines {
- path = $C_INCLUDE_PATH.find {|x| File.exist?(x+"/m_pd.h")}
- m = /PD_VERSION_INT\s+(.*)/.match(File.popen("tmp/#{$$}","r"){|f| f.read })
- {:PUREDATA_PATH => File.dirname(path)+"/lib/pd", :PD_VERSION_INT => m[1].to_i}
- }
- uses_h ["m_pd.h"]
- test proc {
- c_test %`
- #include#
- #include <stdio.h>
- int main () {
- printf("#define PD_VERSION_INT %d\\n",
- #ifdef PD_MAJOR_VERSION
- (int)(PD_MAJOR_VERSION*100+PD_MINOR_VERSION));
- #else
- (int)(PD_VERSION*100));
- #endif
- return 0;
- }
- `
- }
-}
-#--------------------------------#
-Feature.add {
- tag :gem
- name "PureData GEM (source code)"
-# uses_h [$conf[:DEFINES][:GEM_SOURCE]+"/src/Base/GemBase.h"]
- uses_feature [:puredata]
- uses_o ["optional/gem.o"]
- test proc {
- # hack
- $C_INCLUDE_PATH.unshift $conf[:DEFINES][ :GEM_SOURCE]
- $CFLAGS += " -I"+$conf[:DEFINES][ :GEM_SOURCE]
- c_test %`
- #include "Base/GemBase.h"
- int main () {
- return 0;
- }
- `
- }
-}
-#--------------------------------#
-
-$features_h = {}
-$features.each {|f| $features_h[f.tag]=f }
-
-
-def usage
- log = ""
- log << "usage: ./configure "
- log << "[--use-compiler compiler] [--use-compiler-option option]* "
- log << "[--use-cpu cpu] [--lite] [--debug] [--debug-harder]"
- log << "[--ruby-prefix directory] [--gem-source directory]"
- # [--puredata-prefix directory] "
- $features_h.keys.map {|k| k.to_s }.sort.each {|k| log << "[--no-#{k}] " }
- $features_h.keys.map {|k| k.to_s }.sort.each {|k| log << "[--force-#{k}] " }
- puts
- while log.length>0 do puts log.slice!(/^.{1,70} /) end
-end
-
-while ARGV.length>0 do
- arg=ARGV.shift
- case arg
- when /=/
- i=arg.index '='
- ARGV.unshift arg[0..i-1], arg[i+1..-1]
- when /^--no-/
- name = arg[5..-1].intern
- puts "there is no feature called #{name}" if not $features_h[name]
- puts "--no: won't check for feature #{name}"
- $features_h.delete name
- when /^--force-/
- name = arg[8..-1].intern
- puts "there is no feature called #{name}" if not $features_h[name]
- puts "--force: assuming #{name} is there"
- $features_h[name].test nil
- when "--static" # experimental
- $conf[:STATIC]=true
- $conf[:LDSOFLAGS] << "-static"
-# ARGV.unshift "--no-libruby"
- when "--debug"
- puts "Debug Mode (more error checking; less speed)"
- $conf[:OPTIONS].push :HAVE_DEBUG
- $CFLAGS += " -fno-inline"
- when "--debug-harder"
- puts "Debug Harder Mode (even more error checking; even less speed)"
- $conf[:OPTIONS].push :HAVE_DEBUG
- $conf[:OPTIONS].push :HAVE_DEBUG_HARDER
- $CFLAGS += " -fno-inline"
- when "--lite"
- puts "Lite Mode (no float, no int64)"
- $conf[:OPTIONS].push :HAVE_LITE
- when "--help"; usage; exit 0
-
- when "--prefix", "--ruby-prefix" : $conf[:DEFINES][:RUBY_PREFIX]=ARGV.shift
- when "--pd-prefix", "--puredata-prefix": $conf[:DEFINES][ :PD_PREFIX]=ARGV.shift
- when "--gem-source" : $conf[:DEFINES][ :GEM_SOURCE]=ARGV.shift
-
- when "--use-compiler"
- $conf[:CC] = ARGV.shift
- when "--use-compiler-option"
- $CFLAGS += " "+ARGV.shift
- when "--use-cpu"
- $conf[:DEFINES][:CPU] = ARGV.shift
- when "--verbose"
- $verbose=true
- when "--bindir"
- $conf[:BINDIR] = ARGV.shift
- else puts "unknown option \"#{arg}\""; usage; exit 1
- end
-end
-
-# the ||= lines are patches for old versions of ruby.
-CONFIG["ruby_version"] ||= "$(MAJOR).$(MINOR)"
-CONFIG["rubylibdir"] ||= "$(libdir)/ruby/$(ruby_version)"
-CONFIG["archdir"] ||= CONFIG["rubylibdir"] + "/" + CONFIG["arch"]
-$CFLAGS += " -I" + (make_expand CONFIG["archdir"])
-
-#--------------------------------#
-
-DUAL = Object.new
-DUAL.instance_eval {
- def self.print x
- LOG .puts x; LOG .flush
- STDERR.print x; STDERR.flush
- end
- def self.puts x
- self.print x+"\n"
- end
-}
-
-def try feature
-
- if Or===feature.uses_so
- k=1
- feature.uses_so.a.each {|i|
- e=feature.dup; e.uses_so i; e.name(e.name+" (try \##{k})")
- r=try e; return r if r
- k+=1
- }
- return false
- end
- if Or===feature.uses_h
- feature.uses_h.a.each {|i|
- e=feature.dup; e.uses_h i; e.name(e.name+" <#{i.to_a[0]}>")
- r=try e; return r if r
- }
- return false
- end
- LOG.puts "", "-"*64
- line = "[#{feature.tag}] #{feature.name}: "
- DUAL.print Light + "[#{Yellow}#{feature.tag}#{Light}] #{feature.name}: "
- arrow = "-"*([78-line.length,0].max)+ "> "
- #DUAL.print Dark + arrow +Red
- (feature.uses_feature||[]).find {|f|
- if not (
- if Or===f then f.a.find {|x| $conf[:FEATURES][x] } else $conf[:FEATURES][f] end
- ) then
- DUAL.puts Red+arrow+"disabled (would need #{f})"
- return
- end
- }
- if feature.status==:disabled then DUAL.puts Dark+arrow+"disabled (by author)"; return end
- if not $features_h[feature.tag] then DUAL.puts Dark+arrow+"disabled (by user)"; return end
- fu = feature.unless_feature || []
- fu = [fu] if not Array===fu
- for f in fu || [] do
- if $conf[:FEATURES][f] then
- DUAL.puts Dark+arrow+"disabled (using #{f} instead)"
- return
- end
- end
-
- if feature.test
- begin
- tresult = feature.test.call(feature)
- rescue StandardError => e
- end
- if tresult
- DUAL.puts Green+arrow+"found "+(if tresult!=true
- then " (#{tresult})"
- else "" end)
- if tresult == "static"
- feature.uses_so.map! {|x|
- "-Wl,--whole-archive #{x} -Wl,--no-whole-archive"
- } if feature.uses_so
- feature.uses_bridge_so.map! {|x|
- "-Wl,--whole-archive #{x} -Wl,--no-whole-archive"
- } if feature.uses_bridge_so
- end
- else
- DUAL.puts Red+arrow+"missing "+(if e
- then (if $verbose
- then "(#{e} @ #{e.backtrace.join', '})"
- else "(#{e})" end)
- else "(return false)" end)
- if e
- LOG.puts e.inspect
- LOG.puts e.backtrace
- end
- return false
- end
- else
- puts Green+arrow+"enabled"
- $conf[:FEATURES][feature.tag] = feature
- feature.action.call if feature.action
- end
- feature.action.call if feature.action
- $conf[:FEATURES][feature.tag] = feature
- $conf[:LDSOFLAGS].concat(feature.uses_so||[])
- $conf[:BRIDGE_LDFLAGS].concat(feature.uses_bridge_so||[])
- $conf[:OBJS].concat(feature.uses_o||[])
- $conf[:OPTIONS].concat(feature.options||[])
- for k,v in feature.defines||{} do
- $conf[:DEFINES][k]=(if Proc===v then v[] else v end)
- end
- true
-end
-
-DUAL.puts "This is the GridFlow 0.8.1 configurator within Ruby version #{RUBY_VERSION}"
-
-begin
- $features.each {|feature| try feature }
-ensure
- #!@#$ note: see END{} (duplication)
- system "/bin/rm -f tmp/#{$$} tmp/#{$$}.c tmp/#{$$}.o tmp/#{$$}.asm"
-end
-
-puts Light
-
-$conf[:LDSOFLAGS].uniq!
-$conf[:BRIDGE_LDFLAGS].uniq!
-
-$CFLAGS += " -falign-functions=16" if $conf[:FEATURES][:gcc3]
-
-#if not $conf[:FEATURES][:gcc3]
-# puts "You should install gcc 3.x; gcc 2.9.x is no longer supported"
-# puts "(you might use --force-gcc3 to pretend at your own risk)"
-# exit 1
-#end
-
-#--------------------------------#
-
-LOG.puts "-"*64
-for z in [:BRIDGE_LDFLAGS, :LDSOFLAGS, :OPTIONS, :DEFINES, :OBJS] do
- LOG.puts "#{z}: #{$conf[z].inspect}"
-end
-LOG.puts "-"*64
-RUBY = "$(RUBY_INSTALL_NAME)"
-
-def my_install_files(f,base,entries,obase="$(sitelibdir)/gridflow/#{base}")
- entries.each {|type,name,*rest|
- if Array===name then name,oname=name else oname=name end
- case type
- when :ruby
- f.puts "\t$(INSTALL_DATA) #{base+name} #{obase}/#{oname}"
- when :directory
- if oname[0,1]!="/" then oname="#{obase}/#{oname}" end
- f.puts "\t$(INSTALL_DIR) #{oname}"
- my_install_files(f,base+name,rest,oname)
- end
- }
-end
-
-def my_uninstall_files(f,base,entries,obase="$(sitelibdir)/gridflow/#{base}")
- entries.each {|type,name,*rest|
- if Array===name then name,oname=name else oname=name end
- case type
- when :ruby
- f.puts "\trm #{obase}/#{oname}"
- when :directory
- my_uninstall_files(f,base+name,rest)
- end
- }
-end
-
-def make_makefile f
- puts ""
- f.puts "RUBY = #{RUBY}"
- f.puts "ruby-all::", ""
- f.puts "ruby-install::"
- my_install_files(f,"",FILES)
- f.puts "\tcp bin/jmax2pd $(gfbindir); chmod 755 $(gfbindir)/jmax2pd\n"
- f.puts
- f.puts "ruby-uninstall::"
- my_uninstall_files(f,"",FILES)
- f.puts
-end
-
-puts "generating ./config.make"
-
-File.open("./config.make","w") {|f| f.puts "
-
-RUBYARCH=#{CONFIG['arch']}
-"
-
-f.puts "BRIDGE_LDFLAGS = " + $conf[:BRIDGE_LDFLAGS].flatten.join(" ") + " " + $LDFLAGS
-
-if OSX then
- f.puts "BRIDGE_LDFLAGS += -bundle -flat_namespace"
-else
- f.puts "BRIDGE_LDFLAGS += -rdynamic -shared"
-end
-$CFLAGS += " -mtune=$(CPU)" if $conf[:DEFINES][:CPU]
-$CFLAGS += " -march=$(CPU)" if $conf[:DEFINES][:CPU]
-#$CFLAGS += " -fforce-addr"
-#$CFLAGS += " -fprefetch-loop-arrays"
-#$CFLAGS += " -falign-jumps=4"
-#$CFLAGS += " -falign-loops=4"
-$CFLAGS += " -DMACOSX" if OSX
-f.puts "CFLAGS += " + $CFLAGS
-
-for k in $conf[:OPTIONS] do f.puts "#{k}=yes" end
-for k,v in $conf[:DEFINES] do f.puts "#{k}=#{v}" end
-
-$sources = %w(
-base/grid.c base/main.c base/number.c base/bitpacking.c
-base/flow_objects.c
-base/flow_objects_for_image.c
-base/flow_objects_for_matrix.c
-)
-
-#for o in $conf[:OBJS] do
-# o=o.downcase.chomp(".o")
-# x = o.downcase+".c"
-# x = o.downcase+".m" if not File.exist?(x)
-# #raise "woops, missing file #{o.downcase}.*" if not File.exist?(x) and
-# # o!="cpu/mmx"
-# $sources << x
-#end
-
-f.puts "SOURCES = #{$sources.join(" ")} \\"
-f.puts ""
-} # end open config.make
-
-#--------------------------------#
-puts "generating config.h"
-File.open("config.h","w") {|f| f.puts "
-\#ifndef __CONFIG_H
-\#define __CONFIG_H
-/* this file was auto-generated by gridflow/configure */
-
-"
-f.puts "#define STARTUP_LIST(PRE) \\"
-f.puts $conf[:OBJS].map {|o| "PRE startup_#{File.basename(o,'.o')}();" }.join("\\\n")
-for k in $conf[:OPTIONS] do f.puts "\#define #{k}" end
-for k,v in $conf[:DEFINES] do f.puts "\#define #{k} "+v.inspect end
-
-def include_here(f,a,b)
- return unless $conf[:FEATURES][b]
- f.puts "\#ifdef #{a}_INCLUDE_HERE"
- for inc in $conf[:FEATURES][b].uses_h.to_a do
- f.puts "\#include <#{inc}>"
- end
- f.puts "\#endif"
-end
-
-include_here f,"LIBMPEG", :mpeg3
-include_here f,"QUICKTIMEHW",:quicktimehw
-
-f.puts "
-\#define RUBY_BINDIR #{make_expand(CONFIG['bindir']).inspect}
-\#endif /* __CONFIG_H */"
-}
-
-#--------------------------------#
-#puts "generating config.rb"
-#File.open("config.rb","w") {|f| f.puts %{
-#\# this file was auto-generated by gridflow/configure
-#}}
-#----------------------------------------------------------------#
-# Some fairly nontrivial abuse of black magic.
-
-$LOCAL_LIBS = $conf[:LDSOFLAGS].flatten.join(" ")
-
-$objs = $sources.collect{|i| i.sub(/.[cm]$/,".o") }
-$objs[$objs.index("base/number.o"),1] = (1..3).map {|i| "base/number.#{i}.o" }
-dir_config("gridflow")
-create_makefile("gridflow")
-mf = File.readlines("Makefile").join""
-
-common_deps1 = "$(COMMON_DEPS)"
-common_deps2 = common_deps1 + " base/grid.h.fcs"
-
-mf.sub!(/^.c.o:\s*\n\t(.*)\n/) {
- comp=$1
- comp.sub!(/\(CC\)/,'(CXX)')
- comp << " -o $@" if not comp =~ /-o\s*\$@/
- comp2 = comp.gsub /-c/,'-xobjective-c++ -c'
-
- "%.h.fcs: %.h #{common_deps1}\n\truby -w base/source_filter.rb $< $@\n\n"+
- "%.c.fcs: %.c #{common_deps2}\n\truby -w base/source_filter.rb $< $@\n\n"+
- "%.m.fcs: %.m #{common_deps2}\n\truby -w base/source_filter.rb $< $@\n\n"+
- "%.o: %.c.fcs #{common_deps2}\n\t#{comp}\n"+
- "%.1.o: %.c.fcs #{common_deps2}\n\t#{comp.gsub /-c/,'-DPASS1 -c'}\n"+
- "%.2.o: %.c.fcs #{common_deps2}\n\t#{comp.gsub /-c/,'-DPASS2 -c'}\n"+
- "%.3.o: %.c.fcs #{common_deps2}\n\t#{comp.gsub /-c/,'-DPASS3 -c'}\n"+
- "%.o: %.m.fcs #{common_deps2}\n\t#{comp2}\n"
-}
-mf.gsub!(/^.SUFFIXES:.*$/, ".SUFFIXES:\n\n") or mf<<".SUFFIXES:\n\n"
-mf << ".PRECIOUS: %.h.fcs %.c.fcs %.m.fcs\n"
-mf.gsub! /DESTDIR/, 'RUBYDESTDIR'
-mf.gsub! /\*\.o/, "*.o */*.o"
-
-# GAAAH!!!
-if RUBY_VERSION >= "1.8" then
- mf.gsub!(/^((site-)?install:.*)/) {$1+" $(RUBYARCHDIR)/$(DLLIB) install2"}
-else
- mf.gsub!(/^((site-)?install:.*)/) {$1+" install2"}
-end
-
-mf.gsub!(/^install:.*/) {"install:site-install"} # should i keep this line?
-mf.sub!(/^all:(.*)$/) { "all: #{$1} all2" }
-mf.sub! /^clean:/,"clean: clean2 "
-mf.sub! /CC = gcc\n/, "CC = gcc\nCXX = #{$conf[:CC]}\n"
-mf.sub! /^(OBJS = .*)$/, "\\1 #{$conf[:OBJS].join' '}"
-mf[0,0] = "COMMON_DEPS = config.make Makefile Makefile.gf base/source_filter.rb\n"+
- "gfbindir = #{$conf[:BINDIR]}\n"
-mf.sub!(/^site-install:\s*install/,"site-install: ")
-
-rp=$conf[:DEFINES][:RUBY_PREFIX]
-if rp
- mf.sub! /^prefix\s*=.*$/, "prefix = " + make_expand(rp)
- mf.sub! /^sitedir\s*=.*$/, "sitedir = " + make_expand(rp)
-end
-
-mf.sub! /^LDSHARED = g?cc/, "LDSHARED = $(CXX)"
-# Adam Lindsay's Mac attempts.
-mf.sub! /-no-precomp/, "-no-cpp-precomp"
-# for proper operation on Cygwin
-mf.sub! /--driver-name=gcc/, "--driver-name=#{$conf[:CC]}"
-# remove gcc3.2 warning about -I/usr/include
-mf.sub!(/^CPPFLAGS = (.*)$/) {
- cpp = "CPPFLAGS = " +
- make_expand($1).sub(%r"-I\s*/usr/include","")
-}
-
-f = File.open("Makefile","w")
-f.puts "include config.make"
-f.puts mf
-f.puts "include Makefile.gf"
-make_makefile f
-f.close
-
-#--------------------------------#
-
-puts "delegating to: devices4ruby/extconf.rb"
-r=$conf[:DEFINES][:RUBY_PREFIX]
-a=[]
-a<<"--prefix"<<r if r
-Dir.chdir "devices4ruby"
-system "/usr/bin/env", "ruby", "extconf.rb", *a
-Dir.chdir ".."
-puts "(back)"
-
-#--------------------------------#
-
-puts "",
-"\e[1mSee ./config.log if you want the details of the configuration tests.\e[0m",
-"\e[1mIf you are satisfied with that configuration, you may go on,\e[0m",
-"\e[1m and do \"make\" and then \"make install\".\e[0m",
-"\e[1mIf you get stuck, you could contact the author about it,\e[0m",
-"\e[1m but first make sure you read \"doc/install.html\". \e[0m",
-""
-
-#--------------------------------#
-
-END {
- system "/bin/rm -f tmp/#{$$} tmp/#{$$}.c tmp/#{$$}.o tmp/#{$$}.asm"
-}