mirror of https://github.com/apache/poi.git
333 lines
8.5 KiB
Makefile
333 lines
8.5 KiB
Makefile
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
|
|
# Makefile for building Poi4R
|
|
#
|
|
# Supported operating systems: Linux, Mac OS X and Windows.
|
|
# See INSTALL file for requirements.
|
|
#
|
|
# Steps to build
|
|
# 1. Edit the sections below as documented
|
|
# 2. make all
|
|
# 3. make install
|
|
#
|
|
# The install target installs the Poi4R python extension in python's
|
|
# site-packages directory. On Mac OS X, it also installs the gcj runtime
|
|
# libraries into $(PREFIX)/lib.
|
|
#
|
|
# To successfully import the Poi4R extension into Ruby, all required
|
|
# libraries need to be found. If the locations you chose are non-standard,
|
|
# the relevant DYLD_LIBRARY_PATH (Mac OS X), LD_LIBRARY_PATH (Linux), or
|
|
# PATH (Windows) need to be set accordingly.
|
|
#
|
|
|
|
|
|
VERSION=0.1.0
|
|
POI_VER=$(shell grep '<property name="version.id"' ../../../build.xml | awk -F'"' '{print $$4}')
|
|
RUBY_VER=1.8
|
|
|
|
POI4R:=$(shell pwd)
|
|
POI=$(POI4R)/poi-$(POI_VER)
|
|
#DEBUG=1
|
|
|
|
#
|
|
# You need to uncomment and edit the variables below in the section
|
|
# corresponding to your operating system.
|
|
#
|
|
# PREFIX: where programs are normally installed on your system (Unix).
|
|
# PREFIX_RUBY: where your version of python is installed.
|
|
# GCJ_HOME: where GCC/GCJ is installed.
|
|
# Windows drive-absolute paths need to be expressed cygwin style.
|
|
#
|
|
|
|
# Mac OS X (Darwin)
|
|
#PREFIX=/usr/local
|
|
#PREFIX_RUBY=/Library/Frameworks/Ruby.framework/Versions/$(RUBY_VER)
|
|
#SWIG=$(PREFIX)/bin/swig
|
|
#GCJ_HOME=/usr/local/gcc-3.4.1
|
|
#DB=$(POI4R)/db-$(DB_VER)
|
|
#PREFIX_DB=/usr/local/BerkeleyDB.$(DB_LIB_VER)
|
|
|
|
# Linux
|
|
PREFIX=/usr
|
|
PREFIX_RUBY=$(PREFIX)
|
|
SWIG=$(PREFIX)/bin/swig
|
|
GCJ_HOME=/usr
|
|
#DB=$(POI4R)/db-$(DB_VER)
|
|
#PREFIX_DB=$(PREFIX)/BerkeleyDB.$(DB_LIB_VER)
|
|
|
|
# Windows
|
|
#PREFIX_RUBY=/cygdrive/o/Python-2.3.2
|
|
#SWIG=/cygdrive/c/utils/bin/swig.exe
|
|
#GCJ_HOME=/cygdrive/o/mingw-3.1
|
|
#DB=/cygdrive/o/db-$(DB_VER)
|
|
#PREFIX_DB=$(DB)
|
|
|
|
#
|
|
# No edits required below
|
|
#
|
|
|
|
OS=$(shell uname)
|
|
ifeq ($(findstring CYGWIN,$(OS)),CYGWIN)
|
|
OS=Cygwin
|
|
endif
|
|
ifeq ($(findstring WINNT,$(OS)),WINNT)
|
|
OS=Cygwin
|
|
endif
|
|
|
|
ifeq ($(DEBUG),1)
|
|
COMP_OPT=DEBUG=1
|
|
SUFFIX=d
|
|
_SUFFIX=_d
|
|
BINDIR=debug
|
|
else
|
|
COMP_OPT=
|
|
SUFFIX=
|
|
_SUFFIX=
|
|
BINDIR=release
|
|
endif
|
|
|
|
SWIG_OPT=-DSWIG_COBJECT_TYPES -DPOI4R_VER="'$(VERSION)'" -DPOI_VER="'$(POI_VER)'"
|
|
|
|
JCCFLAGS=--encoding=UTF-8
|
|
#JCCFLAGS=--encoding=UTF-8 -findirect-dispatch
|
|
|
|
ifeq ($(OS),Darwin)
|
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)/site-packages
|
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby$(RUBY_VER)
|
|
POI4R=$(BINDIR)/poi4r.so
|
|
ifeq ($(DEBUG),1)
|
|
CCFLAGS=-O0 -g
|
|
LDFLAGS=-g
|
|
else
|
|
CCFLAGS=-O2
|
|
LDFLAGS=
|
|
endif
|
|
else
|
|
|
|
ifeq ($(OS),Linux)
|
|
RUBY_SITE=$(PREFIX_RUBY)/lib/ruby/site-ruby/$(RUBY_VER)/
|
|
RUBY_INC=$(PREFIX_RUBY)/lib/ruby/$(RUBY_VER)/i686-linux
|
|
POI4R_LIB=$(BINDIR)/poi4r.so
|
|
ifeq ($(DEBUG),1)
|
|
CCFLAGS=-O0 -g -fPIC
|
|
LDFLAGS=-g
|
|
else
|
|
CCFLAGS=-O2 -fPIC
|
|
LDFLAGS=
|
|
endif
|
|
else
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
RUBY_SITE=`cygpath -aw $(PREFIX_RUBY)/Lib/site-packages`
|
|
RUBY_INC=`cygpath -aw $(PREFIX_RUBY)/Include`
|
|
RUBY_PC=`cygpath -aw $(PREFIX_RUBY)/PC`
|
|
POI4R_LIB=$(BINDIR)/poi4r$(_SUFFIX).so
|
|
ifeq ($(DEBUG),1)
|
|
CCFLAGS=-O -g
|
|
LDFLAGS=-g
|
|
else
|
|
CCFLAGS=-O2
|
|
LDFLAGS=
|
|
endif
|
|
else
|
|
|
|
RUBY=unknown
|
|
RUBY_SITE=unknown
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
CLASSES=$(BINDIR)/classes
|
|
JAR_CLASSES=$(CLASSES)/jar
|
|
|
|
CC=$(GCJ_HOME)/bin/gcc
|
|
CXX=$(GCJ_HOME)/bin/g++
|
|
JCC=$(GCJ_HOME)/bin/gcj
|
|
JCCH=$(GCJ_HOME)/bin/gcjh
|
|
JAR=$(GCJ_HOME)/bin/jar
|
|
POI_ZIP=poi-$(POI_VER).jar
|
|
POI_JAR=poi-$(POI_VER).jar
|
|
POI_JAR_WC=poi-$(POI_VER)-*.jar
|
|
|
|
POI4R_CP:=$(BINDIR)/$(POI_JAR):$(CLASSES)
|
|
|
|
OBJS=$(BINDIR)/poi.o $(BINDIR)/io.java.o $(BINDIR)/io.cpp.o
|
|
|
|
LIBS=$(POI4R_LIB)
|
|
|
|
default: all
|
|
|
|
patches:
|
|
|
|
|
|
env:
|
|
ifndef PREFIX_RUBY
|
|
@echo Operating system is $(OS)
|
|
@echo You need to edit that section of the Makefile
|
|
@false
|
|
else
|
|
@true
|
|
endif
|
|
|
|
|
|
$(BINDIR):
|
|
mkdir -p $(BINDIR)/classes/jar
|
|
|
|
|
|
DISTRIB=Poi-$(VERSION)
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
POI4R_CP:=`cygpath -awp $(POI4R_CP)`
|
|
endif
|
|
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
_poi=`cygpath -aw $(POI)`
|
|
else
|
|
_poi=$(POI)
|
|
endif
|
|
|
|
$(BINDIR)/$(POI_JAR):
|
|
cp ../../../build/dist/$(POI_JAR_WC) $(BINDIR)/$(POI_JAR)
|
|
cd $(JAR_CLASSES); $(JAR) -xf ../../$(POI_JAR)
|
|
|
|
$(BINDIR)/io.java.o: java/org/apache/poi/RubyOutputStream.java
|
|
$(JCC) $(JCCFLAGS) -C -d $(CLASSES) java/org/apache/poi/RubyOutputStream.java
|
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -I$(GCJ_HOME)/include -c -o $@ java/org/apache/poi/RubyOutputStream.java
|
|
|
|
$(CLASSES)/org/apache/poi/RubyOutputStream.h: $(BINDIR)/io.java.o Makefile
|
|
mkdir -p $(CLASSES)/org/apache/poi/hssf/usermodel
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFWorkbook
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFSheet
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFRow
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCell
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFHeader
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFooter
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFFont
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFDataFormat
|
|
$(JCCH) -d $(CLASSES) --classpath=$(JAR_CLASSES) org.apache.poi.hssf.usermodel.HSSFCellStyle
|
|
$(JCCH) -d $(CLASSES) --classpath=$(CLASSES) org.apache.poi.RubyOutputStream
|
|
|
|
|
|
$(BINDIR)/io.cpp.o: $(CLASSES)/org/apache/poi/RubyOutputStream.h cpp/RubyIO.cpp $(BINDIR)/io.java.o
|
|
$(JCC) -I$(RUBY_INC) -I$(GCJ_HOME)/include -I$(CLASSES) $(CCFLAGS) -c -o $@ cpp/RubyIO.cpp
|
|
|
|
$(BINDIR)/poi.o: $(BINDIR)/$(POI_JAR)
|
|
$(JCC) $(JCCFLAGS) $(CCFLAGS) -c -o $@ $(BINDIR)/$(POI_JAR)
|
|
|
|
Poi4R_wrap.cxx: $(BINDIR)/io.cpp.o Poi4R.i
|
|
ifdef SWIG
|
|
$(SWIG) $(SWIG_OPT) -I$(CLASSES) -c++ -ruby Poi4R.i
|
|
endif
|
|
|
|
|
|
ifeq ($(OS),Darwin)
|
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
|
$(CXX) -shared -bundle -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(GCJ_HOME)/include -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -L$(GCJ_HOME)/lib -lgcj -liconv -undefined suppress -flat_namespace -multiply_defined suppress
|
|
else
|
|
|
|
ifeq ($(OS),Linux)
|
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
|
$(CXX) -shared -o $@ $(CCFLAGS) $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_INC) Poi4R_wrap.cxx $(OBJS) -lgcj
|
|
else
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
$(POI4R_LIB): $(OBJS) Poi4R_wrap.cxx
|
|
$(CXX) -c $(CCFLAGS) $(PYDBG) -D_NO_OLDNAMES -D_off_t=off_t $(SWIG_OPT) $(DB_INC) -I$(CLASSES) -I$(RUBY_PC) -I$(RUBY_INC) -o $(BINDIR)/Poi4R_wrap.o Poi4R_wrap.cxx
|
|
$(CXX) -shared $(LDFLAGS) -o $@ $(OBJS) `cygpath -aw $(PREFIX_RUBY)/python23$(_SUFFIX).dll` $(BINDIR)/Poi4R_wrap.o -lgcj -lwin32k -lws2_32
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
all: env $(BINDIR) $(LIBS)
|
|
@echo build of $(POI4R_LIB) complete
|
|
|
|
install:: all
|
|
install Poi4R.rb $(RUBY_SITE)
|
|
install $(POI4R_LIB) $(RUBY_SITE)
|
|
|
|
ifeq ($(OS),Darwin)
|
|
install::
|
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(PREFIX)/lib
|
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(PREFIX)/lib
|
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(PREFIX)/lib
|
|
else
|
|
|
|
ifeq ($(OS),Linux)
|
|
install::
|
|
|
|
else
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
install::
|
|
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
|
|
clean:
|
|
rm -rf $(BINDIR) Poi4R.rb* Poi4R_wrap.cxx
|
|
|
|
realclean: clean
|
|
rm -rf $(POI) $(STORE) $(DISTRIB)
|
|
|
|
distrib::
|
|
mkdir -p $(DISTRIB)/python
|
|
install Poi4R.rb $(DISTRIB)/python
|
|
install $(POI4R_LIB) $(DISTRIB)/python
|
|
install README $(DISTRIB)
|
|
|
|
ifeq ($(OS),Darwin)
|
|
distrib::
|
|
ifdef DB
|
|
mkdir -p $(DISTRIB)/db
|
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
|
install libdb_java-$(DB_LIB_VER).la.osx $(DISTRIB)/db
|
|
endif
|
|
mkdir -p $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libgcj.5.dylib $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libstdc++.6.dylib $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libgcc_s.1.0.dylib $(DISTRIB)/gcj
|
|
else
|
|
|
|
ifeq ($(OS),Linux)
|
|
distrib::
|
|
ifdef DB
|
|
mkdir -p $(DISTRIB)/db
|
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
|
endif
|
|
mkdir -p $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libgcj.so.5 $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libstdc++.so.6 $(DISTRIB)/gcj
|
|
install $(GCJ_HOME)/lib/libgcc_s.so.1 $(DISTRIB)/gcj
|
|
else
|
|
|
|
ifeq ($(OS),Cygwin)
|
|
distrib::
|
|
ifdef DB
|
|
mkdir -p $(DISTRIB)/db
|
|
install $(LIBDB_JAVA_LIB) $(DISTRIB)/db
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
|