Skip to content

Commit

Permalink
closer
Browse files Browse the repository at this point in the history
  • Loading branch information
jcbhmr committed Aug 4, 2024
1 parent 8ecdf82 commit 3c0cfc8
Show file tree
Hide file tree
Showing 38 changed files with 617 additions and 270 deletions.
File renamed without changes.
Empty file.
25 changes: 13 additions & 12 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,30 @@ project(platformdirs
VERSION 4.2.2
LANGUAGES CXX
)
set(project_definitions PROJECT_NAME="${PROJECT_NAME}" PROJECT_VERSION="${PROJECT_VERSION}" PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} PROJECT_VERSION_TWEAK=${PROJECT_VERSION_TWEAK})

include(CTest)
include(FetchContent)

FetchContent_Declare(fmt
GIT_REPOSITORY https://github.com/fmtlib/fmt.git
GIT_TAG 11.0.2
CMAKE_CACHE_ARGS -DFMT_OS=OFF -DFMT_UNICODE=OFF
)

# FMT_OS doesn't work with cosmocc
set(FMT_OS OFF)
FetchContent_MakeAvailable(fmt)

add_library(platformdirs)
target_sources(platformdirs PRIVATE src/api.cpp src/cosmopolitan.cpp src/lib.cpp src/utils.cpp src/version.cpp)
target_sources(platformdirs PRIVATE src/platformdirs/api.cpp src/platformdirs/unix.cpp src/platformdirs/version.cpp)
target_include_directories(platformdirs PUBLIC include)
target_compile_features(platformdirs PRIVATE cxx_std_23)
target_compile_options(platformdirs PRIVATE -fexceptions)
target_link_libraries(platformdirs PRIVATE fmt::fmt)
target_compile_definitions(platformdirs PRIVATE PROJECT_NAME="${PROJECT_NAME}" PROJECT_VERSION="${PROJECT_VERSION}" PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} PROJECT_VERSION_TWEAK=${PROJECT_VERSION_TWEAK})
target_compile_definitions(platformdirs PRIVATE ${project_definitions})

