[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Setting up Lua on a Mac OSX 10.4.11 system
- From: Joshua Jensen <josh.jjensen@...>
- Date: Thu, 16 Dec 2010 08:12:32 -0700
----- Original Message -----
From: Eric Wing
Date: 12/15/2010 4:58 PM
I use CMake to avoid build-system porting hassles. This page has links
to a Lua repo with CMake description.
http://playcontrol.net/ewing/jibberjabber/git_superproject_and_submod.html
As long as we're throwing out build systems, LuaPlus is built using the
Perforce Jam-derived JamPlus. JamPlus builds around 50 Lua modules out
of box in the LuaPlus distribution for Windows, Mac OS X, and Linux and
for a variety of compilers. It also kicks out Visual Studio and Xcode
projects.
When I want to link against the Lua DLL, I add the following to my Jamfile:
C.IncludeDirectories MyApp : $(LUA_ROOT)/src ;
C.LinkPrebuiltLibraries $(TARGET) : lua5.1 ;
When I want to build a Lua C module within another project, I call a Jam
rule that looks like this:
Lua.CModule ImageSplitterAlpha : imagesplitteralpha :
ImageSplitterAlphaLua.cpp ;
# This is what Lua.CModule does.
if $(OS) = NT {
LUA_CDIR = $(LUA_OUTPUT_DIRECTORY)/modules ;
LUA_LDIR = $(LUA_OUTPUT_DIRECTORY)/lua ;
} else {
LUA_CDIR = $(LUA_OUTPUT_DIRECTORY)/lib/lua/5.1 ;
LUA_LDIR = $(LUA_OUTPUT_DIRECTORY)/share/lua/5.1 ;
}
rule Lua.CModule TARGET : OUTPUT_NAME : SOURCES : MODULES_SUBDIR {
# Let the user pass in an empty TARGET and use what they've set as
the ActiveProject.
TARGET = [ RetrieveActiveTarget $(TARGET) ] ;
# For some reason, this #define doesn't get automatically set in
luaconf.h.
if $(OS) = LINUX {
C.Defines $(TARGET) : LUA_USE_LINUX ;
}
C.IncludeDirectories $(TARGET) : $(LUA_ROOT)/src ;
if $(OS) != MACOSX && $(OS) != LINUX {
C.LinkDirectories $(TARGET) : $(LUA_ROOT)/bin.vs2010.win32 ;
C.LinkPrebuiltLibraries $(TARGET) : lua5.1 ;
}
# Default the OUTPUT_NAME to the TARGET name, if not specified.
OUTPUT_NAME ?= $(TARGET) ;
# By default, the module goes straight into the LUA_CDIR
directory. This allows OUTPUT_NAME[2] to override it.
local MODULES_SUBDIR = $(OUTPUT_NAME[1]:D) ;
OUTPUT_NAME = $(OUTPUT_NAME[1]:D=) $(OUTPUT_NAME[2]) ;
# Automatically generate a proper luaopen_modulename export. This
eliminates the need for a .def file.
if $(MSVCNT) {
local EXPORT_NAME = $(OUTPUT_NAME[2]:E=$(OUTPUT_NAME[1])) ;
local exportName = [ Subst $(EXPORT_NAME) : %. : _ ] ;
local exportPath = [ Subst $(MODULES_SUBDIR:E="") : / : _ ] ;
if $(exportPath) != "" {
exportPath = $(exportPath)_ ;
}
C.LinkFlags $(TARGET) :
/EXPORT:luaopen_$(exportPath)$(exportName) ;
}
# Set the output filename of the module.
C.OutputName $(TARGET) : $(OUTPUT_NAME[1]) ;
# In a debug build, make the module name append .debug to the end
so debug and release builds can
# exist in the same directory.
C.OutputPostfix $(TARGET) : .debug : debug ;
# For release, ensure we have no postfix.
C.OutputPostfix $(TARGET) : : release ;
# Set the output path of the module.
C.OutputPath $(TARGET) : $(LUA_CDIR)/$(MODULES_SUBDIR:E=) ;
# Build it.
C.Library $(TARGET) : $(SOURCES) : module ;
}
Anyway, I just thought I'd mention it as an alternative.
Josh