Skip to content

Commit

Permalink
Merge pull request #341 from libretro/dev
Browse files Browse the repository at this point in the history
v0.29.1
  • Loading branch information
RobLoach authored Nov 5, 2018
2 parents 14e0a09 + 47a48a3 commit a85e03c
Show file tree
Hide file tree
Showing 19 changed files with 100 additions and 96 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ node_modules
/package.json
/.bsv
/*.mkv
*.d
5 changes: 0 additions & 5 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,6 @@
url = https://github.com/ChaiScript/ChaiScript.git
ignore = dirty
branch = develop
[submodule "vendor/filesystem"]
path = vendor/filesystem
url = https://github.com/wjakob/filesystem.git
ignore = dirty
branch = master
[submodule "vendor/SDL_tty"]
path = vendor/SDL_tty
url = https://github.com/Grumbel/SDL_tty.git
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ All notable changes to [ChaiLove](https://github.com/RobLoach/ChaiLove) will be
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).

## 0.29.1 - 2018-11-05
### Chores
- Moved String Methods to [ChaiScript_Extras](https://github.com/ChaiScript/ChaiScript_Extras)
- Replaced use of `filesystem/path.h` with internal functions
- Updated ChaiScript/ChaiScript_Extras
- Updated libretro/libretro-common
- Updated effolkronium/random

## 0.29.0 - 2018-10-13
### Fixes
- Fixed `/libretro/saves` mounting
Expand Down
6 changes: 2 additions & 4 deletions Makefile.common
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,6 @@ SOURCES_C := $(CORE_DIR)/vendor/semver/semver.c
# random
FLAGS += -I$(CORE_DIR)/vendor/random/include

# filesystem
FLAGS += -I$(CORE_DIR)/vendor/filesystem

# libretro-common
FLAGS += -I$(CORE_DIR)/vendor/libretro-common/include
# Only compile libretro-common when not STATIC_LINKING
Expand Down Expand Up @@ -49,7 +46,7 @@ ifneq ($(STATIC_LINKING), 1)
)
# Ensure the sinc_resampler_neon is available for ARM NEON devices.
OBJECTS += $(CORE_DIR)/vendor/libretro-common/audio/resampler/drivers/sinc_resampler_neon.o

# MD5
FLAGS += -I$(CORE_DIR)/vendor/libretro-common/include
SOURCES_C += $(CORE_DIR)/vendor/libretro-common/utils/md5.c
Expand Down Expand Up @@ -190,6 +187,7 @@ ifeq ($(HAVE_CHAISCRIPT),)
FLAGS += -I$(CORE_DIR)/vendor/ChaiScript_Extras/include
FLAGS += -D__HAVE_CHAISCRIPT__
FLAGS += -DCHAISCRIPT_NO_THREADS -DCHAISCRIPT_NO_THREADS_WARNING -DCHAISCRIPT_NO_DYNLOAD
FLAGS += -DCHAISCRIPT_EXTRAS_MATH_SKIP_ADVANCED
endif

# SDL
Expand Down
28 changes: 16 additions & 12 deletions Makefile.libretro
Original file line number Diff line number Diff line change
Expand Up @@ -277,19 +277,23 @@ else ifeq ($(platform), switch)

# Nintendo Switch (libnx)
else ifeq ($(platform), libnx)
include $(DEVKITPRO)/libnx/switch_rules
EXT=a
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL
CFLAGS := $(DEFINES) -g \
-O2 \
export DEPSDIR := $(CURDIR)/
include $(DEVKITPRO)/libnx/switch_rules
EXT=a
TARGET := $(TARGET_NAME)_libretro_$(platform).$(EXT)
DEFINES := -DSWITCH=1 -U__linux__ -U__linux -DRARCH_INTERNAL
CFLAGS := $(DEFINES) -g \
-O2 \
-fPIE -I$(LIBNX)/include/ -ffunction-sections -fdata-sections -ftls-model=local-exec -Wl,--allow-multiple-definition -specs=$(LIBNX)/switch.specs
CFLAGS += $(INCDIRS)
CFLAGS += $(INCLUDE) -D__SWITCH__ -DHAVE_LIBNX
CXXFLAGS := $(ASFLAGS) $(CFLAGS) -fno-rtti -fno-exceptions -std=gnu++11
CFLAGS += -std=gnu11
PLATFORM_DEFINES += -DARM -march=armv8-a -mtune=cortex-a57 -mtp=soft
STATIC_LINKING = 1
CFLAGS += $(INCDIRS)
CFLAGS += $(INCLUDE) -D__SWITCH__ -DHAVE_LIBNX
# Replaced -fno-rtti -fno-exceptions with -fexceptions, using C++14
CXXFLAGS := $(ASFLAGS) $(CFLAGS) -fexceptions -std=c++14
CFLAGS += -std=gnu11
PLATFORM_DEFINES += -DARM -march=armv8-a -mtune=cortex-a57 -mtp=soft
STATIC_LINKING = 1
#PLATFORM_DEFINES += -D_INCL_PHYSFS_PLATFORMS -DPHYSFS_PLATFORM_UNIX=1 -DPHYSFS_PLATFORM_POSIX=1
#PLATFORM_DEFINES += -Dpthread_t=Thread -Dpthread_mutex_t=Mutex -Dpthread_mutexattr_t='void*' -Dpthread_attr_t=int -Dpthread_cond_t=CondVar -Dpthread_condattr_t='int' -D_SYS__PTHREADTYPES_H_

# ARM
else ifneq (,$(findstring armv,$(platform)))
Expand Down
2 changes: 1 addition & 1 deletion docs/Doxyfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ PROJECT_NAME = "ChaiLove API"
# This could be handy for archiving the generated documentation or
# if some version control system is used.

PROJECT_NUMBER = "0.29.0"
PROJECT_NUMBER = "0.29.1"

# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
Expand Down
4 changes: 2 additions & 2 deletions src/ChaiLove.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@

#define CHAILOVE_VERSION_MAJOR 0
#define CHAILOVE_VERSION_MINOR 29
#define CHAILOVE_VERSION_PATCH 0
#define CHAILOVE_VERSION_STRING "0.29.0"
#define CHAILOVE_VERSION_PATCH 1
#define CHAILOVE_VERSION_STRING "0.29.1"

#include "SDL.h"
#include "libretro.h"
Expand Down
6 changes: 2 additions & 4 deletions src/love/Types/FileSystem/FileData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

#include <stdio.h>
#include <stdlib.h>
#include "filesystem/path.h"

#include "../../../ChaiLove.h"

Expand Down Expand Up @@ -38,9 +37,8 @@ std::string FileData::getString() {
}

std::string FileData::getExtension() {
::filesystem::path p(m_filepath.c_str());
std::string extension(p.extension());
return extension;
ChaiLove* app = ChaiLove::getInstance();
return app->filesystem.getFileExtension(m_filepath);
}

} // namespace FileSystem
Expand Down
1 change: 0 additions & 1 deletion src/love/audio.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
#include "Types/Audio/SoundData.h"
#include "../ChaiLove.h"
#include "sound.h"
#include "physfs.h"
#include "audio/conversion/float_to_s16.h"

using love::Types::Audio::SoundData;
Expand Down
41 changes: 34 additions & 7 deletions src/love/filesystem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
#include "physfs.h"
#include "filesystem.h"
#include "physfsrwops.h"
#include "filesystem/path.h"
#include "../ChaiLove.h"
#include "Types/FileSystem/FileInfo.h"

Expand All @@ -32,17 +31,15 @@ bool filesystem::init(const std::string& file, const void* data) {
}

// Find the parent and extension of the given file.
::filesystem::path p(file.c_str());
std::string extension(p.extension());
std::string extension(getFileExtension(file));

// Allow loading from an Archive.
if (extension == "chaigame" || extension == "chailove" || extension == "zip") {
return mount(file.c_str(), "/", false);
}

// If we are just running the core, load the base path.
::filesystem::path parent(p.parent_path());
std::string parentPath(parent.str());
std::string parentPath(getParentDirectory(file));
if (parentPath.empty()) {
return mount(".", "/", false);
}
Expand All @@ -51,6 +48,36 @@ bool filesystem::init(const std::string& file, const void* data) {
return mount(parentPath.c_str(), "/", false);
}

std::string filesystem::getParentDirectory(const std::string& filepath) {
size_t last = filepath.find_last_of("/\\");
if (last != std::string::npos) {
return filepath.substr(0, last);
}
return "";
}

std::string filesystem::getFileExtension(const std::string& filepath) {
size_t i = filepath.rfind('.', filepath.length());
if (i != std::string::npos) {
return filepath.substr(i + 1, filepath.length() - i);
}
return "";
}

std::string filesystem::getBasename(const std::string& filepath) {
char sep = '/';
if (filepath.find('\\') != std::string::npos) {
sep = '\\';
}

size_t i = filepath.rfind(sep, filepath.length());
if (i != std::string::npos) {
return filepath.substr(i + 1, filepath.length() - i);
}

return filepath;
}

void filesystem::mountlibretro() {
// Mount some of the libretro directories.
const char *system_dir = NULL;
Expand All @@ -60,8 +87,8 @@ void filesystem::mountlibretro() {

if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_LIBRETRO_PATH, &core_dir) && core_dir) {
// Make sure to get the directory of the core.
::filesystem::path p(core_dir);
mount(p.parent_path().str(), "/libretro/core", false);
std::string parentPath(getParentDirectory(core_dir));
mount(parentPath, "/libretro/core", false);
}
if (ChaiLove::environ_cb(RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY, &system_dir) && system_dir) {
mount(system_dir, "/libretro/system", false);
Expand Down
4 changes: 4 additions & 0 deletions src/love/filesystem.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,10 @@ class filesystem {
*/
int getSize(const std::string& file);