# add_executable(platformdirs_exe)
# set_property(TARGET platformdirs_exe PROPERTY OUTPUT_NAME platformdirs)
# target_sources(platformdirs_exe PRIVATE src/main.cpp)
# target_compile_features(platformdirs_exe PRIVATE cxx_std_23)
# target_compile_options(platformdirs_exe PRIVATE -fexceptions)
# target_link_libraries(platformdirs_exe PRIVATE fmt::fmt platformdirs)
# target_compile_definitions(platformdirs_exe PRIVATE PROJECT_NAME="${PROJECT_NAME}" PROJECT_VERSION="${PROJECT_VERSION}" PROJECT_VERSION_MAJOR=${PROJECT_VERSION_MAJOR} PROJECT_VERSION_MINOR=${PROJECT_VERSION_MINOR} PROJECT_VERSION_PATCH=${PROJECT_VERSION_PATCH} PROJECT_VERSION_TWEAK=${PROJECT_VERSION_TWEAK})
add_executable(platformdirs_exe)
set_property(TARGET platformdirs_exe PROPERTY OUTPUT_NAME platformdirs)
target_sources(platformdirs_exe PRIVATE src/platformdirs_exe.cpp)
target_compile_features(platformdirs_exe PRIVATE cxx_std_23)
target_compile_options(platformdirs_exe PRIVATE -fexceptions)
target_link_libraries(platformdirs_exe PRIVATE fmt::fmt platformdirs)
target_compile_definitions(platformdirs_exe PRIVATE ${project_definitions})
48 changes: 48 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,59 @@
"BUILD_TESTING": false
}
},
{
"name": "clang",
"inherits": ["default"],
"toolchainFile": "cmake/clang.cmake",
"binaryDir": "build/clang"
},
{
"name": "cosmocc",
"inherits": ["default"],
"toolchainFile": "cmake/cosmocc.cmake",
"binaryDir": "build/cosmocc"
},
{
"name": "gcc",
"inherits": ["default"],
"toolchainFile": "cmake/gcc.cmake",
"binaryDir": "build/gcc"
},
{
"name": "zig-cc-target-arm64-linux-musl",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-arm64-linux-musl.cmake",
"binaryDir": "build/zig-cc-target-arm64-linux-musl"
},
{
"name": "zig-cc-target-arm64-macos-none",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-arm64-macos-none.cmake",
"binaryDir": "build/zig-cc-target-arm64-macos-none"
},
{
"name": "zig-cc-target-wasm32-wasi-musl",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-wasm32-wasi-musl.cmake",
"binaryDir": "build/zig-cc-target-wasm32-wasi-musl"
},
{
"name": "zig-cc-target-x86_64-linux-musl",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-x86_64-linux-musl.cmake",
"binaryDir": "build/zig-cc-target-x86_64-linux-musl"
},
{
"name": "zig-cc-target-x86_64-macos-none",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-x86_64-macos-none.cmake",
"binaryDir": "build/zig-cc-target-x86_64-macos-none"
},
{
"name": "zig-cc-target-x86_64-windows-gnu",
"inherits": ["default"],
"toolchainFile": "cmake/zig-cc-target-x86_64-windows-gnu.cmake",
"binaryDir": "build/zig-cc-target-x86_64-windows-gnu"
}
],
"buildPresets": [
Expand Down
5 changes: 5 additions & 0 deletions cmake/clang.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set(CMAKE_ASM_COMPILER clang)
set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)
set(CMAKE_AR llvm-ar)
set(CMAKE_RANLIB llvm-ranlib)
5 changes: 5 additions & 0 deletions cmake/gcc.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set(CMAKE_ASM_COMPILER gcc)
set(CMAKE_C_COMPILER gcc)
set(CMAKE_CXX_COMPILER g++)
set(CMAKE_AR gcc-ar)
set(CMAKE_RANLIB gcc-ranlib)
1 change: 1 addition & 0 deletions cmake/zig-ar
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exec zig ar "$@"
1 change: 1 addition & 0 deletions cmake/zig-ar.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@zig ar %*
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-arm64-linux-musl.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target arm64-linux-musl)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-arm64-macos-none.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR arm64)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target arm64-macos-none)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-wasm32-wasi-musl.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME WASI)
set(CMAKE_SYSTEM_PROCESSOR wasm32)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target wasm32-wasi-musl)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-x86_64-linux-musl.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target x86_64-linux-musl)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-x86_64-macos-none.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME Darwin)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target x86_64-macos-none)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
12 changes: 12 additions & 0 deletions cmake/zig-cc-target-x86_64-windows-gnu.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# https://jcbhmr.me/blog/zig-cc-cmake
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_SYSTEM_PROCESSOR x86_64)
set(CMAKE_ASM_COMPILER zig cc)
set(CMAKE_C_COMPILER zig cc)
set(CMAKE_CXX_COMPILER zig c++)
set(target x86_64-windows-gnu)
set(CMAKE_ASM_COMPILER_TARGET "${target}")
set(CMAKE_C_COMPILER_TARGET "${target}")
set(CMAKE_CXX_COMPILER_TARGET "${target}")
set(CMAKE_AR "${CMAKE_CURRENT_SOURCE_DIR}/zig-ar")
set(CMAKE_RANLIB "${CMAKE_CURRENT_SOURCE_DIR}/zig-ranlib")
1 change: 1 addition & 0 deletions cmake/zig-ranlib
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
exec zig ranlib "$@"
1 change: 1 addition & 0 deletions cmake/zig-ranlib.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@zig ranlib %*
1 change: 1 addition & 0 deletions include/platformdirs.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#pragma once
#undef unix
#include <filesystem>
#include <string>
#include <string_view>
Expand Down
85 changes: 50 additions & 35 deletions include/platformdirs/api.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
#pragma once
#include <filesystem>
#include <string>
#include <string_view>
#include <variant>
#include <optional>
#include <vector>

namespace platformdirs {
namespace api {
Expand All @@ -16,73 +18,86 @@ bool multipath;
bool opinion;
bool ensure_exists;

platform_dirs_abc(const std::optional<std::string>& appname = std::nullopt, const std::variant<std::string, std::nullopt_t, bool>& appauthor = std::nullopt, const std::optional<std::string>& version = std::nullopt, bool roaming = false, bool multipath = false, bool opinion = true, bool ensure_exists = false);
platform_dirs_abc();
platform_dirs_abc(const std::optional<std::string>& appname);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor, const std::optional<std::string>& version);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor, const std::optional<std::string>& version, bool roaming);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor, const std::optional<std::string>& version, bool roaming, bool multipath);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor, const std::optional<std::string>& version, bool roaming, bool multipath, bool opinion);
platform_dirs_abc(const std::optional<std::string>& appname, const std::variant<std::string, std::nullopt_t, bool>& appauthor, const std::optional<std::string>& version, bool roaming, bool multipath, bool opinion, bool ensure_exists);

