151 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
	
		
			3.9 KiB
		
	
	
	
		
			Makefile
		
	
	
	
	
	
# ======================================================================= #
 | 
						|
#                          ACK CONFIGURATION                              #
 | 
						|
#                      (Edit this before building)                        #
 | 
						|
# ======================================================================= #
 | 
						|
 | 
						|
# What platform to build for by default?
 | 
						|
 | 
						|
DEFAULT_PLATFORM = pc86
 | 
						|
 | 
						|
# Where should the ACK put its temporary files?
 | 
						|
 | 
						|
ACK_TEMP_DIR = /tmp
 | 
						|
 | 
						|
# Where is the ACK going to be installed, eventually? If you don't want to
 | 
						|
# install it and just want to run the ACK from the build directory
 | 
						|
# (/tmp/ack-build/staging, by default), leave this as $(INSDIR).
 | 
						|
 | 
						|
PREFIX = /usr/local
 | 
						|
#PREFIX = $(INSDIR)
 | 
						|
 | 
						|
# Where do you want to put the object files used when building?
 | 
						|
 | 
						|
BUILDDIR = $(ACK_TEMP_DIR)/ack-build
 | 
						|
 | 
						|
# What build flags do you want to use for native code?
 | 
						|
 | 
						|
CFLAGS = -g -Wno-return-type
 | 
						|
LDFLAGS = 
 | 
						|
 | 
						|
# Various commands.
 | 
						|
 | 
						|
AR = ar
 | 
						|
CC = gcc
 | 
						|
 | 
						|
# Which build system to use; use 'ninja' or 'make' (in lower case). Leave
 | 
						|
# blank to autodetect.
 | 
						|
 | 
						|
BUILDSYSTEM =
 | 
						|
 | 
						|
# Build flags for ninja.
 | 
						|
 | 
						|
NINJAFLAGS =
 | 
						|
 | 
						|
# Build flags for make.
 | 
						|
 | 
						|
MAKEFLAGS = 
 | 
						|
 | 
						|
# ======================================================================= #
 | 
						|
#                         END OF CONFIGURATION                            #
 | 
						|
# ======================================================================= #
 | 
						|
 | 
						|
# You shouldn't need to change anything below this point unless you are
 | 
						|
# actually developing ACK.
 | 
						|
 | 
						|
OBJDIR = $(abspath $(BUILDDIR)/obj)
 | 
						|
BINDIR = $(abspath $(BUILDDIR)/bin)
 | 
						|
LIBDIR = $(abspath $(BUILDDIR)/lib)
 | 
						|
INCDIR = $(abspath $(BUILDDIR)/include)
 | 
						|
INSDIR = $(abspath $(BUILDDIR)/staging)
 | 
						|
 | 
						|
PLATIND = $(INSDIR)/share/ack
 | 
						|
PLATDEP = $(INSDIR)/lib/ack
 | 
						|
 | 
						|
.NOTPARALLEL:
 | 
						|
 | 
						|
ifeq ($(BUILDSYSTEM),)
 | 
						|
  ifneq ($(shell which ninja),)
 | 
						|
BUILDSYSTEM = ninja
 | 
						|
  else
 | 
						|
BUILDSYSTEM = make
 | 
						|
  endif
 | 
						|
endif
 | 
						|
 | 
						|
build-file = $(BUILDDIR)/build.$(BUILDSYSTEM)
 | 
						|
lua-files = $(shell find . -name 'build*.lua')
 | 
						|
our-lua = $(BUILDDIR)/lua
 | 
						|
 | 
						|
# GNU make sets MAKECMDGOALS to the list of targets from the command
 | 
						|
# line.  We look for targets with '+' and forward them to BUILDSYSTEM.
 | 
						|
# This handles commands like
 | 
						|
#     $ make util/opt+pkg util/ego+pkg
 | 
						|
 | 
						|
all-goals = +ack +tests
 | 
						|
plus-goals := $(patsubst all,$(all-goals),$(or $(MAKECMDGOALS),all))
 | 
						|
