# HG changeset patch # User David Demelier # Date 1632287972 -7200 # Node ID dbfe05b88627f2576c35ffc349fb31628d90f47e # Parent 4ea0f035f71207c8f3cc704370f773af98df2e32 cmake: bring back for good It's just too complicated to get portability done right using pure GNU make and since we're targeting more OSes than Linux we have to incorporate some portability bits. diff -r 4ea0f035f712 -r dbfe05b88627 .hgignore --- a/.hgignore Thu Sep 09 15:30:07 2021 +0200 +++ b/.hgignore Wed Sep 22 07:19:32 2021 +0200 @@ -1,16 +1,5 @@ -# temporary files. -\.a$ -\.d$ -\.o$ -\.mo$ -\.exe$ - -# generated files. -assets/.*\.h$ -^config\.h$ - -# out directory. -^out +# CMake files. +^build # vim/emacs specific. ^tags$ @@ -22,42 +11,3 @@ # macOS specific. \.DS_Store$ - -# examples. -^examples/example-action/main$ -^examples/example-animation/main$ -^examples/example-audio/main$ -^examples/example-cursor/main$ -^examples/example-debug/main$ -^examples/example-drawable/main$ -^examples/example-font/main$ -^examples/example-gridmenu/main$ -^examples/example-label/main$ -^examples/example-message/main$ -^examples/example-sprite/main$ -^examples/example-trace/main$ -^examples/example-ui/main$ - -# tests. -^tests/test-action$ -^tests/test-action-script$ -^tests/test-alloc$ -^tests/test-character$ -^tests/test-color$ -^tests/test-drawable$ -^tests/test-error$ -^tests/test-map$ -^tests/test-save$ -^tests/test-state$ -^tests/test-tileset$ -^tests/test-util$ - -# maps and tilesets from libmlk-data. -^libmlk-data/maps/.*\.map$ -^libmlk-data/maps/.*\.tileset$ - -# executables. -^mlk-adventure/mlk-adventure$ -^tools/bcc/mlk-bcc$ -^tools/map/mlk-map$ -^tools/tileset/mlk-tileset$ diff -r 4ea0f035f712 -r dbfe05b88627 CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,81 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +cmake_minimum_required(VERSION 3.20) +project(molko) + +set_property(GLOBAL PROPERTY USE_FOLDERS On) + +set(CMAKE_C_STANDARD 11) +set(CMAKE_C_STANDARD_REQUIRED On) +set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) + +option(MLK_WITH_NLS "Enable NLS support" On) +option(MLK_WITH_ZSTD "Enable zstd compression" On) +option(MLK_WITH_TESTS "Enable unit tests" On) + +include(cmake/MlkBcc.cmake) +include(cmake/MlkExecutable.cmake) +include(cmake/MlkLibrary.cmake) +include(cmake/MlkMap.cmake) +include(cmake/MlkNls.cmake) +include(cmake/MlkTileset.cmake) + +include(GNUInstallDirs) +include(CheckFunctionExists) + +check_function_exists(strlcpy MLK_HAS_STRLCPY) +check_function_exists(fmemopen MLK_HAS_FMEMOPEN) + +find_package(SDL2 REQUIRED COMPONENTS image mixer ttf) +find_package(Jansson REQUIRED) + +if (MLK_WITH_NLS) + find_package(NLS REQUIRED) + find_package(Intl REQUIRED) +endif () + +if (MLK_WITH_ZSTD) + find_package(ZSTD REQUIRED) +endif () + +configure_file( + ${CMAKE_SOURCE_DIR}/config.h.in + ${CMAKE_BINARY_DIR}/config.h +) +include_directories(${CMAKE_BINARY_DIR}) + +add_subdirectory(extern/libsqlite) +add_subdirectory(extern/libgreatest) + +add_subdirectory(tools/bcc) +add_subdirectory(tools/tileset) +add_subdirectory(tools/map) + +add_subdirectory(libmlk-core) +add_subdirectory(libmlk-ui) +add_subdirectory(libmlk-rpg) +add_subdirectory(libmlk-adventure) +add_subdirectory(libmlk-data) + +add_subdirectory(mlk-adventure) + +if (MLK_WITH_TESTS) + enable_testing() + add_subdirectory(tests) +endif () diff -r 4ea0f035f712 -r dbfe05b88627 GNUmakefile --- a/GNUmakefile Thu Sep 09 15:30:07 2021 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,554 +0,0 @@ -# -# GNUmakefile -- GNU make for molko -# -# Copyright (c) 2020-2021 David Demelier -# -# Permission to use, copy, modify, and/or distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# - -CC= cc -CFLAGS= -O0 -g -AR= ar - -MSGFMT= msgfmt -MSGMERGE= msgmerge -XGETTEXT= xgettext - -# Don't use absolute paths except for PREFIX. -PREFIX= /usr/local -BINDIR= bin -LIBDIR= lib -DATADIR= share -LOCALEDIR= share/locale - -# Compile time options. -NLS= 1 -COMPRESS= 1 -ZSTD= 1 - -LIBMLK_SQLITE= extern/libsqlite/libmlk-sqlite.a -LIBMLK_SQLITE_SRCS= extern/libsqlite/sqlite3.c -LIBMLK_SQLITE_OBJS= ${LIBMLK_SQLITE_SRCS:.c=.o} -LIBMLK_SQLITE_DEPS= ${LIBMLK_SQLITE_SRCS:.c=.d} - -LIBMLK_CORE= libmlk-core/libmlk-core.a -LIBMLK_CORE_SRCS= libmlk-core/core/action.c \ - libmlk-core/core/alloc.c \ - libmlk-core/core/animation.c \ - libmlk-core/core/clock.c \ - libmlk-core/core/core.c \ - libmlk-core/core/drawable.c \ - libmlk-core/core/error.c \ - libmlk-core/core/event.c \ - libmlk-core/core/font.c \ - libmlk-core/core/game.c \ - libmlk-core/core/image.c \ - libmlk-core/core/maths.c \ - libmlk-core/core/music.c \ - libmlk-core/core/painter.c \ - libmlk-core/core/panic.c \ - libmlk-core/core/port.c \ - libmlk-core/core/script.c \ - libmlk-core/core/sound.c \ - libmlk-core/core/sprite.c \ - libmlk-core/core/state.c \ - libmlk-core/core/sys.c \ - libmlk-core/core/texture.c \ - libmlk-core/core/trace.c \ - libmlk-core/core/translate.c \ - libmlk-core/core/util.c \ - libmlk-core/core/window.c \ - libmlk-core/core/zfile.c -LIBMLK_CORE_OBJS= ${LIBMLK_CORE_SRCS:.c=.o} -LIBMLK_CORE_DEPS= ${LIBMLK_CORE_SRCS:.c=.d} - -ifeq (${NLS},1) -LIBMLK_CORE_PO= libmlk-core/nls/fr.po -LIBMLK_CORE_MO= ${LIBMLK_CORE_PO:.po=.mo} -endif - -LIBMLK_UI= libmlk-ui/libmlk-ui.a -LIBMLK_UI_SRCS= libmlk-ui/ui/align.c \ - libmlk-ui/ui/button.c \ - libmlk-ui/ui/checkbox.c \ - libmlk-ui/ui/debug.c \ - libmlk-ui/ui/frame.c \ - libmlk-ui/ui/gridmenu.c \ - libmlk-ui/ui/label.c \ - libmlk-ui/ui/theme.c \ - libmlk-ui/ui/ui.c -LIBMLK_UI_OBJS= ${LIBMLK_UI_SRCS:.c=.o} -LIBMLK_UI_DEPS= ${LIBMLK_UI_SRCS:.c=.d} -LIBMLK_UI_ASTS= libmlk-ui/assets/fonts/opensans-light.h \ - libmlk-ui/assets/fonts/opensans-regular.h - -ifeq (${NLS},1) -LIBMLK_UI_PO= libmlk-ui/nls/fr.po -LIBMLK_UI_MO= ${LIBMLK_UI_PO:.po=.mo} -endif - -LIBMLK_RPG= libmlk-rpg/libmlk-rpg.a -LIBMLK_RPG_SRCS= libmlk-rpg/rpg/battle-bar.c \ - libmlk-rpg/rpg/battle-entity-state-attacking.c \ - libmlk-rpg/rpg/battle-entity-state-blinking.c \ - libmlk-rpg/rpg/battle-entity-state-moving.c \ - libmlk-rpg/rpg/battle-entity-state-normal.c \ - libmlk-rpg/rpg/battle-entity-state.c \ - libmlk-rpg/rpg/battle-entity.c \ - libmlk-rpg/rpg/battle-indicator.c \ - libmlk-rpg/rpg/battle-message.c \ - libmlk-rpg/rpg/battle-state-ai.c \ - libmlk-rpg/rpg/battle-state-attacking.c \ - libmlk-rpg/rpg/battle-state-check.c \ - libmlk-rpg/rpg/battle-state-closing.c \ - libmlk-rpg/rpg/battle-state-item.c \ - libmlk-rpg/rpg/battle-state-lost.c \ - libmlk-rpg/rpg/battle-state-menu.c \ - libmlk-rpg/rpg/battle-state-opening.c \ - libmlk-rpg/rpg/battle-state-selection.c \ - libmlk-rpg/rpg/battle-state-sub.c \ - libmlk-rpg/rpg/battle-state-victory.c \ - libmlk-rpg/rpg/battle-state.c \ - libmlk-rpg/rpg/battle.c \ - libmlk-rpg/rpg/character.c \ - libmlk-rpg/rpg/equipment.c \ - libmlk-rpg/rpg/inventory.c \ - libmlk-rpg/rpg/item.c \ - libmlk-rpg/rpg/map-file.c \ - libmlk-rpg/rpg/map.c \ - libmlk-rpg/rpg/message.c \ - libmlk-rpg/rpg/rpg.c \ - libmlk-rpg/rpg/save.c \ - libmlk-rpg/rpg/selection.c \ - libmlk-rpg/rpg/spell.c \ - libmlk-rpg/rpg/team.c \ - libmlk-rpg/rpg/tileset-file.c \ - libmlk-rpg/rpg/tileset.c \ - libmlk-rpg/rpg/walksprite.c -LIBMLK_RPG_OBJS= ${LIBMLK_RPG_SRCS:.c=.o} -LIBMLK_RPG_DEPS= ${LIBMLK_RPG_SRCS:.c=.d} -LIBMLK_RPG_ASTS= libmlk-rpg/assets/sql/character-load.h \ - libmlk-rpg/assets/sql/character-save.h \ - libmlk-rpg/assets/sql/init.h \ - libmlk-rpg/assets/sql/property-get.h \ - libmlk-rpg/assets/sql/property-remove.h \ - libmlk-rpg/assets/sql/property-set.h - -ifeq (${NLS},1) -LIBMLK_RPG_PO= libmlk-rpg/nls/fr.po -LIBMLK_RPG_MO= ${LIBMLK_RPG_PO:.po=.mo} -endif - -LIBMLK_ADVENTURE= libmlk-adventure/libmlk-adventure.a -LIBMLK_ADVENTURE_SRCS= libmlk-adventure/adventure/action/chest.c \ - libmlk-adventure/adventure/action/spawner.c \ - libmlk-adventure/adventure/action/teleport.c \ - libmlk-adventure/adventure/assets.c \ - libmlk-adventure/adventure/character/black-cat.c \ - libmlk-adventure/adventure/character/neth.c \ - libmlk-adventure/adventure/dialog/save.c \ - libmlk-adventure/adventure/item/potion.c \ - libmlk-adventure/adventure/mapscene/mapscene.c \ - libmlk-adventure/adventure/molko.c \ - libmlk-adventure/adventure/spell/fire-minor.c \ - libmlk-adventure/adventure/state/battle.c \ - libmlk-adventure/adventure/state/continue.c \ - libmlk-adventure/adventure/state/mainmenu.c \ - libmlk-adventure/adventure/state/map.c \ - libmlk-adventure/adventure/state/panic.c \ - libmlk-adventure/adventure/state/splashscreen.c \ - libmlk-adventure/adventure/trace_hud.c -LIBMLK_ADVENTURE_OBJS= ${LIBMLK_ADVENTURE_SRCS:.c=.o} -LIBMLK_ADVENTURE_DEPS= ${LIBMLK_ADVENTURE_SRCS:.c=.d} - -ifeq (${NLS},1) -LIBMLK_ADVENTURE_PO= libmlk-adventure/nls/fr.po -LIBMLK_ADVENTURE_MO= ${LIBMLK_ADVENTURE_PO:.po=.mo} -endif - -# Not a real target, only generated maps and tilesets. -LIBMLK_DATA_ASTS= libmlk-data/maps/map-world.map \ - libmlk-data/maps/tileset-world.tileset - -MLK_BCC= tools/bcc/mlk-bcc -MLK_BCC_SRCS= tools/bcc/main.c -MLK_BCC_OBJS= ${MLK_BCC_SRCS:.c=.o} -MLK_BCC_DEPS= ${MLK_BCC_SRCS:.c=.d} - -MLK_TILESET= tools/tileset/mlk-tileset -MLK_TILESET_SRCS= tools/tileset/main.c -MLK_TILESET_OBJS= ${MLK_TILESET_SRCS:.c=.o} -MLK_TILESET_DEPS= ${MLK_TILESET_SRCS:.c=.d} - -MLK_MAP= tools/map/mlk-map -MLK_MAP_SRCS= tools/map/main.c -MLK_MAP_OBJS= ${MLK_MAP_SRCS:.c=.o} -MLK_MAP_DEPS= ${MLK_MAP_SRCS:.c=.d} - -MLK_ADVENTURE= mlk-adventure/mlk-adventure -MLK_ADVENTURE_SRCS= mlk-adventure/main.c -MLK_ADVENTURE_OBJS= ${MLK_ADVENTURE_SRCS:.c=.o} -MLK_ADVENTURE_DEPS= ${MLK_ADVENTURE_SRCS:.c=.d} - -EXAMPLES= examples/example-action/main \ - examples/example-animation/main \ - examples/example-audio/main \ - examples/example-cursor/main \ - examples/example-debug/main \ - examples/example-drawable/main \ - examples/example-font/main \ - examples/example-gridmenu/main \ - examples/example-label/main \ - examples/example-message/main \ - examples/example-sprite/main \ - examples/example-trace/main \ - examples/example-ui/main - -TESTS= tests/test-action-script \ - tests/test-action \ - tests/test-alloc \ - tests/test-character \ - tests/test-color \ - tests/test-drawable \ - tests/test-error \ - tests/test-map \ - tests/test-save \ - tests/test-state \ - tests/test-tileset \ - tests/test-util - -LIBRARIES= ${LIBMLK_ADVENTURE} \ - ${LIBMLK_CORE} \ - ${LIBMLK_RPG} \ - ${LIBMLK_SQLITE} \ - ${LIBMLK_UI} - -TOOLS= ${MLK_BCC} \ - ${MLK_MAP} \ - ${MLK_TILESET} - -PROGS= ${MLK_ADVENTURE} - -TARGETS:= ${LIBRARIES} ${PROGS} - -ifeq (${NLS},1) -POT:= libmlk-core-pot \ - libmlk-ui-pot \ - libmlk-rpg-pot \ - libmlk-adventure-pot -endif - -SDL2_INCS:= $(shell pkg-config --cflags sdl2 SDL2_mixer SDL2_ttf SDL2_image) -SDL2_LIBS:= $(shell pkg-config --libs sdl2 SDL2_mixer SDL2_ttf SDL2_image) - -JANSSON_INCS:= $(shell pkg-config --cflags jansson) -JANSSON_LIBS:= $(shell pkg-config --libs jansson) - -ifeq (${ZSTD},1) -ZSTD_INCS:= $(shell pkg-config --cflags libzstd) -ZSTD_LIBS:= $(shell pkg-config --libs libzstd) -endif - -INCS= -I. \ - -Iextern/libsqlite \ - -Iextern/libgreatest \ - -Ilibmlk-core \ - -Ilibmlk-ui \ - -Ilibmlk-rpg \ - -Ilibmlk-adventure -DEFS= -DMOLKO_PREFIX=\"${PREFIX}\" \ - -DMOLKO_BINDIR=\"${BINDIR}\" \ - -DMOLKO_DATADIR=\"${DATADIR}\" \ - -DMOLKO_LOCALEDIR=\"${LOCALEDIR}\" - -ifeq (${NLS},1) -SED.nls= s/@define WITH_NLS@/\#define MOLKO_WITH_NLS/ -else -SED.nls= /@define WITH_NLS@/d -endif - -ifeq (${ZSTD},1) -SED.zstd= s/@define WITH_ZSTD@/\#define MOLKO_WITH_ZSTD/ -else -SED.zstd= /@define WITH_ZSTD@/d -endif - -# Can't use standard input otherwise frame content size isn't available. -ifeq (${COMPRESS},1) -TILESET.cmd= ${MLK_TILESET} < $< > $@.tmp && zstd -17 $@.tmp --rm -fqo $@ -MAP.cmd= ${MLK_MAP} < $< > $@.tmp && zstd -17 $@.tmp --rm -fqo $@ -else -TILESET.cmd= ${MLK_TILESET} < $< > $@ -MAP.cmd= ${MLK_MAP} < $< > $@ -endif - -CMD.ar= ${AR} -rc $@ $^ -CMD.cc= ${CC} ${DEFS} ${INCS} ${CFLAGS} -MMD -c $< -o $@ ${LDFLAGS} -CMD.ccld= ${CC} ${DEFS} ${INCS} ${CFLAGS} -o $@ $^ ${LIBS} ${LDFLAGS} - -# All libraries required when linking to Molko's Adventure API. -LIBMLK_ALL:= ${LIBMLK_ADVENTURE} -LIBMLK_ALL+= ${LIBMLK_RPG} -LIBMLK_ALL+= ${LIBMLK_UI} -LIBMLK_ALL+= ${LIBMLK_CORE} -LIBMLK_ALL+= ${LIBMLK_SQLITE} -LIBMLK_ALL+= ${SDL2_LIBS} -LIBMLK_ALL+= ${ZSTD_LIBS} - -ifeq (${NLS},1) -LIBMLK_ALL+= -lintl -endif - -.SUFFIXES: -.SUFFIXES: .c .o .h .json .map .ogg .png .sql .tileset .ttf .mo .po - -all: ${TARGETS} - -config.h: config.h.in - sed -e "${SED.nls}" \ - -e "${SED.zstd}" < $< > $@ - -.c.o: - ${CMD.cc} - -.po.mo: - ${MSGFMT} -o $@ $< - -# Binary files. -.ttf.h .png.h .ogg.h: - ${MLK_BCC} -csu $< assets_$(notdir $<) > $@ - -# Text files. -.sql.h: - ${MLK_BCC} -0csu $< assets_$(notdir $<) > $@ - -# Maps. -.json.map: - ${MAP.cmd} - -# Tilesets. -.json.tileset: - ${TILESET.cmd} - --include ${LIBMLK_ADVENTURE_DEPS} --include ${LIBMLK_CORE_DEPS} --include ${LIBMLK_RPG_DEPS} --include ${LIBMLK_SQLITE_DEPS} --include ${LIBMLK_UI_DEPS} --include ${MLK_ADVENTURE_DEPS} --include ${MLK_BCC_DEPS} --include ${MLK_MAP_DEPS} --include ${MLK_TILESET_DEPS} - -# -# pot(pot, sources, po) -# --------------------- -# -# Regenerate .pot and update .po files. -# -define pot - ${XGETTEXT} -cj -k_ -kN_ -LC -s -o ${1} ${2} - for po in ${3}; do \ - ${MSGMERGE} --backup=off -qU $$po ${1}; \ - done -endef - -# -# pot-install(name, mo, destdir) -# -define pot-install - for mo in ${2}; do \ - mkdir -p ${3}${PREFIX}/${LOCALEDIR}/$$(basename $${mo%.mo})/LC_MESSAGES; \ - cp $$mo ${3}${PREFIX}/${LOCALEDIR}/$$(basename $${mo%.mo})/LC_MESSAGES/${1}.mo; \ - done -endef - -# {{{ libmlk-sqlite - -${LIBMLK_SQLITE}: ${LIBMLK_SQLITE_OBJS} - ${CMD.ar} - -# }}} - -# {{{ libmlk-core - -${LIBMLK_CORE_OBJS}: config.h - -${LIBMLK_CORE}: INCS += ${SDL2_INCS} -${LIBMLK_CORE}: ${LIBMLK_SQLITE} ${LIBMLK_CORE_OBJS} ${LIBMLK_CORE_MO} - ${CMD.ar} - -libmlk-core-pot: - $(call pot, libmlk-core/nls/libmlk-core.pot, ${LIBMLK_CORE_SRCS}, ${LIBMLK_CORE_PO}) - -# }}} - -# {{{ libmlk-ui - -${LIBMLK_UI_ASTS}: ${MLK_BCC} -${LIBMLK_UI_OBJS}: ${LIBMLK_UI_ASTS} config.h - -${LIBMLK_UI}: ${LIBMLK_CORE} ${LIBMLK_UI_OBJS} ${LIBMLK_UI_MO} - ${CMD.ar} - -libmlk-ui-pot: - $(call pot, libmlk-ui/nls/libmlk-ui.pot, ${LIBMLK_UI_SRCS}, ${LIBMLK_UI_PO}) - -# }}} - -# {{{ libmlk-rpg - -${LIBMLK_RPG_ASTS}: ${MLK_BCC} -${LIBMLK_RPG_OBJS}: ${LIBMLK_RPG_ASTS} config.h - -${LIBMLK_RPG}: ${LIBMLK_UI} ${LIBMLK_RPG_OBJS} ${LIBMLK_RPG_MO} - ${CMD.ar} - -libmlk-rpg-pot: - $(call pot, libmlk-rpg/nls/libmlk-rpg.pot, ${LIBMLK_RPG_SRCS}, ${LIBMLK_RPG_PO}) - -# }}} - -# {{{ libmlk-adventure - -${LIBMLK_ADVENTURE_ASTS}: ${MLK_BCC} -${LIBMLK_ADVENTURE_OBJS}: ${LIBMLK_ADVENTURE_ASTS} config.h - -${LIBMLK_ADVENTURE}: ${LIBMLK_RPG} ${LIBMLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE_MO} - ${CMD.ar} - -libmlk-adventure-pot: - $(call pot, libmlk-adventure/nls/libmlk-adventure.pot, ${LIBMLK_ADVENTURE_SRCS}, ${LIBMLK_ADVENTURE_PO}) - -# }}} - -# {{{ libmlk-data - -${LIBMLK_DATA_ASTS}: ${MLK_MAP} ${MLK_TILESET} - -# }}} - -# {{{ tools - -${MLK_BCC}: LIBS := -${MLK_BCC}: ${MLK_BCC_OBJS} - ${CMD.ccld} - -${MLK_TILESET}: LIBS := ${JANSSON_LIBS} -${MLK_TILESET}: ${MLK_TILESET_OBJS} - ${CMD.ccld} - -${MLK_MAP}: LIBS := ${JANSSON_LIBS} -${MLK_MAP}: ${MLK_MAP_OBJS} - ${CMD.ccld} - -# }}} - -# {{{ mlk-adventure - -${MLK_ADVENTURE_OBJS}: ${LIBRARIES} ${LIBMLK_DATA_ASTS} - -${MLK_ADVENTURE}: LIBS := ${LIBMLK_ALL} -${MLK_ADVENTURE}: ${MLK_ADVENTURE_OBJS} - ${CMD.ccld} - -# }}} - -# {{{ examples - -${EXAMPLES}: ${LIBRARIES} - -examples/example-%/main: LIBS := ${LIBMLK_ALL} -examples/example-%/main: examples/example-%/main.c - ${CMD.ccld} - -examples: ${EXAMPLES} - -# }}} - -# {{{ tests - -${TESTS}: ${LIBMLK_ADVENTURE} - -tests/test-%: CFLAGS += -DDIRECTORY=\"${CURDIR}/tests/assets\" -tests/test-%: LIBS := ${LIBMLK_ALL} -tests/test-%: tests/test-%.c - ${CMD.ccld} - -tests: ${TESTS} - for t in ${TESTS}; do printf "\n=> $$t <=\n" && $$t -v; done - -# }}} - -# {{{ clean - -clean: - rm -f config.h tags - rm -f ${LIBMLK_ADVENTURE} ${LIBMLK_ADVENTURE_OBJS} ${LIBMLK_ADVENTURE_DEPS} - rm -f ${LIBMLK_CORE} ${LIBMLK_CORE_OBJS} ${LIBMLK_CORE_DEPS} - rm -f ${LIBMLK_RPG} ${LIBMLK_RPG_OBJS} ${LIBMLK_RPG_DEPS} ${LIBMLK_RPG_ASTS} - rm -f ${LIBMLK_UI} ${LIBMLK_UI_OBJS} ${LIBMLK_UI_DEPS} ${LIBMLK_UI_ASTS} - rm -f ${LIBMLK_SQLITE} ${LIBMLK_SQLITE_OBJS} ${LIBMLK_SQLITE_DEPS} ${LIBMLK_SQLITE_ASTS} - rm -f ${LIBMLK_DATA_ASTS} - rm -f ${MLK_ADVENTURE} ${MLK_ADVENTURE_OBJS} ${MLK_ADVENTURE_DEPS} - rm -f ${MLK_BCC} ${MLK_BCC_OBJS} ${MLK_BCC_DEPS} - rm -f ${MLK_MAP} ${MLK_MAP_OBJS} ${MLK_MAP_DEPS} - rm -f ${MLK_TILESET} ${MLK_TILESET_OBJS} ${MLK_TILESET_DEPS} - rm -f ${EXAMPLES} ${TESTS} - -# }}} - -# {{{ run - -out: ${LIBMLK_DATA_ASTS} ${TARGETS} - mkdir -p out - ${MAKE} DESTDIR=out install-data install - touch out - -run: out - @./out/${PREFIX}/${BINDIR}/mlk-adventure - -# }}} - -install: - mkdir -p ${DESTDIR}${PREFIX}/${BINDIR} - cp ${TOOLS} ${TARGETS} ${DESTDIR}${PREFIX}/${BINDIR} - mkdir -p ${DESTDIR}${PREFIX}/${LIBDIR} - cp ${LIBRARIES} ${DESTDIR}${PREFIX}/${LIBDIR} - -install-data: - mkdir -p ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure - cp -R libmlk-data/fonts ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/fonts - cp -R libmlk-data/images ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/images - cp -R libmlk-data/music ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/music - cp -R libmlk-data/sounds ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/sounds - cp -R libmlk-data/sprites ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/sprites - cp -R libmlk-data/maps ${DESTDIR}${PREFIX}/${DATADIR}/mlk-adventure/maps -ifeq (${NLS},1) - $(call pot-install,libmlk-core,${LIBMLK_CORE_MO},${DESTDIR}) - $(call pot-install,libmlk-ui,${LIBMLK_UI_MO},${DESTDIR}) - $(call pot-install,libmlk-rpg,${LIBMLK_RPG_MO},${DESTDIR}) - $(call pot-install,libmlk-adventure,${LIBMLK_ADVENTURE_MO},${DESTDIR}) -endif - -# {{{ meta targets - -tools: ${TOOLS} - -everything: ${TARGETS} ${TESTS} ${EXAMPLES} - -pot: ${POT} - -# }}} - -.PHONY: all clean examples everything install install-data pot run tests tools diff -r 4ea0f035f712 -r dbfe05b88627 cmake/FindJansson.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/FindJansson.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,42 @@ +# FindJansson +# ----------- +# +# Find Jansson library, this modules defines: +# +# Jansson_INCLUDE_DIRS, where to find jansson.h +# Jansson_LIBRARIES, where to find library +# Jansson_FOUND, if it is found +# +# The following imported targets will be available: +# +# Jansson::Jansson, if found. +# + +find_path(Jansson_INCLUDE_DIR NAMES jansson.h) +find_library(Jansson_LIBRARY NAMES libjansson jansson) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args( + Jansson + FOUND_VAR Jansson_FOUND + REQUIRED_VARS Jansson_LIBRARY Jansson_INCLUDE_DIR +) + +if (Jansson_FOUND) + set(Jansson_LIBRARIES ${Jansson_LIBRARY}) + set(Jansson_INCLUDE_DIRS ${Jansson_INCLUDE_DIR}) + + if (NOT TARGET Jansson::Jansson) + add_library(Jansson::Jansson UNKNOWN IMPORTED) + set_target_properties( + Jansson::Jansson + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${Jansson_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${Jansson_INCLUDE_DIRS}" + ) + endif () +endif () + +mark_as_advanced(Jansson_INCLUDE_DIR Jansson_LIBRARY) diff -r 4ea0f035f712 -r dbfe05b88627 cmake/FindNLS.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/FindNLS.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,31 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +find_program(XGETTEXT xgettext DOC "Path to xgettext utility") +find_program(MSGFMT msgfmt DOC "Path to msgfmt") +find_program(MSGMERGE msgmerge DOC "Path to msgmerge") + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args( + NLS + FOUND_VAR NLS_FOUND + REQUIRED_VARS XGETTEXT MSGFMT MSGMERGE +) + +mark_as_advanced(XGETTEXT MSGFMT MSGMERGE) diff -r 4ea0f035f712 -r dbfe05b88627 cmake/FindSDL2.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/FindSDL2.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,101 @@ +# FindSDL2 +# -------- +# +# Find SDL2 library and components, this modules defines: +# +# SDL2_LIBRARY, the name of the library to link against. +# SDL2_MAIN_LIBRARY, for SDL2main (if present). +# SDL2_LIBRARIES, alias to SDL2_LIBRARY. +# SDL2_FOUND, true if found. +# SDL2_INCLUDE_DIR, where to find SDL.h. +# +# The following imported targets will be defined: +# +# SDL2::SDL2 +# SDL2::SDL2main (if present) +# +# This module also handle the following official SDL addons: +# +# - image +# - mixer +# - net +# - ttf +# +# And thus, variables SDL2__LIBRARY, SDL2__INCLUDE_DIRS and SDL2:: +# imported targets will be defined if they are found. +# + +include(FindPackageHandleStandardArgs) + +# The official include convention is not . +find_path( + SDL2_INCLUDE_DIR + NAMES SDL.h + PATH_SUFFIXES include/SDL2 include +) + +find_library(SDL2_LIBRARY NAMES SDL2 libSDL2) +find_library(SDL2_MAIN_LIBRARY NAMES SDL2main libSDL2main) + +# Standard components. +foreach (c ${SDL2_FIND_COMPONENTS}) + find_path( + SDL2_${c}_INCLUDE_DIR + NAMES SDL.h + PATH_SUFFIXES include/SDL2 include + ) + + find_library( + SDL2_${c}_LIBRARY + NAMES SDL2_${c} libSDL2_${c} + ) + + if (NOT TARGET SDL2::${c} AND SDL2_${c}_LIBRARY) + set(SDL2_${c}_FOUND TRUE) + add_library(SDL2::${c} UNKNOWN IMPORTED) + set_target_properties( + SDL2::${c} + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${SDL2_${c}_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_${c}_INCLUDE_DIRS}" + ) + endif () + + mark_as_advanced(SDL2_${c}_INCLUDE_DIR SDL2_${c}_LIBRARY) +endforeach () + +find_package_handle_standard_args( + SDL2 + REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR + HANDLE_COMPONENTS +) + +if (SDL2_FOUND) + set(SDL2_LIBRARIES ${SDL2_LIBRARY}) + set(SDL2_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) + + if (NOT TARGET SDL2::SDL2) + add_library(SDL2::SDL2 UNKNOWN IMPORTED) + set_target_properties( + SDL2::SDL2 + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${SDL2_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}" + ) + endif () + + if (NOT TARGET SDL2::main AND SDL2_MAIN_LIBRARY) + add_library(SDL2::main UNKNOWN IMPORTED) + set_target_properties( + SDL2::main + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${SDL2_MAIN_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIRS}" + ) + endif () +endif () + +mark_as_advanced(SDL2_INCLUDE_DIR SDL2_LIBRARY) diff -r 4ea0f035f712 -r dbfe05b88627 cmake/FindZSTD.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/FindZSTD.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,50 @@ +# FindZSTD +# -------- +# +# Find ZSTD library, this modules defines: +# +# ZSTD_INCLUDE_DIRS, where to find zstd.h +# ZSTD_LIBRARIES, where to find library +# ZSTD_FOUND, if it is found +# ZSTD_EXE, path to zstd executable if found +# +# The following imported targets will be available: +# +# ZSTD::ZSTD, if found. +# ZSTD::exe, alias to ZSTD_EXE +# + +find_path(ZSTD_INCLUDE_DIR NAMES zstd.h) +find_library(ZSTD_LIBRARY NAMES libzstd zstd) +find_program(ZSTD_EXE NAMES zstd) + +include(FindPackageHandleStandardArgs) + +find_package_handle_standard_args( + ZSTD + FOUND_VAR ZSTD_FOUND + REQUIRED_VARS ZSTD_LIBRARY ZSTD_INCLUDE_DIR +) + +if (ZSTD_FOUND) + set(ZSTD_LIBRARIES ${ZSTD_LIBRARY}) + set(ZSTD_INCLUDE_DIRS ${ZSTD_INCLUDE_DIR}) + + if (NOT TARGET ZSTD::ZSTD) + add_library(ZSTD::ZSTD UNKNOWN IMPORTED) + set_target_properties( + ZSTD::ZSTD + PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES "C" + IMPORTED_LOCATION "${ZSTD_LIBRARY}" + INTERFACE_INCLUDE_DIRECTORIES "${ZSTD_INCLUDE_DIRS}" + ) + endif () + + if (NOT TARGET ZSTD::exe) + add_executable(ZSTD::exe IMPORTED GLOBAL) + set_target_properties(ZSTD::exe PROPERTIES IMPORTED_LOCATION "${ZSTD_EXE}") + endif () +endif () + +mark_as_advanced(ZSTD_INCLUDE_DIR ZSTD_LIBRARY) diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkBcc.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkBcc.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,63 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +macro(mlk_bcc) + set(options "") + set(oneValueArgs OUTPUTS_VAR) + set(multiValueArgs ASSETS) + + cmake_parse_arguments(_bcc "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT _bcc_OUTPUTS_VAR) + message(FATAL_ERROR "Missing OUTPUTS_VAR") + elseif (NOT _bcc_ASSETS) + message(FATAL_ERROR "Missing ASSETS") + endif () + + foreach (a ${_bcc_ASSETS}) + cmake_path( + RELATIVE_PATH a + BASE_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} + OUTPUT_VARIABLE output + ) + cmake_path(GET output PARENT_PATH outputdir) + cmake_path(GET output EXTENSION extension) + cmake_path(REPLACE_EXTENSION output .h) + cmake_path(REMOVE_EXTENSION output OUTPUT_VARIABLE outputname) + + if (extension MATCHES ".sql") + set(args "-0csu") + else () + set(args "-csu") + endif () + + set(outputfile ${CMAKE_CURRENT_BINARY_DIR}/${output}) + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${output} + COMMAND + ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/${outputdir} + COMMAND + $ ${args} ${a} ${outputname} > ${outputfile} + COMMENT "Generating ${output}" + DEPENDS $ + ) + + list(APPEND ${_bcc_OUTPUTS_VAR} ${CMAKE_CURRENT_BINARY_DIR}/${output}) + endforeach () +endmacro() diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkExecutable.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkExecutable.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,43 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +function(mlk_executable) + set(options "") + set(oneValueArgs "NAME;FOLDER") + set(multiValueArgs "SOURCES;LIBRARIES;INCLUDES;FLAGS") + + cmake_parse_arguments(EXE "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT EXE_NAME) + message(FATAL_ERROR "Missing NAME") + endif () + + add_executable(${EXE_NAME} ${EXE_SOURCES}) + + if (EXE_FOLDER) + set_target_properties(${EXE_NAME} PROPERTIES FOLDER ${EXE_FOLDER}) + endif () + + if (EXE_LIBRARIES) + target_link_libraries(${EXE_NAME} ${EXE_LIBRARIES}) + endif () + + if (EXE_INCLUDES) + target_include_directories(${EXE_NAME} ${EXE_INCLUDES}) + endif () +endfunction() diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkLibrary.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkLibrary.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,67 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +include(${CMAKE_CURRENT_LIST_DIR}/MlkBcc.cmake) +include(${CMAKE_CURRENT_LIST_DIR}/MlkNls.cmake) + +function(mlk_library) + set(options "") + set(oneValueArgs "NAME;FOLDER") + set(multiValueArgs "SOURCES;ASSETS;LANGS;LIBRARIES;INCLUDES;FLAGS") + + cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT LIB_NAME) + message(FATAL_ERROR "Missing NAME") + endif () + + if (LIB_ASSETS) + mlk_bcc(ASSETS ${LIB_ASSETS} OUTPUTS_VAR HEADERS) + source_group(build/assets FILES ${HEADERS}) + endif () + + if (LIB_LANGS) + mlk_nls( + NAME ${LIB_NAME} + LANGS ${LIB_LANGS} + SOURCES ${LIB_SOURCES} + OUTPUTS_VAR MO + ) + source_group(build/nls FILES ${MO}) + endif () + + add_library(${LIB_NAME} ${LIB_SOURCES} ${HEADERS} ${MO}) + + if (LIB_FOLDER) + set_target_properties(${LIB_NAME} PROPERTIES FOLDER extern) + endif () + + if (LIB_FLAGS) + target_compile_definitions(${LIB_NAME} ${LIB_FLAGS}) + endif () + + if (LIB_LIBRARIES) + target_link_libraries(${LIB_NAME} ${LIB_LIBRARIES}) + endif () + + if (LIB_INCLUDES) + target_include_directories(${LIB_NAME} ${LIB_INCLUDES}) + endif () + + set_target_properties(${LIB_NAME} PROPERTIES PREFIX "") +endfunction() diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkMap.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkMap.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,62 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +macro(mlk_map) + set(options "") + set(oneValueArgs "OUTPUTS_VAR") + set(multiValueArgs "MAPS") + + cmake_parse_arguments(_map "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT _map_OUTPUTS_VAR) + message(FATAL_ERROR "Missing OUTPUTS_VAR") + elseif (NOT _map_MAPS) + message(FATAL_ERROR "Missing MAPS") + endif () + + foreach (m ${_map_MAPS}) + cmake_path(GET m FILENAME name) + cmake_path(REMOVE_EXTENSION name) + + if (MLK_WITH_ZSTD) + set(_map_cmds + COMMAND $ < ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${name}.tmp + COMMAND + ZSTD::exe -17 -fq + --rm ${CMAKE_CURRENT_BINARY_DIR}/${name}.tmp + -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.map + ) + else () + set(_map_cmds + COMMAND $ < ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${name}.map + ) + endif () + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.map + COMMAND + ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${_map_cmds} + DEPENDS $ + COMMENT "Generating ${name}.map" + ) + + list(APPEND ${_map_OUTPUTS_VAR} ${CMAKE_CURRENT_BINARY_DIR}/${name}.map) + endforeach () +endmacro() diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkNls.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkNls.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,70 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +macro(mlk_nls) + set(options "") + set(oneValueArgs "NAME") + set(multiValueArgs "LANGS;SOURCES;OUTPUTS_VAR") + + cmake_parse_arguments(_nls "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT _nls_NAME) + message(FATAL_ERROR "Missing NAME") + elseif (NOT _nls_OUTPUTS_VAR) + message(FATAL_ERROR "Missing OUTPUTS_VAR") + elseif (NOT _nls_LANGS) + message(FATAL_ERROR "Missing LANGS") + elseif (NOT _nls_SOURCES) + message(FATAL_ERROR "Missing SOURCES") + endif () + + set(_nls_po_cmds) + + foreach (l ${_nls_LANGS}) + cmake_path(GET l FILENAME name) + cmake_path(REMOVE_EXTENSION name) + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.mo + COMMAND ${MSGFMT} -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.mo ${l} + COMMENT "Generating NLS translation ${name}.mo" + ) + + list(APPEND ${_nls_OUTPUTS_VAR} ${CMAKE_CURRENT_BINARY_DIR}/${name}.mo) + install( + FILES ${CMAKE_CURRENT_BINARY_DIR}/${name}.mo + DESTINATION ${CMAKE_INSTALL_LOCALEDIR}/${name}/LC_MESSAGES + RENAME ${_nls_NAME}.mo + ) + + # Commands to update .po files. + list( + APPEND _nls_po_cmds + COMMAND ${MSGMERGE} --backup=off -qU ${l} ${CMAKE_CURRENT_SOURCE_DIR}/nls/${_nls_NAME}.pot + ) + endforeach () + + add_custom_target( + po-${_nls_NAME} + COMMAND + ${XGETTEXT} -cj -k_ -kN_ -LC -s -o ${CMAKE_CURRENT_SOURCE_DIR}/nls/${_nls_NAME}.pot ${_nls_SOURCES} + ${_nls_po_cmds} + COMMENT "Updating in-source .pot and .po files" + ) + set_target_properties(po-${_nls_NAME} PROPERTIES FOLDER "nls") +endmacro() diff -r 4ea0f035f712 -r dbfe05b88627 cmake/MlkTileset.cmake --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cmake/MlkTileset.cmake Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,62 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +macro(mlk_tileset) + set(options "") + set(oneValueArgs "OUTPUTS_VAR") + set(multiValueArgs "TILESETS") + + cmake_parse_arguments(_tileset "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) + + if (NOT _tileset_OUTPUTS_VAR) + message(FATAL_ERROR "Missing OUTPUTS_VAR") + elseif (NOT _tileset_TILESETS) + message(FATAL_ERROR "Missing TILESETS") + endif () + + foreach (m ${_tileset_TILESETS}) + cmake_path(GET m FILENAME name) + cmake_path(REMOVE_EXTENSION name) + + if (MLK_WITH_ZSTD) + set(_tileset_cmds + COMMAND $ < ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${name}.tmp + COMMAND + ZSTD::exe -17 -fq + --rm ${CMAKE_CURRENT_BINARY_DIR}/${name}.tmp + -o ${CMAKE_CURRENT_BINARY_DIR}/${name}.tileset + ) + else () + set(_tileset_cmds + COMMAND $ < ${m} > ${CMAKE_CURRENT_BINARY_DIR}/${name}.tileset + ) + endif () + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${name}.tileset + COMMAND + ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR} + COMMAND + ${_tileset_cmds} + DEPENDS $ + COMMENT "Generating ${name}.tileset" + ) + + list(APPEND ${_tileset_OUTPUTS_VAR} ${CMAKE_CURRENT_BINARY_DIR}/${name}.tileset) + endforeach () +endmacro() diff -r 4ea0f035f712 -r dbfe05b88627 config.h.in --- a/config.h.in Thu Sep 09 15:30:07 2021 +0200 +++ b/config.h.in Wed Sep 22 07:19:32 2021 +0200 @@ -1,2 +1,10 @@ -@define WITH_NLS@ -@define WITH_ZSTD@ +#cmakedefine MLK_WITH_NLS +#cmakedefine MLK_WITH_ZSTD + +#cmakedefine MLK_HAS_STRLCPY +#cmakedefine MLK_HAS_FMEMOPEN + +#define MLK_PREFIX "@CMAKE_INSTALL_PREFIX@" +#define MLK_BINDIR "@CMAKE_INSTALL_BINDIR@" +#define MLK_DATADIR "@CMAKE_INSTALL_DATADIR@" +#define MLK_LOCALEDIR "@CMAKE_INSTALL_LOCALEDIR@" diff -r 4ea0f035f712 -r dbfe05b88627 extern/libgreatest/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extern/libgreatest/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,29 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-greatest) + +add_library(libmlk-greatest INTERFACE ${libmlk-greatest_SOURCE_DIR}/greatest.h) +target_include_directories( + libmlk-greatest + INTERFACE + $ +) +set_target_properties(libmlk-greatest PROPERTIES FOLDER extern) + +source_group("" FILES ${libmlk-greatest_SOURCE_DIR}/greatest.h) diff -r 4ea0f035f712 -r dbfe05b88627 extern/libsqlite/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extern/libsqlite/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,42 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-sqlite) + +set( + SOURCES + ${libmlk-sqlite_SOURCE_DIR}/sqlite3.c + ${libmlk-sqlite_SOURCE_DIR}/sqlite3.h +) + +mlk_library( + NAME libmlk-sqlite + SOURCES ${SOURCES} + FOLDER extern + FLAGS + PRIVATE + SQLITE_THREADSAFE=0 + SQLITE_DEFAULT_MEMSTATUS=0 + SQLITE_OMIT_DECLTYPE + SQLITE_OMIT_DEPRECATED + SQLITE_DEFAULT_FOREIGN_KEYS=1 + INCLUDES + PUBLIC $ +) + +source_group(TREE ${libmlk-sqlite_SOURCE_DIR} FILES ${SOURCES}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-adventure/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-adventure/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,76 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-adventure) + +set( + SOURCES + ${libmlk-adventure_SOURCE_DIR}/adventure/action/chest.c + ${libmlk-adventure_SOURCE_DIR}/adventure/action/chest.h + ${libmlk-adventure_SOURCE_DIR}/adventure/action/spawner.c + ${libmlk-adventure_SOURCE_DIR}/adventure/action/spawner.h + ${libmlk-adventure_SOURCE_DIR}/adventure/action/teleport.c + ${libmlk-adventure_SOURCE_DIR}/adventure/action/teleport.h + ${libmlk-adventure_SOURCE_DIR}/adventure/adventure_p.h + ${libmlk-adventure_SOURCE_DIR}/adventure/assets.c + ${libmlk-adventure_SOURCE_DIR}/adventure/assets.h + ${libmlk-adventure_SOURCE_DIR}/adventure/character/black-cat.c + ${libmlk-adventure_SOURCE_DIR}/adventure/character/black-cat.h + ${libmlk-adventure_SOURCE_DIR}/adventure/character/neth.c + ${libmlk-adventure_SOURCE_DIR}/adventure/character/neth.h + ${libmlk-adventure_SOURCE_DIR}/adventure/dialog/save.c + ${libmlk-adventure_SOURCE_DIR}/adventure/dialog/save.h + ${libmlk-adventure_SOURCE_DIR}/adventure/item/potion.c + ${libmlk-adventure_SOURCE_DIR}/adventure/item/potion.h + ${libmlk-adventure_SOURCE_DIR}/adventure/mapscene/mapscene.c + ${libmlk-adventure_SOURCE_DIR}/adventure/mapscene/mapscene.h + ${libmlk-adventure_SOURCE_DIR}/adventure/molko.c + ${libmlk-adventure_SOURCE_DIR}/adventure/molko.h + ${libmlk-adventure_SOURCE_DIR}/adventure/spell/fire-minor.c + ${libmlk-adventure_SOURCE_DIR}/adventure/spell/fire-minor.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/battle.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/battle.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/continue.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/continue.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/mainmenu.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/mainmenu.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/map.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/map.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/panic.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/panic.h + ${libmlk-adventure_SOURCE_DIR}/adventure/state/splashscreen.c + ${libmlk-adventure_SOURCE_DIR}/adventure/state/splashscreen.h + ${libmlk-adventure_SOURCE_DIR}/adventure/trace_hud.c + ${libmlk-adventure_SOURCE_DIR}/adventure/trace_hud.h +) + +set( + NLS + ${libmlk-adventure_SOURCE_DIR}/nls/fr.po +) + +mlk_library( + NAME libmlk-adventure + SOURCES ${SOURCES} ${NLS} + LANGS ${NLS} + LIBRARIES libmlk-rpg + INCLUDES + PUBLIC $ +) + +source_group(TREE ${libmlk-adventure_SOURCE_DIR} FILES ${SOURCES} ${NLS}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-core/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,108 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-core) + +set( + SOURCES + ${libmlk-core_SOURCE_DIR}/core/action.c + ${libmlk-core_SOURCE_DIR}/core/action.h + ${libmlk-core_SOURCE_DIR}/core/alloc.c + ${libmlk-core_SOURCE_DIR}/core/alloc.h + ${libmlk-core_SOURCE_DIR}/core/animation.c + ${libmlk-core_SOURCE_DIR}/core/animation.h + ${libmlk-core_SOURCE_DIR}/core/clock.c + ${libmlk-core_SOURCE_DIR}/core/clock.h + ${libmlk-core_SOURCE_DIR}/core/color.h + ${libmlk-core_SOURCE_DIR}/core/core.c + ${libmlk-core_SOURCE_DIR}/core/core.h + ${libmlk-core_SOURCE_DIR}/core/core_p.h + ${libmlk-core_SOURCE_DIR}/core/drawable.c + ${libmlk-core_SOURCE_DIR}/core/drawable.h + ${libmlk-core_SOURCE_DIR}/core/error.c + ${libmlk-core_SOURCE_DIR}/core/error.h + ${libmlk-core_SOURCE_DIR}/core/event.c + ${libmlk-core_SOURCE_DIR}/core/event.h + ${libmlk-core_SOURCE_DIR}/core/font.c + ${libmlk-core_SOURCE_DIR}/core/font.h + ${libmlk-core_SOURCE_DIR}/core/game.c + ${libmlk-core_SOURCE_DIR}/core/game.h + ${libmlk-core_SOURCE_DIR}/core/image.c + ${libmlk-core_SOURCE_DIR}/core/image.h + ${libmlk-core_SOURCE_DIR}/core/inhibit.h + ${libmlk-core_SOURCE_DIR}/core/key.h + ${libmlk-core_SOURCE_DIR}/core/maths.c + ${libmlk-core_SOURCE_DIR}/core/maths.h + ${libmlk-core_SOURCE_DIR}/core/mouse.h + ${libmlk-core_SOURCE_DIR}/core/music.c + ${libmlk-core_SOURCE_DIR}/core/music.h + ${libmlk-core_SOURCE_DIR}/core/painter.c + ${libmlk-core_SOURCE_DIR}/core/painter.h + ${libmlk-core_SOURCE_DIR}/core/panic.c + ${libmlk-core_SOURCE_DIR}/core/panic.h + ${libmlk-core_SOURCE_DIR}/core/port.c + ${libmlk-core_SOURCE_DIR}/core/port.h + ${libmlk-core_SOURCE_DIR}/core/script.c + ${libmlk-core_SOURCE_DIR}/core/script.h + ${libmlk-core_SOURCE_DIR}/core/sound.c + ${libmlk-core_SOURCE_DIR}/core/sound.h + ${libmlk-core_SOURCE_DIR}/core/sprite.c + ${libmlk-core_SOURCE_DIR}/core/sprite.h + ${libmlk-core_SOURCE_DIR}/core/state.c + ${libmlk-core_SOURCE_DIR}/core/state.h + ${libmlk-core_SOURCE_DIR}/core/sys.c + ${libmlk-core_SOURCE_DIR}/core/sys.h + ${libmlk-core_SOURCE_DIR}/core/texture.c + ${libmlk-core_SOURCE_DIR}/core/texture.h + ${libmlk-core_SOURCE_DIR}/core/texture_p.h + ${libmlk-core_SOURCE_DIR}/core/trace.c + ${libmlk-core_SOURCE_DIR}/core/trace.h + ${libmlk-core_SOURCE_DIR}/core/translate.c + ${libmlk-core_SOURCE_DIR}/core/translate.h + ${libmlk-core_SOURCE_DIR}/core/util.c + ${libmlk-core_SOURCE_DIR}/core/util.h + ${libmlk-core_SOURCE_DIR}/core/window.c + ${libmlk-core_SOURCE_DIR}/core/window.h + ${libmlk-core_SOURCE_DIR}/core/window_p.h + ${libmlk-core_SOURCE_DIR}/core/zfile.c + ${libmlk-core_SOURCE_DIR}/core/zfile.h +) + +set( + NLS + ${libmlk-core_SOURCE_DIR}/nls/fr.po +) + +if (MLK_WITH_NLS) + list(APPEND LIBRARIES ${Intl_LIBRARIES}) +endif () + +if (MLK_WITH_ZSTD) + list(APPEND LIBRARIES ZSTD::ZSTD) +endif () + +mlk_library( + NAME libmlk-core + SOURCES ${SOURCES} ${NLS} + LANGS ${NLS} + LIBRARIES PUBLIC ${LIBRARIES} SDL2::SDL2 SDL2::image SDL2::ttf SDL2::mixer + INCLUDES + PUBLIC $ +) + +source_group(TREE ${libmlk-core_SOURCE_DIR} FILES ${SOURCES} ${NLS}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/core/port.c --- a/libmlk-core/core/port.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/core/port.c Wed Sep 22 07:19:32 2021 +0200 @@ -20,7 +20,7 @@ /* {{{ strlcpy (BSD extension, incoming in next POSIX). */ -#if defined(MOLKO_PORT_NEED_STRLCPY) +#if !defined(MLK_HAS_STRLCPY) /* $OpenBSD: strlcpy.c,v 1.16 2019/01/25 00:19:25 millert Exp $ */ @@ -67,19 +67,20 @@ ; } - return(src - osrc - 1); /* count does not include NUL */ + return (src - osrc - 1); /* count does not include NUL */ } -#endif /* !MOLKO_PORT_NEED_STRLCPY */ +#endif /* !MLK_HAS_STRLCPY */ /* }}} */ /* {{{ fmemopen (POSIX). */ -/* https://github.com/Arryboom/fmemopen_windows */ +#if !defined(MLK_HAS_FMEMOPEN) -#if defined(MOLKO_PORT_NEED_FMEMOPEN) +#if defined(_WIN32) +/* https://github.com/Arryboom/fmemopen_windows */ #include #include #include @@ -97,6 +98,7 @@ int * pfd = &fd; int retner = -1; char tfname[] = "MemTF_"; + if (!GetTempPathA(sizeof(tp), tp)) return NULL; if (!GetTempFileNameA(tp, tfname, 0, fn)) @@ -111,6 +113,7 @@ _close(fd); return NULL; } + /* * File descriptors passed into _fdopen are owned by the returned FILE * stream.If _fdopen is successful, do not call _close on the file @@ -119,9 +122,12 @@ */ fwrite(buf, len, 1, fp); rewind(fp); + return fp; } -#endif /* !MOLKO_PORT_NEED_FMEMOPEN */ +#endif /* !_WIN32 */ + +#endif /* !MLK_HAS_FMEMOPEN */ /* }}} */ diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/core/port.h --- a/libmlk-core/core/port.h Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/core/port.h Wed Sep 22 07:19:32 2021 +0200 @@ -19,37 +19,31 @@ #ifndef MOLKO_CORE_PORT_H #define MOLKO_CORE_PORT_H +#include "config.h" + /* {{{ strlcpy (BSD extension, incoming in next POSIX). */ -#if defined(_WIN32) -# define MOLKO_PORT_NEED_STRLCPY -#endif - -#if defined(MOLKO_PORT_NEED_STRLCPY) +#if !defined(MLK_HAS_STRLCPY) #include size_t strlcpy(char *, const char *, size_t); -#endif +#endif /* !MLK_HAS_STRLCPY */ /* }}} */ /* {{{ fmemopen (POSIX). */ -#if defined(_WIN32) -# define MOLKO_PORT_NEED_FMEMOPEN -#endif - -#if defined(MOLKO_PORT_NEED_FMEMOPEN) +#if !defined(MLK_HAS_FMEMOPEN) #include FILE * fmemopen(void *, size_t, const char *); -#endif +#endif /* !MLK_HAS_FMEMOPEN */ /* }}} */ diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/core/sys.c --- a/libmlk-core/core/sys.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/core/sys.c Wed Sep 22 07:19:32 2021 +0200 @@ -51,9 +51,9 @@ }; static const char *paths[] = { - [SYS_DIR_BIN] = MOLKO_BINDIR, - [SYS_DIR_DATA] = MOLKO_DATADIR, - [SYS_DIR_LOCALE] = MOLKO_LOCALEDIR + [SYS_DIR_BIN] = MLK_BINDIR, + [SYS_DIR_DATA] = MLK_DATADIR, + [SYS_DIR_LOCALE] = MLK_LOCALEDIR }; static inline char * @@ -84,7 +84,7 @@ char *base, *binsect; if ((base = getenv("MLK_ROOT"))) { - snprintf(ret, sizeof (ret), "%s/%s/%s", base, MOLKO_PREFIX, paths[kind]); + snprintf(ret, sizeof (ret), "%s/%s/%s", base, MLK_PREFIX, paths[kind]); } else { /* * Some system does not provide support (shame on you OpenBSD) @@ -92,7 +92,7 @@ * instead. */ if (!(base = SDL_GetBasePath())) - snprintf(ret, sizeof (ret), "%s/%s", MOLKO_PREFIX, paths[kind]); + snprintf(ret, sizeof (ret), "%s/%s", MLK_PREFIX, paths[kind]); else { /* * Decompose the path to the given special directory by @@ -108,7 +108,7 @@ * the binary. * * Put the base path into the path and remove the value - * of MOLKO_BINDIR. + * of MLK_BINDIR. * * Example: * from: /usr/local/bin diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/core/translate.c --- a/libmlk-core/core/translate.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/core/translate.c Wed Sep 22 07:19:32 2021 +0200 @@ -20,7 +20,7 @@ #include "config.h" -#if defined(MOLKO_WITH_NLS) +#if defined(MLK_WITH_NLS) # include #endif @@ -31,7 +31,7 @@ int translate_init(const char *name) { -#if defined(MOLKO_WITH_NLS) +#if defined(MLK_WITH_NLS) if (!bindtextdomain(name, sys_dir(SYS_DIR_LOCALE))) return -1; #endif diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/core/zfile.c --- a/libmlk-core/core/zfile.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/core/zfile.c Wed Sep 22 07:19:32 2021 +0200 @@ -31,7 +31,7 @@ * If not enabled, we still need to check if a file is in zstandard so we use * the magic number defined in the zstd.h file or copy it if zstd is disabled. */ -#if defined(MOLKO_WITH_ZSTD) +#if defined(MLK_WITH_ZSTD) # include #else # define ZSTD_MAGICNUMBER 0xFD2FB528 @@ -63,7 +63,7 @@ static int decompress(int fd, struct zfile *zf) { -#if defined(MOLKO_WITH_ZSTD) +#if defined(MLK_WITH_ZSTD) char *in = NULL; unsigned long long datasz; struct stat st; diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/nls/fr.po --- a/libmlk-core/nls/fr.po Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/nls/fr.po Wed Sep 22 07:19:32 2021 +0200 @@ -20,7 +20,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-27 19:14+0200\n" +"POT-Creation-Date: 2021-09-21 22:44+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -29,12 +29,12 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: libmlk-core/core/panic.c:30 +#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:30 #, c-format msgid "abort: %s\n" msgstr "fatal: %s\n" -#: libmlk-core/core/panic.c:76 +#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:76 #, c-format msgid "abort: panic handler returned\n" msgstr "fatal: la fonction de panique n'aurait pas du continuer\n" diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-core/nls/libmlk-core.pot --- a/libmlk-core/nls/libmlk-core.pot Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-core/nls/libmlk-core.pot Wed Sep 22 07:19:32 2021 +0200 @@ -8,7 +8,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-06-28 21:06+0200\n" +"POT-Creation-Date: 2021-09-21 22:47+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,12 +17,12 @@ "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" -#: libmlk-core/core/panic.c:30 +#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:30 #, c-format msgid "abort: %s\n" msgstr "" -#: libmlk-core/core/panic.c:76 +#: /Users/markand/Dev/molko/libmlk-core/core/panic.c:76 #, c-format msgid "abort: panic handler returned\n" msgstr "" diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-data/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-data/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,85 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-data) + +set( + SOURCES + ${libmlk-data_SOURCE_DIR}/fonts/cubic.ttf + ${libmlk-data_SOURCE_DIR}/fonts/lato.ttf + ${libmlk-data_SOURCE_DIR}/fonts/pirata-one.ttf + ${libmlk-data_SOURCE_DIR}/fonts/teutonic.ttf + ${libmlk-data_SOURCE_DIR}/images/battle-background.png + ${libmlk-data_SOURCE_DIR}/images/black-cat.png + ${libmlk-data_SOURCE_DIR}/images/haunted-wood.png + ${libmlk-data_SOURCE_DIR}/maps/animation-water.png + ${libmlk-data_SOURCE_DIR}/maps/map-world.json + ${libmlk-data_SOURCE_DIR}/maps/sprite-world.png + ${libmlk-data_SOURCE_DIR}/maps/tileset-world.json + ${libmlk-data_SOURCE_DIR}/music/vabsounds-romance.ogg + ${libmlk-data_SOURCE_DIR}/sounds/fire.wav + ${libmlk-data_SOURCE_DIR}/sounds/potion.wav + ${libmlk-data_SOURCE_DIR}/sprites/chest.png + ${libmlk-data_SOURCE_DIR}/sprites/chest.xcf + ${libmlk-data_SOURCE_DIR}/sprites/explosion.png + ${libmlk-data_SOURCE_DIR}/sprites/faces.png + ${libmlk-data_SOURCE_DIR}/sprites/john-sword.png + ${libmlk-data_SOURCE_DIR}/sprites/john-sword.xcf + ${libmlk-data_SOURCE_DIR}/sprites/john-walk.png + ${libmlk-data_SOURCE_DIR}/sprites/john-walk.xcf + ${libmlk-data_SOURCE_DIR}/sprites/john.png + ${libmlk-data_SOURCE_DIR}/sprites/numbers.png + ${libmlk-data_SOURCE_DIR}/sprites/people.png + ${libmlk-data_SOURCE_DIR}/sprites/ui-cursor.png +) + +mlk_map( + MAPS + ${libmlk-data_SOURCE_DIR}/maps/map-world.json + OUTPUTS_VAR maps +) + +mlk_tileset( + TILESETS + ${libmlk-data_SOURCE_DIR}/maps/tileset-world.json + OUTPUTS_VAR tilesets +) + +add_custom_target( + libmlk-data + ALL + SOURCES ${SOURCES} ${maps} ${tilesets} +) + +foreach (dir fonts images maps music sounds sprites) + install( + DIRECTORY ${libmlk-data_SOURCE_DIR}/${dir}/ + DESTINATION ${CMAKE_INSTALL_DATADIR}/mlk-adventure/${dir} + FILES_MATCHING REGEX "[.]png$|[.]ttf$|[.]wav$|[.]ogg$" + ) +endforeach () + +# Generated maps and tilesets. +install( + FILES + ${maps} + ${tilesets} + DESTINATION ${CMAKE_INSTALL_DATADIR}/mlk-adventure/maps +) + +source_group(TREE ${libmlk-data_SOURCE_DIR} FILES ${SOURCES}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-rpg/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-rpg/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,111 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-rpg) + +set( + SOURCES + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-bar.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-bar.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state-attacking.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state-blinking.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state-moving.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state-normal.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity-state.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-entity.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-indicator.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-indicator.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-message.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-message.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-ai.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-attacking.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-check.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-closing.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-item.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-lost.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-menu.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-opening.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-selection.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-sub.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state-victory.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle-state.h + ${libmlk-rpg_SOURCE_DIR}/rpg/battle.c + ${libmlk-rpg_SOURCE_DIR}/rpg/battle.h + ${libmlk-rpg_SOURCE_DIR}/rpg/character.c + ${libmlk-rpg_SOURCE_DIR}/rpg/character.h + ${libmlk-rpg_SOURCE_DIR}/rpg/equipment.c + ${libmlk-rpg_SOURCE_DIR}/rpg/equipment.h + ${libmlk-rpg_SOURCE_DIR}/rpg/inventory.c + ${libmlk-rpg_SOURCE_DIR}/rpg/inventory.h + ${libmlk-rpg_SOURCE_DIR}/rpg/item.c + ${libmlk-rpg_SOURCE_DIR}/rpg/item.h + ${libmlk-rpg_SOURCE_DIR}/rpg/map-file.c + ${libmlk-rpg_SOURCE_DIR}/rpg/map-file.h + ${libmlk-rpg_SOURCE_DIR}/rpg/map.c + ${libmlk-rpg_SOURCE_DIR}/rpg/map.h + ${libmlk-rpg_SOURCE_DIR}/rpg/message.c + ${libmlk-rpg_SOURCE_DIR}/rpg/message.h + ${libmlk-rpg_SOURCE_DIR}/rpg/rpg.c + ${libmlk-rpg_SOURCE_DIR}/rpg/rpg.h + ${libmlk-rpg_SOURCE_DIR}/rpg/rpg_p.h + ${libmlk-rpg_SOURCE_DIR}/rpg/save.c + ${libmlk-rpg_SOURCE_DIR}/rpg/save.h + ${libmlk-rpg_SOURCE_DIR}/rpg/selection.c + ${libmlk-rpg_SOURCE_DIR}/rpg/selection.h + ${libmlk-rpg_SOURCE_DIR}/rpg/spell.c + ${libmlk-rpg_SOURCE_DIR}/rpg/spell.h + ${libmlk-rpg_SOURCE_DIR}/rpg/team.c + ${libmlk-rpg_SOURCE_DIR}/rpg/team.h + ${libmlk-rpg_SOURCE_DIR}/rpg/tileset-file.c + ${libmlk-rpg_SOURCE_DIR}/rpg/tileset-file.h + ${libmlk-rpg_SOURCE_DIR}/rpg/tileset.c + ${libmlk-rpg_SOURCE_DIR}/rpg/tileset.h + ${libmlk-rpg_SOURCE_DIR}/rpg/walksprite.c + ${libmlk-rpg_SOURCE_DIR}/rpg/walksprite.h +) + +set( + ASSETS + ${libmlk-rpg_SOURCE_DIR}/assets/sql/character-load.sql + ${libmlk-rpg_SOURCE_DIR}/assets/sql/character-save.sql + ${libmlk-rpg_SOURCE_DIR}/assets/sql/init.sql + ${libmlk-rpg_SOURCE_DIR}/assets/sql/property-get.sql + ${libmlk-rpg_SOURCE_DIR}/assets/sql/property-remove.sql + ${libmlk-rpg_SOURCE_DIR}/assets/sql/property-set.sql +) + +set( + NLS + ${libmlk-rpg_SOURCE_DIR}/nls/fr.po +) + +mlk_library( + NAME libmlk-rpg + SOURCES ${SOURCES} ${ASSETS} ${NLS} + LANGS ${NLS} + ASSETS ${ASSETS} + LIBRARIES libmlk-ui libmlk-sqlite + INCLUDES + PRIVATE $ + PUBLIC $ +) + +source_group(TREE ${libmlk-rpg_SOURCE_DIR} FILES ${SOURCES} ${ASSETS} ${NLS}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-rpg/rpg/character.c --- a/libmlk-rpg/rpg/character.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-rpg/rpg/character.c Wed Sep 22 07:19:32 2021 +0200 @@ -76,7 +76,7 @@ assert(ch); assert(save_ok(s)); - return save_exec(s, (const char *)assets_character_save, "s iii i iiiiii", + return save_exec(s, (const char *)assets_sql_character_save, "s iii i iiiiii", ch->name, ch->hp, ch->mp, @@ -100,7 +100,7 @@ struct save_stmt stmt; int ret; - if (save_stmt_init(s, &stmt, (const char *)assets_character_load, "s", ch->name) < 0) + if (save_stmt_init(s, &stmt, (const char *)assets_sql_character_load, "s", ch->name) < 0) return -1; ret = save_stmt_next(&stmt, "iii i iiiiii", diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-rpg/rpg/map-file.c --- a/libmlk-rpg/rpg/map-file.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-rpg/rpg/map-file.c Wed Sep 22 07:19:32 2021 +0200 @@ -293,6 +293,7 @@ return 0; fail: + errorf("%s: %s", path, strerror(errno)); map_finish(map); map_file_finish(file); zfile_close(&zf); diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-rpg/rpg/save.c --- a/libmlk-rpg/rpg/save.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-rpg/rpg/save.c Wed Sep 22 07:19:32 2021 +0200 @@ -187,7 +187,7 @@ if (sqlite3_open_v2(path, (sqlite3**)&db->handle, flags, NULL) != SQLITE_OK) goto sqlite3_err; - if (mode == SAVE_MODE_WRITE && execu(db, assets_init) < 0) + if (mode == SAVE_MODE_WRITE && execu(db, assets_sql_init) < 0) goto sqlite3_err; return verify(db); @@ -219,7 +219,7 @@ if (exec(db, SQL_BEGIN) < 0) return -1; - if (sqlite3_prepare(db->handle, (const char *)assets_property_set, -1, &stmt, NULL) != SQLITE_OK) + if (sqlite3_prepare(db->handle, (const char *)assets_sql_property_set, -1, &stmt, NULL) != SQLITE_OK) goto sqlite3_err; if (sqlite3_bind_text(stmt, 1, prop->key, -1, NULL) != SQLITE_OK || sqlite3_bind_text(stmt, 2, prop->value, -1, NULL) != SQLITE_OK) @@ -251,8 +251,8 @@ sqlite3_stmt *stmt = NULL; int ret = 0; - if (sqlite3_prepare(db->handle, (const char *)assets_property_get, - sizeof (assets_property_get), &stmt, NULL) != SQLITE_OK) + if (sqlite3_prepare(db->handle, (const char *)assets_sql_property_get, + sizeof (assets_sql_property_get), &stmt, NULL) != SQLITE_OK) goto sqlite3_err; if (sqlite3_bind_text(stmt, 1, prop->key, -1, NULL) != SQLITE_OK) goto sqlite3_err; @@ -295,8 +295,8 @@ if (exec(db, SQL_BEGIN) < 0) return -1; - if (sqlite3_prepare(db->handle, (const char *)assets_property_remove, - sizeof (assets_property_remove), &stmt, NULL) != SQLITE_OK) + if (sqlite3_prepare(db->handle, (const char *)assets_sql_property_remove, + sizeof (assets_sql_property_remove), &stmt, NULL) != SQLITE_OK) goto sqlite3_err; if (sqlite3_bind_text(stmt, 1, prop->key, -1, NULL) != SQLITE_OK) goto sqlite3_err; diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-ui/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-ui/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,66 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(libmlk-ui) + +set( + SOURCES + ${libmlk-ui_SOURCE_DIR}/ui/align.c + ${libmlk-ui_SOURCE_DIR}/ui/align.h + ${libmlk-ui_SOURCE_DIR}/ui/button.c + ${libmlk-ui_SOURCE_DIR}/ui/button.h + ${libmlk-ui_SOURCE_DIR}/ui/checkbox.c + ${libmlk-ui_SOURCE_DIR}/ui/checkbox.h + ${libmlk-ui_SOURCE_DIR}/ui/debug.c + ${libmlk-ui_SOURCE_DIR}/ui/debug.h + ${libmlk-ui_SOURCE_DIR}/ui/frame.c + ${libmlk-ui_SOURCE_DIR}/ui/frame.h + ${libmlk-ui_SOURCE_DIR}/ui/gridmenu.c + ${libmlk-ui_SOURCE_DIR}/ui/gridmenu.h + ${libmlk-ui_SOURCE_DIR}/ui/label.c + ${libmlk-ui_SOURCE_DIR}/ui/label.h + ${libmlk-ui_SOURCE_DIR}/ui/theme.c + ${libmlk-ui_SOURCE_DIR}/ui/theme.h + ${libmlk-ui_SOURCE_DIR}/ui/ui.c + ${libmlk-ui_SOURCE_DIR}/ui/ui.h + ${libmlk-ui_SOURCE_DIR}/ui/ui_p.h +) + +set( + ASSETS + ${libmlk-ui_SOURCE_DIR}/assets/fonts/opensans-light.ttf + ${libmlk-ui_SOURCE_DIR}/assets/fonts/opensans-regular.ttf +) + +set( + NLS + ${libmlk-ui_SOURCE_DIR}/nls/fr.po +) + +mlk_library( + NAME libmlk-ui + SOURCES ${SOURCES} ${ASSETS} ${NLS} + LANGS ${NLS} + ASSETS ${ASSETS} + LIBRARIES libmlk-core + INCLUDES + PRIVATE $ + PUBLIC $ +) + +source_group(TREE ${libmlk-ui_SOURCE_DIR} FILES ${SOURCES} ${ASSETS} ${NLS}) diff -r 4ea0f035f712 -r dbfe05b88627 libmlk-ui/ui/theme.c --- a/libmlk-ui/ui/theme.c Thu Sep 09 15:30:07 2021 +0200 +++ b/libmlk-ui/ui/theme.c Wed Sep 22 07:19:32 2021 +0200 @@ -65,8 +65,8 @@ struct font **dest; struct font font; } default_fonts[] = { - FONT(assets_opensans_light, 12, THEME_FONT_DEBUG), - FONT(assets_opensans_regular, 14, THEME_FONT_INTERFACE) + FONT(assets_fonts_opensans_light, 12, THEME_FONT_DEBUG), + FONT(assets_fonts_opensans_regular, 14, THEME_FONT_INTERFACE) }; int diff -r 4ea0f035f712 -r dbfe05b88627 mlk-adventure/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mlk-adventure/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,27 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(mlk-adventure) + +mlk_executable( + NAME mlk-adventure + SOURCES ${mlk-adventure_SOURCE_DIR}/main.c + LIBRARIES libmlk-adventure +) + +source_group("" FILES ${mlk-adventure_SOURCE_DIR}/main.c) diff -r 4ea0f035f712 -r dbfe05b88627 tests/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,44 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(tests) + +set( + TESTS + action + action-script + alloc + character + color + drawable + error + map + save + state + tileset + util +) + +foreach (t ${TESTS}) + add_executable(test-${t} ${tests_SOURCE_DIR}/test-${t}.c) + add_test(NAME test-${t} COMMAND test-${t}) + target_link_libraries(test-${t} libmlk-adventure libmlk-greatest) + target_compile_definitions(test-${t} PRIVATE DIRECTORY="${tests_SOURCE_DIR}/assets") + set_target_properties(test-${t} PROPERTIES FOLDER tests) + source_group("" FILES test-${t}.c) +endforeach () diff -r 4ea0f035f712 -r dbfe05b88627 tools/bcc/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/bcc/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,25 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(mlk-bcc) + +mlk_executable( + NAME mlk-bcc + SOURCES ${mlk-bcc_SOURCE_DIR}/main.c + FOLDER tools +) diff -r 4ea0f035f712 -r dbfe05b88627 tools/map/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/map/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,26 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(mlk-map) + +mlk_executable( + NAME mlk-map + SOURCES ${mlk-map_SOURCE_DIR}/main.c + LIBRARIES Jansson::Jansson + FOLDER tools +) diff -r 4ea0f035f712 -r dbfe05b88627 tools/tileset/CMakeLists.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/tileset/CMakeLists.txt Wed Sep 22 07:19:32 2021 +0200 @@ -0,0 +1,26 @@ +# +# CMakeLists.txt -- CMake build system for Molko's Adventure +# +# Copyright (c) 2020 David Demelier +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +project(mlk-tileset) + +mlk_executable( + NAME mlk-tileset + SOURCES ${mlk-tileset_SOURCE_DIR}/main.c + LIBRARIES Jansson::Jansson + FOLDER tools +)