virtual std::string user_data_dir() const;
protected:
auto append_app_name_and_version(const std::vector<std::string>& base) const -> std::string;
auto optionally_create_directory(const std::string& path) const -> void;

virtual std::string site_data_dir() const;
public:

virtual std::string user_data_dir() const = 0;

virtual std::string site_data_dir() const = 0;

virtual std::string user_config_dir() const;
// virtual std::string user_config_dir() const = 0;

virtual std::string site_config_dir() const;
// virtual std::string site_config_dir() const = 0;

virtual std::string user_cache_dir() const;
// virtual std::string user_cache_dir() const = 0;

virtual std::string site_cache_dir() const;
// virtual std::string site_cache_dir() const = 0;

virtual std::string user_state_dir() const;
// virtual std::string user_state_dir() const = 0;

virtual std::string user_log_dir() const;
// virtual std::string user_log_dir() const = 0;

virtual std::string user_documents_dir() const;
// virtual std::string user_documents_dir() const = 0;

virtual std::string user_downloads_dir() const;
// virtual std::string user_downloads_dir() const = 0;

virtual std::string user_pictures_dir() const;
// virtual std::string user_pictures_dir() const = 0;

virtual std::string user_videos_dir() const;
// virtual std::string user_videos_dir() const = 0;

virtual std::string user_music_dir() const;
// virtual std::string user_music_dir() const = 0;

virtual std::string user_desktop_dir() const;
// virtual std::string user_desktop_dir() const = 0;

virtual std::string user_runtime_dir() const;
// virtual std::string user_runtime_dir() const = 0;

virtual std::string site_runtime_dir() const;
// virtual std::string site_runtime_dir() const = 0;

std::filesystem::path user_data_path() const;
virtual std::filesystem::path user_data_path() const;

std::filesystem::path site_data_path() const;
virtual std::filesystem::path site_data_path() const;

std::filesystem::path user_config_path() const;
// virtual std::filesystem::path user_config_path() const;

std::filesystem::path site_config_path() const;
// virtual std::filesystem::path site_config_path() const;

std::filesystem::path user_cache_path() const;
// virtual std::filesystem::path user_cache_path() const;

std::filesystem::path site_cache_path() const;
// virtual std::filesystem::path site_cache_path() const;

std::filesystem::path user_state_path() const;
// virtual std::filesystem::path user_state_path() const;

std::filesystem::path user_log_path() const;
// virtual std::filesystem::path user_log_path() const;

std::filesystem::path user_documents_path() const;
// virtual std::filesystem::path user_documents_path() const;

std::filesystem::path user_downloads_path() const;
// virtual std::filesystem::path user_downloads_path() const;

std::filesystem::path user_pictures_path() const;
// virtual std::filesystem::path user_pictures_path() const;

std::filesystem::path user_videos_path() const;
// virtual std::filesystem::path user_videos_path() const;

std::filesystem::path user_music_path() const;
// virtual std::filesystem::path user_music_path() const;

std::filesystem::path user_desktop_path() const;
// virtual std::filesystem::path user_desktop_path() const;

std::filesystem::path user_runtime_path() const;
// virtual std::filesystem::path user_runtime_path() const;

std::filesystem::path site_runtime_path() const;
// virtual std::filesystem::path site_runtime_path() const;

}
};

} // namespace api
} // namespace platformdirs
17 changes: 17 additions & 0 deletions include/platformdirs/cosmopolitan.h
Original file line number Diff line number Diff line change
@@ -1 +1,18 @@
#pragma once
#include <string>
#include <filesystem>
#include <optional>
#include <variant>
#include "api.h"

namespace platformdirs {
namespace cosmopolitan {

class cosmopolitan : public platformdirs::api::platform_dirs_abc {



}

} // namespace cosmopolitan
} // namespace platformdirs
Loading

0 comments on commit 3c0cfc8

Please sign in to comment.