summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLamont Granquist <lamont@scriptkiddie.org>2014-05-19 17:03:11 -0700
committerLamont Granquist <lamont@scriptkiddie.org>2014-05-19 17:03:11 -0700
commit566a5b8cddf2f24e5ae3435c7c99250b9b27de2f (patch)
treec1d252aaed0190316d35ea293e17c38fc67d1420
parent846b35796b98c07d6e630323db719af9cbeb92f0 (diff)
downloadlibyajl2-gem-566a5b8cddf2f24e5ae3435c7c99250b9b27de2f.tar.gz
ripping out fake mkmf stuff
this will work better, we can special case jruby with some hacky makefile shit later...
-rw-r--r--ext/libyajl2/Makefile9
-rw-r--r--ext/libyajl2/extconf.rb183
2 files changed, 25 insertions, 167 deletions
diff --git a/ext/libyajl2/Makefile b/ext/libyajl2/Makefile
deleted file mode 100644
index e8aef79..0000000
--- a/ext/libyajl2/Makefile
+++ /dev/null
@@ -1,9 +0,0 @@
-TARGET = libyajl
-DLLIB = $(TARGET).bundle
-all:
- cd /Users/lamont/git/libyajl2-gem/ext/libyajl2/vendor/yajl/src && make
- cp /Users/lamont/git/libyajl2-gem/ext/libyajl2/vendor/yajl/src/$(DLLIB) .
-install:
- cp $(DLLIB) /Users/lamont/git/libyajl2-gem/lib/libyajl2/vendored-libyajl2
-clean:
- cd /Users/lamont/git/libyajl2-gem/ext/libyajl2/vendor/yajl/src && make clean
diff --git a/ext/libyajl2/extconf.rb b/ext/libyajl2/extconf.rb
index 5375afc..e621f0f 100644
--- a/ext/libyajl2/extconf.rb
+++ b/ext/libyajl2/extconf.rb
@@ -1,7 +1,8 @@
exit(0) if ENV["USE_SYSTEM_LIBYAJL2"]
require 'rbconfig'
-require 'pp'
+require 'fileutils'
+require 'mkmf'
module Libyajl2Build
class BuildError < StandardError; end
@@ -23,37 +24,9 @@ module Libyajl2Build
end
def self.setup_env
- if config['CC'] =~ /gcc/ || config['CC'] =~ /clang/
- config['CFLAGS'] << " -std=c99 -pedantic -Wpointer-arith -Wno-format-y2k -Wstrict-prototypes -Wmissing-declarations -Wnested-externs -Wextra -Wundef -Wwrite-strings -Wold-style-definition -Wredundant-decls -Wno-unused-parameter -Wno-sign-compare -Wmissing-prototypes"
- end
- end
-
- # for mkmf.rb compat
- def self.config
- @config ||= RbConfig::MAKEFILE_CONFIG.dup
- end
-
- def self.mkintpath(path)
- case config['build_os']
- when 'mingw32'
- path = path.dup
- path.tr!('\\', '/')
- path.sub!(/\A([A-Za-z]):(?=\/)/, '/\1')
- path
- when 'cygwin'
- if config['target_os'] != 'cygwin'
- IO.popen(["cygpath", "-u", path], &:read).chomp
- else
- path
- end
- else
- path
- end
- end
-
- def self.system(*args)
- print("-> #{args.join(' ')}\n")
- super(*args)
+ #if config['CC'] =~ /gcc/ || config['CC'] =~ /clang/
+ # config['CFLAGS'] << " -std=c99 -pedantic -Wpointer-arith -Wno-format-y2k -Wstrict-prototypes -Wmissing-declarations -Wnested-externs -Wextra -Wundef -Wwrite-strings -Wold-style-definition -Wredundant-decls -Wno-unused-parameter -Wno-sign-compare -Wmissing-prototypes"
+ #end
end
# since we're not using cmake we have to mangle up yajl_version.h ourselves
@@ -70,7 +43,7 @@ module Libyajl2Build
yajl_micro = m[1]
end
end
- File.open("#{libyajl2_vendor_dir}/src/api/yajl_version.h", "w+") do |out|
+ File.open("api/yajl_version.h", "w+") do |out| # FIXME: relative path
File.open("#{libyajl2_vendor_dir}/src/api/yajl_version.h.cmake").each do |line|
line.gsub!(/\$\{YAJL_MAJOR\}/, yajl_major)
line.gsub!(/\$\{YAJL_MINOR\}/, yajl_minor)
@@ -78,146 +51,40 @@ module Libyajl2Build
out.write(line)
end
end
+ FileUtils.cp "api/yajl_version.h", "yajl/yajl_version.h"
end
- def self.yajl_makefile
- File.open("Makefile", "w+") do |f|
- f.write <<EOF
-SHELL = /bin/sh
-
-# V=0 quiet, V=1 verbose. other values don't work.
-V = 0
-Q1 = $(V:1=)
-Q = $(Q1:0=@)
-ECHO1 = $(V:1=@:)
-ECHO = $(ECHO1:0=@echo)
-
-#### Start of system configuration section. ####
-
-srcdir = .
-prefix = #{mkintpath(config['prefix'])}
-rubylibprefix = $(libdir)/$(RUBY_BASE_NAME)
-exec_prefix = $(prefix)
-sitearchdir = $(sitelibdir)/$(sitearch)
-sitelibdir = $(sitedir)/$(ruby_version)
-sitedir = $(rubylibprefix)/site_ruby
-libdir = $(exec_prefix)/lib
-
-CC = #{config['CC']}
-COUTFLAG = '-o'
-
-cflags = #{config['cflags']}
-optflags = #{config['optflags']}
-debugflags = #{config['debugflags']}
-warnflags = #{config['warnflags']}
-CCDLFLAGS = #{config['CCDLFLAGS']}
-CFLAGS = $(CCDLFLAGS) -I#{libyajl2_vendor_dir}/src/api -I. #{config['CFLAGS']} $(ARCH_FLAG)
-INCFLAGS = -I. -I$(srcdir)
-DEFS = #{config['DEFS']}
-CPPFLAGS = #{config['CPPFLAGS']} $(cppflags)
-ldflags = #{config['LDFLAGS']}
-#dldflags = -Wl,-undefined,dynamic_lookup -Wl,-multiply_defined,suppress
-dldflags = #{config['DLDFLAGS']} #{config['EXTDLDFLAGS']}
-ARCH_FLAG = #{config['ARCH_FLAG']}
-DLDFLAGS = $(ldflags) $(dldflags) $(ARCH_FLAG)
-LDSHARED = #{config['LDSHARED']}
-
-RUBY_INSTALL_NAME = #{config['RUBY_INSTALL_NAME']}
-RUBY_SO_NAME = #{config['RUBY_SO_NAME']}
-RUBYW_INSTALL_NAME = #{config['RUBYW_INSTALL_NAME']}
-RUBY_VERSION_NAME = #{config['RUBY_VERSION_NAME']}
-RUBYW_BASE_NAME = #{config['RUBYW_BASE_NAME']}
-RUBY_BASE_NAME = #{config['RUBY_BASE_NAME']}
-
-arch = #{config['arch']}
-sitearch = #{config['sitearch']}
-ruby_version = #{RbConfig::CONFIG['ruby_version']}
-ruby = #{File.join(RbConfig::CONFIG["bindir"], config["ruby_install_name"])}
-RUBY = $(ruby)
-
-RM = $(RUBY) -run -e rm -- -f
-MAKEDIRS = $(RUBY) -run -e mkdir -- -p
-INSTALL = $(RUBY) -run -e install -- -vp
-INSTALL_PROG = $(INSTALL) -m 0755
-TOUCH = exit >
-
-#### End of system configuration section. ####
-
-libpath = . $(libdir)
-LIBPATH = -L. -L$(libdir)
-
-CLEANFILES = mkmf.log
-
-target_prefix =
-LIBS = #{config['LIBS']} #{config['DLDLIBS']}
-ORIG_SRCS = yajl.c yajl_alloc.c yajl_buf.c yajl_encode.c yajl_gen.c yajl_lex.c yajl_parser.c yajl_tree.c yajl_version.c
-SRCS = $(ORIG_SRCS)
-OBJS = yajl.o yajl_alloc.o yajl_buf.o yajl_encode.o yajl_gen.o yajl_lex.o yajl_parser.o yajl_tree.o yajl_version.o
-HDRS = yajl_alloc.h yajl_buf.h yajl_bytestack.h yajl_encode.h yajl_lex.h yajl_parser.h
-TARGET = libyajl
-DLLIB = $(TARGET).#{config['DLEXT']}
-
-TIMESTAMP_DIR = .
-RUBYARCHDIR = $(sitearchdir)$(target_prefix)
-
-CLEANLIBS = $(TARGET).bundle
-CLEANOBJS = *.o *.bak
-
-all: $(DLLIB)
-
-clean:
-\t-$(Q)$(RM) $(CLEANLIBS) $(CLEANOBJS) $(CLEANFILES) .*.time
-
-install: install-so install-rb
-
-install-so: $(DLLIB) $(TIMESTAMP_DIR)/.RUBYARCHDIR.time
-\t$(INSTALL_PROG) $(DLLIB) $(RUBYARCHDIR)
-
-install-rb:
-\t$(ECHO) installing default libyajl libraries
-$(TIMESTAMP_DIR)/.RUBYARCHDIR.time:
-\t$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
-\t$(Q) $(TOUCH) $@
-
-.SUFFIXES: .c .o
-
-.c.o:
-\t$(ECHO) compiling $(<)
-\t$(Q) $(CC) $(INCFLAGS) $(CPPFLAGS) $(CFLAGS) $(COUTFLAG)$@ -c $<
-
-$(DLLIB): $(OBJS) Makefile
-\t$(ECHO) linking shared-object $(DLLIB)
-\t-$(Q)$(RM) $(@)
-\t$(Q) $(LDSHARED) -o $@ $(OBJS) $(LIBPATH) $(DLDFLAGS) $(LIBS)
-
-$(OBJS): $(HDRS)
-EOF
- end
+ def self.copy_yajl_files
+ # FIXME: resolve the relative paths in dst
+ FileUtils.cp Dir["#{libyajl2_vendor_dir}/src/*.c"], '.'
+ FileUtils.cp Dir["#{libyajl2_vendor_dir}/src/*.h"], '.'
+ Dir.mkdir "api" unless Dir.exist?("api")
+ FileUtils.cp Dir["#{libyajl2_vendor_dir}/src/api/*.h"], 'api'
+ Dir.mkdir "yajl" unless Dir.exist?("yajl")
+ FileUtils.cp Dir["#{libyajl2_vendor_dir}/src/api/*.h"], 'yajl'
end
def self.makemakefiles
setup_env
+ copy_yajl_files
generate_yajl_version
- Dir.chdir("#{libyajl2_vendor_dir}/src") do
- # hack to make includes work
- system("rm -f api/yajl")
- system("ln -s . api/yajl")
- yajl_makefile
- end
+ dir_config("libyajl")
+ create_makefile("libyajl")
+ # we cheat and build it right away
+ system("make")
+ # so we can hack up what install does later
+
File.open("Makefile", "w+") do |f|
f.write <<EOF
TARGET = libyajl
-DLLIB = $(TARGET).#{config['DLEXT']}
+DLLIB = $(TARGET).#{RbConfig::MAKEFILE_CONFIG['DLEXT']}
all:
-\tcd #{libyajl2_vendor_dir}/src && make
-\tcp #{libyajl2_vendor_dir}/src/$(DLLIB) .
+
install:
\tmkdir -p #{prefix}/lib
\tcp $(DLLIB) #{prefix}/lib
\tmkdir -p #{prefix}/include/yajl
-\tcp #{libyajl2_vendor_dir}/src/api/*.h #{prefix}/include/yajl
-clean:
-\tcd #{libyajl2_vendor_dir}/src && make clean
+\tcp yajl/*.h #{prefix}/include/yajl
EOF
end
end