Skip to content

Commit cfcfd4c

Browse files
committed
Add LUA_TYPE build option.
Add missing SCons.Util import. Issue thezbyg#216. Issue thezbyg#217.
1 parent a8bc29c commit cfcfd4c

File tree

4 files changed

+55
-11
lines changed

4 files changed

+55
-11
lines changed

CMakeLists.txt

+26-6
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@ option(ENABLE_NLS "compile with gettext support" true)
44
option(USE_GTK3 "use GTK3 instead of GTK2" true)
55
option(DEV_BUILD "use development flags" false)
66
option(PREFER_VERSION_FILE "read version information from file instead of using GIT" false)
7+
option(LUA_TYPE "Lua library type (one of \"C++\", \"patched-C++\" or \"C\")" "patched-C++")
8+
set(LUA_TYPES C++ patched-C++ C)
9+
set_property(CACHE LUA_TYPE PROPERTY STRINGS ${LUA_TYPES})
10+
if(NOT LUA_TYPE IN_LIST LUA_TYPES)
11+
message(FATAL_ERROR "LUA_TYPE must be one of ${LUA_TYPES}")
12+
endif()
13+
714
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
815
file(GLOB SOURCES
916
source/*.cpp source/*.h
@@ -25,16 +32,24 @@ include(Version)
2532
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/source/version/Version.cpp.in" "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Version.cpp" @ONLY)
2633
list(APPEND SOURCES "${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/Version.cpp")
2734
find_package(Boost 1.58 COMPONENTS unit_test_framework REQUIRED)
28-
find_package(PkgConfig)
35+
find_package(PkgConfig REQUIRED)
2936
if (PkgConfig_FOUND)
3037
if (USE_GTK3)
31-
pkg_check_modules(GTK3 gtk+-3.0>=3.0)
38+
pkg_search_module(GTK3 REQUIRED gtk+-3.0>=3.0)
39+
else()
40+
pkg_search_module(GTK2 REQUIRED gtk+-2.0>=2.24)
41+
pkg_search_module(GioUnix REQUIRED gio-unix-2.0>=2.24)
42+
endif()
43+
if (NOT LUA_TYPE STREQUAL CURRENT_LUA_TYPE)
44+
unset(Lua_FOUND CACHE)
45+
endif()
46+
if (NOT LUA_TYPE STREQUAL "C")
47+
pkg_search_module(Lua REQUIRED lua5.4-c++>=5.4 lua5-c++>=5.4 lua-c++>=5.4 lua5.3-c++>=5.3 lua5-c++>=5.3 lua-c++>=5.3 lua5.2-c++>=5.2 lua5-c++>=5.2 lua-c++>=5.2)
3248
else()
33-
pkg_check_modules(GTK2 gtk+-2.0>=2.24)
34-
pkg_check_modules(GioUnix gio-unix-2.0>=2.24)
49+
pkg_search_module(Lua REQUIRED lua5.4>=5.4 lua5>=5.4 lua>=5.4 lua5.3>=5.3 lua5>=5.3 lua>=5.3 lua5.2>=5.2 lua5>=5.2 lua>=5.2)
3550
endif()
36-
pkg_search_module(Lua lua5.4-c++>=5.4 lua5-c++>=5.4 lua5.3-c++>=5.3 lua5-c++>=5.3 lua-c++>=5.3 lua5.2-c++>=5.2 lua-c++>=5.2)
37-
pkg_check_modules(Expat expat>=1.0)
51+
set(CURRENT_LUA_TYPE ${LUA_TYPE} CACHE INTERNAL "")
52+
pkg_search_module(Expat REQUIRED expat>=1.0)
3853
endif()
3954
set(THREADS_PREFER_PTHREAD_FLAG ON)
4055
find_package(Threads REQUIRED)
@@ -213,6 +228,11 @@ target_include_directories(tests PRIVATE
213228
${Lua_INCLUDE_DIRS}
214229
${Expat_INCLUDE_DIRS}
215230
)
231+
if (LUA_TYPE STREQUAL "C++")
232+
target_compile_definitions(gpick PRIVATE LUA_SYMBOLS_MANGLED)
233+
target_compile_definitions(gpick-lua PRIVATE LUA_SYMBOLS_MANGLED)
234+
target_compile_definitions(tests PRIVATE LUA_SYMBOLS_MANGLED)
235+
endif()
216236

217237
install(TARGETS gpick DESTINATION bin)
218238
install(FILES share/metainfo/org.gpick.gpick.metainfo.xml DESTINATION share/metainfo)

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,9 @@ ENABLE\_NLS - compile with gettext support. Enabled by default.
8383
USE\_GTK3 - use GTK3 instead of GTK2. Enabled by default.
8484

8585
PREFER\_VERSION\_FILE - read version information from file instead of using GIT. Disabled by default. This option enables unconditional `.version` file usage. `.version` file is included in release source archives and is a simple text file containing the following information in four lines: major/minor version, revision, commit hash and commit date.
86+
87+
LUA\_TYPE - select used Lua library type. Default is `patched-C++`. Can be set to one of the following values:
88+
89+
* `C++` - compiled with C++ compiler and API function symbols are mangled.
90+
* `patched-C++` - compiled with C++ compiler, but API functions are defined as `extern "C"` and symbols are not mangled.
91+
* `C` - compiled with C compiler (this is the default Lua library build type).

SConscript

+19-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env python
22
# coding: utf-8
3-
import os, string, sys, shutil, math
3+
import os, string, sys, shutil, math, SCons.Util
44
from tools import *
55

66
env = GpickEnvironment(ENV = os.environ)
@@ -17,6 +17,7 @@ vars.Add(BoolVariable('PREBUILD_GRAMMAR', 'Use prebuild grammar files', False))
1717
vars.Add(BoolVariable('USE_GTK3', 'Use GTK3 instead of GTK2', True))
1818
vars.Add(BoolVariable('DEV_BUILD', 'Use development flags', False))
1919
vars.Add(BoolVariable('PREFER_VERSION_FILE', 'Read version information from file instead of using GIT', False))
20+
vars.Add(EnumVariable('LUA_TYPE', 'Lua library type', 'patched-C++', allowed_values = ('C++', 'patched-C++', 'C')))
2021
vars.Update(env)
2122

2223
if env['LOCALEDIR'] == '':
@@ -77,7 +78,10 @@ if not env.GetOption('clean'):
7778
libs['GIO_PC'] = {'checks':{'gio-unix-2.0': '>= 2.26.0', 'gio-2.0': '>= 2.26.0'}}
7879
else:
7980
libs['GTK_PC'] = {'checks':{'gtk+-3.0': '>= 3.0.0'}}
80-
libs['LUA_PC'] = {'checks':{'lua5.4-c++': '>= 5.4', 'lua5.3-c++': '>= 5.3', 'lua-c++': '>= 5.2', 'lua5.2-c++': '>= 5.2'}}
81+
if env['LUA_TYPE'] != 'C':
82+
libs['LUA_PC'] = {'checks':{'lua5.4-c++': '>= 5.4', 'lua5-c++': '>= 5.4', 'lua-c++': '>= 5.4', 'lua5.3-c++': '>= 5.3', 'lua5-c++': '>= 5.3', 'lua-c++': '>= 5.3', 'lua5.2-c++': '>= 5.2', 'lua5-c++': '>= 5.2', 'lua-c++': '>= 5.2'}}
83+
else:
84+
libs['LUA_PC'] = {'checks':{'lua5.4': '>= 5.4', 'lua5': '>= 5.4', 'lua': '>= 5.4', 'lua5.3': '>= 5.3', 'lua5': '>= 5.3', 'lua': '>= 5.3', 'lua5.2': '>= 5.2', 'lua5': '>= 5.2', 'lua': '>= 5.2'}}
8185
env.ConfirmLibs(conf, libs)
8286
env.ConfirmBoost(conf, '1.71')
8387
env = conf.Finish()
@@ -155,19 +159,23 @@ def buildLayout(env):
155159
if not env.GetOption('clean') and not env['TOOLCHAIN'] == 'msvc':
156160
layout_env.ParseConfig('pkg-config --cflags --libs $GTK_PC')
157161
layout_env.ParseConfig('pkg-config --cflags --libs $LUA_PC')
162+
if env['LUA_TYPE'] == 'C++':
163+
layout_env.Append(CPPDEFINES = ['LUA_SYMBOLS_MANGLED'])
158164
return layout_env.StaticObject(layout_env.Glob('source/layout/*.cpp'))
159165

160166
def buildGtk(env):
161167
gtk_env = env.Clone()
162168
if not env.GetOption('clean') and not env['TOOLCHAIN'] == 'msvc':
163169
gtk_env.ParseConfig('pkg-config --cflags --libs $GTK_PC')
164170
gtk_env.ParseConfig('pkg-config --cflags --libs $LUA_PC')
171+
if env['LUA_TYPE'] == 'C++':
172+
gtk_env.Append(CPPDEFINES = ['LUA_SYMBOLS_MANGLED'])
165173
return gtk_env.StaticObject(gtk_env.Glob('source/gtk/*.cpp'))
166174

167175
def buildI18n(env):
168176
i18n_env = env.Clone()
169177
if not env.GetOption('clean'):
170-
if i18n_env['ENABLE_NLS']:
178+
if env['ENABLE_NLS']:
171179
i18n_env.Append(CPPDEFINES = ['ENABLE_NLS', 'LOCALEDIR=' + i18n_env['LOCALEDIR']])
172180
return i18n_env.StaticObject(i18n_env.Glob('source/i18n/*.cpp'))
173181

@@ -189,15 +197,19 @@ def buildTools(env):
189197
if not env.GetOption('clean') and not env['TOOLCHAIN'] == 'msvc':
190198
tools_env.ParseConfig('pkg-config --cflags --libs $GTK_PC')
191199
tools_env.ParseConfig('pkg-config --cflags --libs $LUA_PC')
192-
if tools_env['ENABLE_NLS']:
200+
if env['ENABLE_NLS']:
193201
tools_env.Append(CPPDEFINES = ['ENABLE_NLS'])
202+
if env['LUA_TYPE'] == 'C++':
203+
tools_env.Append(CPPDEFINES = ['LUA_SYMBOLS_MANGLED'])
194204
return tools_env.StaticObject(tools_env.Glob('source/tools/*.cpp'))
195205

196206
def buildLua(env):
197207
lua_env = env.Clone()
198208
if not env.GetOption('clean') and not env['TOOLCHAIN'] == 'msvc':
199209
lua_env.ParseConfig('pkg-config --cflags --libs $GTK_PC')
200210
lua_env.ParseConfig('pkg-config --cflags --libs $LUA_PC')
211+
if env['LUA_TYPE'] == 'C++':
212+
lua_env.Append(CPPDEFINES = ['LUA_SYMBOLS_MANGLED'])
201213
return lua_env.StaticObject(lua_env.Glob('source/lua/*.cpp'))
202214

203215
def buildColorNames(env):
@@ -225,6 +237,8 @@ def buildGpick(env):
225237
gpick_env.ParseConfig('pkg-config --cflags --libs $LUA_PC', None, False)
226238
if env['ENABLE_NLS']:
227239
gpick_env.Append(CPPDEFINES = ['ENABLE_NLS'])
240+
if env['LUA_TYPE'] == 'C++':
241+
gpick_env.Append(CPPDEFINES = ['LUA_SYMBOLS_MANGLED'])
228242
gpick_env.Append(CPPDEFINES = ['GSEAL_ENABLE'])
229243
sources = gpick_env.Glob('source/*.cpp') + gpick_env.Glob('source/transformation/*.cpp')
230244

@@ -273,7 +287,7 @@ def buildGpick(env):
273287
test_env = gpick_env.Clone()
274288
test_env.Append(LIBS = ['boost_unit_test_framework'], CPPDEFINES = ['BOOST_TEST_DYN_LINK'])
275289

276-
tests = test_env.Program('tests', source = test_env.Glob('source/test/*.cpp') + [object_map['source/' + name] for name in ['Color', 'EventBus', 'lua/Script', 'lua/Ref', 'lua/Color', 'lua/ColorObject', 'ColorList', 'ColorObject', 'FileFormat', 'ErrorCode', 'Converter', 'Converters', 'InternalConverters', 'version/Version']] + dynv_objects + text_file_parser_objects + common_objects)
290+
tests = test_env.Program('tests', source = test_env.Glob('source/test/*.cpp') + [object_map['source/' + name] for name in ['Color', 'EventBus', 'lua/Script', 'lua/Ref', 'lua/Color', 'lua/ColorObject', 'ColorList', 'ColorObject', 'FileFormat', 'ErrorCode', 'Converter', 'Converters', 'InternalConverters', 'math/BinaryTreeQuantization', 'math/OctreeColorQuantization', 'version/Version']] + dynv_objects + text_file_parser_objects + common_objects)
277291

278292
return executable, tests
279293

source/lua/Lua.h

+4
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@
1818

1919
#ifndef GPICK_LUA_LUA_H_
2020
#define GPICK_LUA_LUA_H_
21+
#ifndef LUA_SYMBOLS_MANGLED
2122
extern "C" {
23+
#endif
2224
#include <lua.h>
2325
#include <lualib.h>
2426
#include <lauxlib.h>
27+
#ifndef LUA_SYMBOLS_MANGLED
2528
}
29+
#endif
2630
#endif /* GPICK_LUA_LUA_H_ */

0 commit comments

Comments
 (0)