std::string getFileExtension(const std::string& filepath);
std::string getBasename(const std::string& filepath);
std::string getParentDirectory(const std::string& filepath);

/**
* Removes a file or empty directory.
*
Expand Down
67 changes: 13 additions & 54 deletions src/love/script.cpp
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
#include "script.h"
#include "../ChaiLove.h"
#include <filesystem/path.h>
#include <algorithm>

#ifdef __HAVE_CHAISCRIPT__
#include "chaiscript/extras/math.hpp"
#include "chaiscript/extras/string_methods.hpp"
using namespace chaiscript;
#endif

Expand Down Expand Up @@ -35,7 +35,7 @@ bool script::loadModule(const std::string& moduleName) {
// See if we are to append .chai.
filename = filename + ".chai";
if (!app->filesystem.exists(filename)) {
std::cout << "[ChaiLove] [script] Module " << moduleName << " not found." << std::endl;
std::cout << "[ChaiLove] [script] Module " << filename << " not found." << std::endl;
return false;
}
}
Expand All @@ -45,7 +45,7 @@ bool script::loadModule(const std::string& moduleName) {

// Make sure it was not empty.
if (contents.empty()) {
std::cout << "[ChaiLove] [script] Module " << moduleName << " was loaded, but empty." << std::endl;
std::cout << "[ChaiLove] [script] Module " << filename << " was loaded, but empty." << std::endl;
return false;
}

Expand Down Expand Up @@ -85,60 +85,16 @@ std::string script::evalString(const std::string& code, const std::string& filen

script::script(const std::string& file) {
#ifdef __HAVE_CHAISCRIPT__
ChaiLove* app = ChaiLove::getInstance();

// ChaiScript Standard Library Additions
// This adds some basic type definitions to ChaiScript.
chai.add(bootstrap::standard_library::vector_type<std::vector<int>>("VectorInt"));
chai.add(bootstrap::standard_library::vector_type<std::vector<std::string>>("StringVector"));
chai.add(bootstrap::standard_library::map_type<std::map<std::string, bool>>("StringBoolMap"));

// Global Helpers
// string::replace(std::string search, std::string replace)
chai.add(fun([](const std::string& subject, const std::string& search, const std::string& replace) {
std::string newSubject(subject);
size_t pos = 0;
while ((pos = newSubject.find(search, pos)) != std::string::npos) {
newSubject.replace(pos, search.length(), replace);
pos += replace.length();
}
return newSubject;
}), "replace");

// string::replace(char search, char replace)
chai.add(fun([](const std::string& subject, char search, char replace) {
std::string newSubject(subject);
std::replace(newSubject.begin(), newSubject.end(), search, replace);
return newSubject;
}), "replace");

// string::trim()
chai.add(fun([](const std::string& subject) {
std::string result(subject);
std::string chars = "\t\n\v\f\r ";
result.erase(0, result.find_first_not_of(chars));
result.erase(0, result.find_last_not_of(chars));
return result;
}), "trim");

// string::split()
chai.add(fun([](const std::string& subject, const std::string& token) {
std::string str(subject);
std::vector<std::string> result;
while (str.size()) {
int index = str.find(token);
if (index != std::string::npos) {
result.push_back(str.substr(0, index));
str = str.substr(index + token.size());
if (str.size() == 0) {
result.push_back(str);
}
} else {
result.push_back(str);
str = "";
}
}
return result;
}), "split");
auto stringmethods = chaiscript::extras::string_methods::bootstrap();
chai.add(stringmethods);

// List
auto listModule = std::make_shared<chaiscript::Module>();
Expand Down Expand Up @@ -355,6 +311,9 @@ script::script(const std::string& file) {
chai.add(fun<std::vector<std::string>, filesystem, const std::string&, const std::string&>(&filesystem::lines), "lines");
chai.add(fun(&filesystem::load), "load");
chai.add(fun(&script::loadModuleRequire, this), "require");
chai.add(fun(&filesystem::getFileExtension), "getFileExtension");
chai.add(fun(&filesystem::getBasename), "getBasename");
chai.add(fun(&filesystem::getParentDirectory), "getParentDirectory");

// System
chai.add(fun(&system::getOS), "getOS");
Expand Down Expand Up @@ -432,18 +391,18 @@ script::script(const std::string& file) {
// Load the desired main.chai file.
if (file.empty()) {
// When no content is provided, display a No Game demo.
eval(ChaiLove::getInstance()->demo(), "demo.chai");
eval(app->demo(), "demo.chai");
mainLoaded = true;
} else {
// Load the main.chai file.
::filesystem::path p(file.c_str());
std::string extension(p.extension());
loadModuleRequire("conf");

std::string extension(app->filesystem.getFileExtension(file));
if (extension == "chailove" || extension == "chaigame") {
mainLoaded = loadModuleRequire("main");
} else {
// Otherwise, load the actual file.
std::string filename(p.filename());
std::string filename(app->filesystem.getBasename(file));
mainLoaded = loadModuleRequire(filename);
}
}
Expand Down
12 changes: 12 additions & 0 deletions test/unittests/filesystem.chai
Original file line number Diff line number Diff line change
Expand Up @@ -102,3 +102,15 @@ requiretestFileLoaded = false
requireReturn = require("assets.requiretest")
assert(requireReturn, " double call")
assert_not(requiretestFileLoaded, " not loaded twice")

// getFileExtension()
assert_equal(love.filesystem.getFileExtension("/opt/var/something.txt"), "txt", "love.filesystem.getFileExtension()")
assert_equal(love.filesystem.getFileExtension("/opt/var/something.tar.gz"), "gz", "love.filesystem.getFileExtension()")

// getBasename
assert_equal(love.filesystem.getBasename("/opt/var/something.txt"), "something.txt", "love.filesystem.getBasename()")
assert_equal(love.filesystem.getBasename("something.txt"), "something.txt", "love.filesystem.getBasename()")

// getParentDirectory
assert_equal(love.filesystem.getParentDirectory("/opt/var/something.txt"), "/opt/var", "love.filesystem.getParentDirectory()")
assert_equal(love.filesystem.getParentDirectory("something.txt"), "", "love.filesystem.getParentDirectory()")
2 changes: 1 addition & 1 deletion vendor/cppcodec
2 changes: 1 addition & 1 deletion vendor/didstopia-physfs
1 change: 0 additions & 1 deletion vendor/filesystem
Submodule filesystem deleted from 0a539a
2 changes: 1 addition & 1 deletion vendor/random

0 comments on commit a85e03c

Please sign in to comment.