# Copyright 2013,2014 Matthew Welland.
#
# This program is made available under the GNU GPL version 2.0 or
# greater. See the accompanying file COPYING for details.
#
# This program is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.
# make PREFIX=/mfs/pkgs/chicken/chicken-core all
help :
@echo You may need to do the following first:
@echo sudo apt-get install libreadline-dev
@echo sudo apt-get install libwebkitgtk-dev libfreetype6-dev libx11-dev libxpm-dev libxmu-dev libxft-dev libgtk2.0-dev libgl1-mesa-dev libglu1-mesa-dev libpangox-1.0-dev bison
@echo sudo apt-get install libmotif3
@echo For IUP set IUPBRANCH, currently $(IUPBRANCH)
@echo You are using PREFIX=$(PREFIX)
@echo You are using PROXY="$(PROXY)"
@echo If needed set PROXY to host.dom:port
@echo http_proxy=$(http_proxy)
@echo PROX=$(PROX)
@echo
@echo To make all do: make all
@echo
@echo Note: might need to do CSC_OPTIONS='-C "-fPIC"' make
# FPIC=-C "-fPIC"
# Put the installation here
ifeq ($(PREFIX),)
PREFIX=$(PWD)/target
endif
# Set this on the command line of your make call if needed: make PROXY=host.com:1234
PROXY=
# Select version of chicken, sqlite3 etc
CHICKEN_VERSION=4.9.0.1
SQLITE3_VERSION=3080500
# http://www.sqlite.org/2014/sqlite-autoconf-3080500.tar.gz
# Override IUPBRANCH to use other than trunk
IUPBRANCH=iup-3.10.1
# Eggs to install (straightforward ones)
EGGS=matchable readline apropos base64 regex-literals format regex-case test coops trace csv \
dot-locking posix-utils posix-extras directory-utils hostinfo tcp-server rpc csv-xml fmt \
json md5 awful http-client spiffy uri-common intarweb spiffy-request-vars \
spiffy-directory-listing ssax sxml-serializer sxml-modifications sql-de-lite \
srfi-19 refdb ini-file sparse-vectors z3 call-with-environment-variables
#
# Derived variables
#
ifeq ($(PROXY),)
PROX:=
else
http_proxy:=http://$(PROXY)
PROX:=-proxy $(PROXY)
endif
BUILDHOME=$(PWD)
PATH:=$(PREFIX)/bin:$(PATH)
LIBPATH=$(PREFIX)/lib$(ADDITIONAL_LIBPATH)
LD_LIBRARY_PATH=$(LIBPATH)
CHICKEN_INSTALL=$(PREFIX)/bin/chicken-install
CHICKEN_EGG_DIR=$(PREFIX)/lib/chicken/6
VPATH=$(CHICKEN_EGG_DIR):$(PWD)/eggflags
vpath %.so $(CHICKEN_EGG_DIR)
vpath %.flag eggflags
EGGSOFILES=$(addprefix $(CHICKEN_EGG_DIR)/,$(addsuffix .so,$(EGGS)))
EGGFLAGS=$(addprefix eggflags/,$(addsuffix .flag,$(EGGS)))
# Stuff needed for IUP
ISARCHX86_64=$(shell uname -a | grep x86_64)
ifeq ($(ISARCHX86_64),)
ARCHSIZE=
else
ARCHSIZE=64_
endif
CSCLIBS=$(shell echo $(LD_LIBRARY_PATH) | sed 's/:/ -L/g')
CSC_OPTIONS="-I$(PREFIX)/include -L$(CSCLIBS) -C \"-fPIC\""
# CSC_OPTIONS=-I$(PREFIX)/include -L$(CSCLIBS)
all : chkn eggs libiup logprobin $(PREFIX)/lib/sqlite3.so $(PREFIX)/bin/hs \
$(PREFIX)/lib/chicken/7/mutils.so \
$(PREFIX)/lib/chicken/7/dbi.so \
$(PREFIX)/lib/chicken/7/stml.so \
$(PREFIX)/lib/chicken/7/margs.so
chkn : $(CHICKEN_INSTALL)
eggs : $(EGGSOFILES)
# libiup : $(PREFIX)/lib/libavcall.a
libiup : $(CHICKEN_EGG_DIR)/iup.so $(CHICKEN_EGG_DIR)/canvas-draw.so
logprobin : $(PREFIX)/bin/logpro
$(PREFIX)/bin/logpro : $(CHICKEN_EGG_DIR)/regex-literals.so
$(CHICKEN_INSTALL) logpro
# Silly rule to make installing eggs more makeish, I don't understand why I need the basename
$(CHICKEN_EGG_DIR)/%.so : eggflags/%.flag
$(CHICKEN_INSTALL) $(PROX) -keep-installed $(shell basename $*)
$(EGGFLAGS) : # $(CHICKEN_INSTALL)
mkdir -p eggflags
touch $(EGGFLAGS)
# some setup stuff
#
$(PREFIX)/setup-chicken4x.sh : $(EGGFLAGS)
mkdir -p $(PREFIX)
(echo 'export PATH=$(PREFIX)/bin:$$PATH' > $(PREFIX)/setup-chicken4x.sh)
(echo "export LD_LIBRARY_PATH=$(LD_LIBRARY_PATH)" >> $(PREFIX)/setup-chicken4x.sh)
$(PREFIX)/setup-chicken4x.csh : $(EGGFLAGS)
mkdir -p $(PREFIX)
(echo "setenv PATH $(PREFIX):'$$'PATH" > $(PREFIX)/setup-chicken4x.csh)
(echo "setenv LD_LIBRARY_PATH $(LD_LIBRARY_PATH)" >> $(PREFIX)/setup-chicken4x.csh)
chicken-core/chicken.scm : chicken-$(CHICKEN_VERSION).tar.gz
tar xfz chicken-$(CHICKEN_VERSION).tar.gz
ln -sf chicken-$(CHICKEN_VERSION) chicken-core
chicken-4.9.0rc1.tar.gz :
wget http://code.call-cc.org/dev-snapshots/2014/04/17/chicken-4.9.0rc1.tar.gz
chicken-4.9.0.1.tar.gz :
wget http://code.call-cc.org/releases/4.9.0/chicken-4.9.0.1.tar.gz
# git clone git://code.call-cc.org/chicken-core
# git clone http://code.call-cc.org/git/chicken-core.git
$(CHICKEN_INSTALL) : chicken-core/chicken.scm $(PREFIX)/setup-chicken4x.sh $(PREFIX)/setup-chicken4x.csh
cd chicken-core;make PLATFORM=linux PREFIX=$(PREFIX)
cd chicken-core;make PLATFORM=linux PREFIX=$(PREFIX) install
#======================================================================
# S Q L I T E 3
#======================================================================
sqlite-autoconf-$(SQLITE3_VERSION).tar.gz :
wget http://www.sqlite.org/2014/sqlite-autoconf-$(SQLITE3_VERSION).tar.gz
sqlite-autoconf-$(SQLITE3_VERSION)/config.log : sqlite-autoconf-$(SQLITE3_VERSION).tar.gz
tar xfz sqlite-autoconf-$(SQLITE3_VERSION).tar.gz
$(PREFIX)/bin/sqlite3 : sqlite-autoconf-$(SQLITE3_VERSION)/config.log
cd sqlite-autoconf-$(SQLITE3_VERSION);./configure --prefix=$(PREFIX);make;make install
$(PREFIX)/lib/sqlite3.so : $(PREFIX)/bin/sqlite3
CSC_OPTIONS="-I$(PREFIX)/include -L$(PREFIX)/lib" $(CHICKEN_INSTALL) $(PROX) sqlite3
#======================================================================
# N A N O M S G
#======================================================================
nanomsg-0.5-beta.tar.gz :
wget http://download.nanomsg.org/nanomsg-0.5-beta.tar.gz
nanomsg-0.5-beta/COPYING : nanomsg-0.5-beta.tar.gz
tar xfvz nanomsg-0.5-beta.tar.gz
$(PREFIX)/bin/nanocat : nanomsg-0.5-beta/COPYING
cd nanomsg-0.5-beta;./configure --prefix=$(PREFIX);make;make install
$(PREFIX)/lib/nanomsg.so : $(PREFIX)/bin/nanocat
CSC_OPTIONS="-I$(PREFIX)/include -L$(PREFIX)/lib" $(CHICKEN_INSTALL) $(PROX) nanomsg
#======================================================================
# M A T T S U T I L S
#======================================================================
# opensrc
opensrc.fossil :
fossil clone http://www.kiatoa.com/fossils/opensrc opensrc.fossil
opensrc/histstore/histstore.scm : opensrc.fossil
mkdir -p opensrc
cd opensrc;if [ -e .fslckout ];then fossil update; else fossil open ../opensrc.fossil; fi
$(PREFIX)/lib/chicken/7/mutils.so : opensrc/histstore/histstore.scm
cd opensrc/mutils;chicken-install
$(PREFIX)/lib/chicken/7/dbi.so : opensrc/dbi/dbi.scm
cd opensrc/dbi;chicken-install
$(PREFIX)/lib/chicken/7/margs.so : opensrc/margs/margs.scm
cd opensrc/margs;chicken-install
opensrc/histstore/hs : opensrc/histstore/histstore.scm chkn eggs $(PREFIX)/lib/sqlite3.so
cd opensrc/histstore;$(PREFIX)/bin/csc histstore.scm -o hs
$(PREFIX)/bin/hs : opensrc/histstore/hs
cp -f opensrc/histstore/hs $(PREFIX)/bin/hs
# stml
stml.fossil :
fossil clone http://www.kiatoa.com/fossils/stml stml.fossil
# open touches the .fossil :(
stml/requirements.scm.template : stml.fossil
mkdir -p stml
cd stml;if [ -e .fslckout ];then fossil update; else fossil open ../stml.fossil;fi
stml/requirements.scm : stml/requirements.scm.template
cp stml/install.cfg.template stml/install.cfg
cp stml/requirements.scm.template stml/requirements.scm
$(PREFIX)/lib/chicken/7/stml.so : stml/requirements.scm
cd stml;make
#======================================================================
# I U P
#======================================================================
ffcall.fossil :
fossil clone http://www.kiatoa.com/fossils/ffcall ffcall.fossil
ffcall/README : ffcall.fossil
mkdir -p ffcall
cd ffcall && if [ -e README ];then fossil update; else fossil open ../ffcall.fossil; fi
# NOTE: This worked fine *without* the enable-shared
#
$(PREFIX)/lib/libavcall.a : ffcall/README
cd ffcall;./configure --prefix=$(PREFIX) --enable-shared && make && make install
iuplib.fossil :
fossil clone http://www.kiatoa.com/fossils/iuplib iuplib.fossil
iup/installall.sh : iuplib.fossil
mkdir -p iup
cd iup && if [ -e installall.sh ];then fossil update $(IUPBRANCH); else fossil open ../iuplib.fossil;fossil update $(IUPBRANCH); fi
iup/alldone : iup/installall.sh $(PREFIX)/include/iup.h $(PREFIX)/lib/libiup.so
cd iup && ./makeall.sh
$(PREFIX)/lib/libiup.so $(PREFIX)/include/iup.h : iup/installall.sh iup/alldone
cd iup && ./installall.sh
# $(PREFIX)/lib/libiup.so : iup/iup/alldone
# touch -c $(PREFIX)/lib/libiup.so
$(CHICKEN_EGG_DIR)/iup.so : $(PREFIX)/lib/libiup.so $(PREFIX)/lib/libavcall.a
LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) CSC_OPTIONS=$(CSC_OPTIONS) $(CHICKEN_INSTALL) $(PROX) -D no-library-checks -feature disable-iup-web iup
$(CHICKEN_EGG_DIR)/canvas-draw.so : $(PREFIX)/lib/libiup.so $(PREFIX)/lib/libavcall.a
CSC_OPTIONS=$(CSC_OPTIONS) $(CHICKEN_INSTALL) $(PROX) -D no-library-checks canvas-draw
clean :
rm -rf chicken-4.8.0 eggflags ffcall sqlite-autoconf-$(SQLITE3_VERSION)