plus-goals := $(foreach g,$(plus-goals),$(if $(findstring +,$(g)),$(g),))
 | 
						|
 | 
						|
# @true silences extra message, "make: Nothing to be done..."
 | 
						|
 | 
						|
all: build-plus-goals
 | 
						|
	@true
 | 
						|
 | 
						|
ifneq ($(plus-goals),)
 | 
						|
$(plus-goals): build-plus-goals
 | 
						|
	@true
 | 
						|
endif
 | 
						|
 | 
						|
build-plus-goals: $(build-file)
 | 
						|
ifeq ($(BUILDSYSTEM),ninja)
 | 
						|
	@ninja $(NINJAFLAGS) -f $(build-file) $(plus-goals)
 | 
						|
else ifeq ($(BUILDSYSTEM),make)
 | 
						|
# GNU make passes MAKEFLAGS in environment.
 | 
						|
	@$(MAKE) -f $(build-file) $(plus-goals)
 | 
						|
else
 | 
						|
$(error unknown BUILDSYSTEM = $(BUILDSYSTEM))
 | 
						|
endif
 | 
						|
 | 
						|
$(build-file): first/ackbuilder.lua Makefile $(lua-files) $(our-lua)
 | 
						|
	@mkdir -p $(BUILDDIR)
 | 
						|
	@$(our-lua) first/ackbuilder.lua \
 | 
						|
		first/build.lua build.lua \
 | 
						|
		--$(BUILDSYSTEM) \
 | 
						|
		LUA=$(our-lua) \
 | 
						|
		DEFAULT_PLATFORM=$(DEFAULT_PLATFORM) \
 | 
						|
		OBJDIR=$(OBJDIR) \
 | 
						|
		BINDIR=$(BINDIR) \
 | 
						|
		LIBDIR=$(LIBDIR) \
 | 
						|
		INCDIR=$(INCDIR) \
 | 
						|
		INSDIR=$(INSDIR) \
 | 
						|
		PLATIND=$(PLATIND) \
 | 
						|
		PLATDEP=$(PLATDEP) \
 | 
						|
		PREFIX=$(PREFIX) \
 | 
						|
		AR=$(AR) \
 | 
						|
		CC=$(CC) \
 | 
						|
		CFLAGS="$(CFLAGS)" \
 | 
						|
		> $(build-file)
 | 
						|
 | 
						|
install:
 | 
						|
	mkdir -p $(PREFIX)
 | 
						|
	tar cf - -C $(INSDIR) . | tar xvf - -C $(PREFIX)
 | 
						|
 | 
						|
clean:
 | 
						|
	rm -rf $(BUILDDIR)
 | 
						|
 | 
						|
uname := $(shell uname)
 | 
						|
ifeq (Linux,$(uname))
 | 
						|
# Turn on LUA_USE_POSIX so that Lua is not compiled with the dangerous
 | 
						|
# tmpnam(.) function.  But, do not use LUA_USE_LINUX here, since that will
 | 
						|
# also turn on LUA_USE_READLINE, and I do not want to force everyone to
 | 
						|
# install libreadline-dev.  -- tkchia
 | 
						|
$(our-lua): CFLAGS += -DLUA_USE_POSIX -DLUA_USE_DLOPEN
 | 
						|
$(our-lua): LDFLAGS += -ldl
 | 
						|
else
 | 
						|
ifeq (Darwin,$(uname))
 | 
						|
$(our-lua): CFLAGS += -DLUA_USE_MACOSX
 | 
						|
endif
 | 
						|
endif
 | 
						|
 | 
						|
$(our-lua): first/lua-5.1/*.c first/lua-5.1/*.h
 | 
						|
	@echo Bootstrapping build
 | 
						|
	@mkdir -p $(BUILDDIR)
 | 
						|
	@$(CC) $(CFLAGS) -o $(our-lua) -O first/lua-5.1/*.c $(LDFLAGS) -lm
 |