Always use __declspec(dllimport/dllexport) on Windows.
[luabind.git] / Jamroot
blob614fedacaff412a03012698b7369d9c88105c637
1 import docutils ;
2 import os ;
3 import errors ;
4 import notfile ;
6 BOOST_ROOT = [ os.environ BOOST_ROOT ] ;
8 rule debug-message ( txt * )
10     if --debug-build in [ modules.peek : ARGV ]
11     {
12         echo [luabind DEBUG] $(txt) ;
13     }
16 debug-message figuring out which libraries to link to... ;
17 debug-message os.name is [ os.name ] ;
19 if [ os.name ] = NT
21     if ! $(BOOST_ROOT)
22     {
23         errors.user-error "*** BOOST_ROOT must be set to a Boost installation." ;
24     }
26     LUA_PATH = [ os.environ LUA_PATH ] ;
28     if ! $(LUA_PATH)
29     {
30         errors.user-error "*** LUA_PATH must be set." ;
31     }
33     local includes = [ GLOB $(LUA_PATH)/include $(LUA_PATH)/src : lua.h ] ;
35     if ! $(includes)
36     {
37         errors.user-error "*** Unable to determine Lua include directory." ;
38     }
40     includes = $(includes:D) ;
42     debug-message found include directory in $(includes) ;
44     if [ GLOB $(LUA_PATH) : lib ]
45     {
46         lib lua : : <link>static <name>lua5.1 <search>$(LUA_PATH)/lib/static : : <include>$(includes) ;
47         lib lua : : <link>shared <name>lua5.1 <search>$(LUA_PATH)/lib : : <include>$(includes) ;
48     }
49     else if [ GLOB $(LUA_PATH) : lua5.1.dll ]
50     {
51         lib lua : : <name>lua5.1 <search>$(LUA_PATH) : : <include>$(includes) ;
52     }
54 else if [ os.name ] in LINUX MACOSX FREEBSD
56     LUA_PATH = [ os.environ LUA_PATH ] ;
57     HOME = [ os.environ HOME ] ;
59     local possible-prefixes =
60         $(LUA_PATH) $(HOME)/Library/Frameworks /Library/Frameworks /usr /usr/local /opt/local /opt ;
62     local possible-suffixes =
63         include/lua5.1 include/lua51 include/lua include ;
65     local includes = [ GLOB $(possible-prefixes)/$(possible-suffixes) : lua.h ] ;
67     if ! $(includes)
68     {
69         errors.user-error "*** Unable to determine Lua include directory." ;
70     }
72     local includes = $(includes[1]:D) ;
73     local prefix = $(includes:D) ;
75     if $(prefix:B) = "include"
76     {
77         prefix = $(prefix:D) ;
78     }
80     local lib = $(prefix)/lib ;
82     local names = liblua5.1 liblua51 liblua ;
83     local extensions = .a .so ;
85     library = [ GLOB $(lib)/lua51 $(lib)/lua5.1 $(lib)/lua $(lib) :
86         $(names)$(extensions) ] ;
87     lib-name = [ MATCH "lib(.*)" : $(library[1]:B) ] ;
89     debug-message prefix: $(prefix) ;
90     debug-message includes: $(includes) ;
91     debug-message lib: $(library:D) ;
92     debug-message candidates: $(library) ;
93     debug-message linking to: $(lib-name) ;
95     if ! $(lib-name)
96     {
97         errors.user-error "*** Unable to find Lua library." ;
98     }
100     lib m : : <link>shared ;
101     if [ os.name ] = LINUX
102     {
103         lib dl : : <link>shared ;
104     }
105     else
106     {
107         alias dl ;
108     }
109     lib lua : m dl : <name>$(lib-name) <search>$(library:D) : : <include>$(includes) ;
112 SOURCES =
113     class.cpp
114     class_info.cpp
115     class_registry.cpp
116     class_rep.cpp
117     create_class.cpp
118     error.cpp
119     exception_handler.cpp
120     find_best_match.cpp
121     function.cpp
122     implicit_cast.cpp
123     link_compatibility.cpp
124     object_rep.cpp
125     open.cpp
126     overload_rep.cpp
127     pcall.cpp
128     ref.cpp
129     scope.cpp
130     stack_content_by_name.cpp
131     weak_ref.cpp
132     wrapper_base.cpp ;
134 usage-requirements =
135     <library>lua
136     <toolset>msvc,<link>shared:<cxxflags>/wd4251
137     <link>shared:<define>LUABIND_DYNAMIC_LINK ;
139 lib luabind
140     : src/$(SOURCES)
141     # requirements
142     : <define>LUABIND_BUILDING
143       <include>. <include>$(BOOST_ROOT)
144       $(usage-requirements)
145     # default-build
146     :
147     # usage-requirements
148     : <include>. <include>$(BOOST_ROOT)
149       $(usage-requirements)
150     ;
152 alias test
153   : test//test
154   # requirements
155   :
156   # default-build
157   : <link>static <link>shared release debug ;
159 explicit test ;
161 rule git-describe ( )
163     local result = [ SHELL "git describe HEAD 2>&1" : exit-status ] ;
165     if $(result[2]) = 0
166     {
167         return [ MATCH "^v([a-zA-Z.0-9\\-]+)" : $(result[1]) ] ;
168     }
171 version-tag = [ git-describe ] ;
173 if $(version-tag)
175     actions make-version-file
176     {
177         echo ".. |version| replace:: $(version-tag)" > doc/version.rst
178     }
180     notfile make-version-file : @make-version-file ;
182 else
184     alias make-version-file ;
187 if docs in [ modules.peek : ARGV ] 
189     local result = [ SHELL "rst2html.py --version 2>&1" : exit-status ] ;
190     if $(result[2]) = 0
191     {
192         found-rst2html = rst2html.py ;
193     }
196 html docs.html
197   : doc/docs.rst
198   : <dependency>make-version-file
199     <docutils-cmd>$(found-rst2html)
200     <docutils-html>"--traceback -gdt --stylesheet=style.css --link-stylesheet" ;
202 stage docs : docs.html : <location>doc ;
203 explicit docs docs.html make-version-file ;