meta: add build system and stub tool source code

This commit is contained in:
2025-07-07 13:56:20 +01:00
parent 2bc7a0d900
commit ba40290eea
27 changed files with 990 additions and 0 deletions

14
CMakeLists.txt Normal file
View File

@@ -0,0 +1,14 @@
cmake_minimum_required(VERSION 3.15)
project(ropkg C)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/bin)
find_package(Bluelib COMPONENTS Core Object Io Term Cmd REQUIRED)
add_subdirectory(ropkg)
add_subdirectory(ropam)
add_subdirectory(rovem)

181
cmake/FindBluelib.cmake Normal file
View File

@@ -0,0 +1,181 @@
#[=======================================================================[.rst:
FindBluelib
------------
Find the Bluelib library and header directories
Imported Targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` target:
``Bluelib::Bluelib``
The Bluelib library, if found
Result Variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``Bluelib_FOUND``
true if the Bluelib C headers and libraries were found
``Bluelib_INCLUDE_DIR``
directories containing the Bluelib C headers.
``Bluelib_LIBRARY``
the C library to link against
Hints
^^^^^
The user may set the environment variable ``Bluelib_PREFIX`` to the root
directory of a Bluelib library installation.
#]=======================================================================]
set (Bluelib_SEARCH_PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local
/usr/local/share
/usr
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
${Bluelib_PREFIX}
$ENV{Bluelib_PREFIX})
if (Bluelib_STATIC)
set(_lib_suffix "-s")
endif ()
set(supported_components Core Object Term Cmd Io Serial)
set(components ${Bluelib_FIND_COMPONENTS})
string(REPLACE ";" ", " supported_components_string_list "${supported_components}")
if (NOT components)
set(components ${supported_components})
endif ()
set(required_vars)
foreach (component ${components})
if (NOT "${component}" IN_LIST supported_components)
message(FATAL_ERROR "'${component}' is not a valid Bluelib module.\nSupported modules: ${supported_components_string_list}")
endif ()
string(TOLOWER ${component} header_name)
set(lib_name ${header_name}${_lib_suffix})
if (NOT Bluelib_${component}_INCLUDE_DIR)
find_path(Bluelib_${component}_INCLUDE_DIR
NAMES blue/${header_name}.h ${Bluelib_FIND_ARGS}
PATH_SUFFIXES include
PATHS ${Bluelib_SEARCH_PATHS})
endif ()
if (NOT Bluelib_${component}_LIBRARY)
find_library(Bluelib_${component}_LIBRARY
NAMES blue-${lib_name} ${Bluelib_FIND_ARGS}
PATH_SUFFIXES lib
PATHS ${Bluelib_SEARCH_PATHS})
else ()
# on Windows, ensure paths are in canonical format (forward slahes):
file(TO_CMAKE_PATH "${Bluelib_${component}_LIBRARY}" Bluelib_${component}_LIBRARY)
endif()
list(APPEND required_vars Bluelib_${component}_INCLUDE_DIR Bluelib_${component}_LIBRARY)
endforeach (component)
unset(Bluelib_FIND_ARGS)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Bluelib
REQUIRED_VARS ${required_vars})
if (Bluelib_FOUND)
set(created_targets)
foreach (component ${components})
string(TOLOWER ${component} header_name)
set(lib_name ${header_name}${_lib_suffix})
if(NOT TARGET Bluelib::${component})
add_library(Bluelib::${component} UNKNOWN IMPORTED)
set_target_properties(Bluelib::${component} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${Bluelib_${component}_INCLUDE_DIR}")
target_compile_definitions(Bluelib::${component} INTERFACE _CRT_SECURE_NO_WARNINGS=1)
if (Bluelib_STATIC)
target_compile_definitions(Bluelib::${component} INTERFACE BLUELIB_STATIC=1)
endif ()
set_target_properties(Bluelib::${component} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${Bluelib_${component}_LIBRARY}")
set(created_targets ${created_targets} ${component})
endif ()
endforeach (component)
foreach (component ${created_targets})
if ("${component}" STREQUAL "Object")
if (NOT TARGET Bluelib::Core)
message(FATAL_ERROR "Bluelib: Module 'Object' depends on 'Core', which was not specified in find_package()")
endif ()
target_link_libraries(Bluelib::Object INTERFACE Bluelib::Core)
endif ()
if ("${component}" STREQUAL "Term")
if (NOT TARGET Bluelib::Core)
message(FATAL_ERROR "Bluelib: Module 'Term' depends on 'Core', which was not specified in find_package()")
endif ()
if (NOT TARGET Bluelib::Object)
message(FATAL_ERROR "Bluelib: Module 'Term' depends on 'Object', which was not specified in find_package()")
endif ()
target_link_libraries(Bluelib::Term INTERFACE Bluelib::Core Bluelib::Object)
endif ()
if ("${component}" STREQUAL "Serial")
if (NOT TARGET Bluelib::Core)
message(FATAL_ERROR "Bluelib: Module 'Serial' depends on 'Core', which was not specified in find_package()")
endif ()
if (NOT TARGET Bluelib::Object)
message(FATAL_ERROR "Bluelib: Module 'Serial' depends on 'Object', which was not specified in find_package()")
endif ()
target_link_libraries(Bluelib::Serial INTERFACE Bluelib::Core Bluelib::Object)
endif ()
if ("${component}" STREQUAL "Cmd")
if (NOT TARGET Bluelib::Core)
message(FATAL_ERROR "Bluelib: Module 'Cmd' depends on 'Core', which was not specified in find_package()")
endif ()
if (NOT TARGET Bluelib::Object)
message(FATAL_ERROR "Bluelib: Module 'Cmd' depends on 'Object', which was not specified in find_package()")
endif ()
if (NOT TARGET Bluelib::Term)
message(FATAL_ERROR "Bluelib: Module 'Cmd' depends on 'Term', which was not specified in find_package()")
endif ()
target_link_libraries(Bluelib::Cmd INTERFACE Bluelib::Core Bluelib::Object Bluelib::Term)
endif ()
if ("${component}" STREQUAL "Io")
if (NOT TARGET Bluelib::Core)
message(FATAL_ERROR "Bluelib: Module 'Io' depends on 'Core', which was not specified in find_package()")
endif ()
if (NOT TARGET Bluelib::Object)
message(FATAL_ERROR "Bluelib: Module 'Io' depends on 'Object', which was not specified in find_package()")
endif ()
target_link_libraries(Bluelib::Io INTERFACE Bluelib::Core Bluelib::Object)
endif ()
endforeach (component)
endif()

4
ropam/CMakeLists.txt Normal file
View File

@@ -0,0 +1,4 @@
file(GLOB_RECURSE sources *.c *.h)
add_executable(ropam ${sources})
target_link_libraries(ropam Bluelib::Core Bluelib::Object Bluelib::Io Bluelib::Term Bluelib::Cmd)

40
ropam/commands.h Normal file
View File

@@ -0,0 +1,40 @@
#ifndef COMMANDS_H_
#define COMMANDS_H_
enum {
CMD_ROOT,
CMD_SYNC,
CMD_REMOVE,
CMD_QUERY,
CMD_VENDOR,
CMD_VENDOR_ADD,
CMD_VENDOR_REMOVE,
CMD_VENDOR_LIST,
};
enum {
OPT_SYSROOT = 0x1000,
OPT_SYSROOT_PATH,
};
#define SYSROOT_OPTION \
B_COMMAND_OPTION(OPT_SYSROOT) \
{ \
B_OPTION_SHORT_NAME('s'); \
B_OPTION_LONG_NAME("sysroot"); \
B_OPTION_DESC( \
"the system directory to use. if no " \
"sysroot is specified, the root directory is used. " \
"alternatively, the ROSETTA_SYSROOT environment " \
"variable can be used to specify the system root " \
"directory"); \
\
B_OPTION_ARG(OPT_SYSROOT_PATH) \
{ \
B_ARG_NAME("path"); \
B_ARG_NR_VALUES(1); \
} \
}
#endif

32
ropam/main.c Normal file
View File

@@ -0,0 +1,32 @@
#include "commands.h"
#include <blue/cmd.h>
B_COMMAND(CMD_ROOT, B_COMMAND_INVALID_ID)
{
B_COMMAND_NAME("ropam");
B_COMMAND_DESC(
"Rosetta package manager. This tool is used to (un)install, "
"upgrade, and otherwise manage packages on a system via a set "
"of package vendors.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_HELP_OPTION();
SYSROOT_OPTION;
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_COMMAND_PLACEHOLDER();
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_SYSROOT);
B_COMMAND_USAGE_COMMAND_PLACEHOLDER();
}
}
int main(int argc, const char **argv)
{
return b_command_dispatch(CMD_ROOT, argc, argv);
}

22
ropam/query.c Normal file
View File

@@ -0,0 +1,22 @@
#include "commands.h"
#include <blue/cmd.h>
static int query(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_QUERY, CMD_ROOT)
{
B_COMMAND_NAME("query");
B_COMMAND_SHORT_NAME('Q');
B_COMMAND_DESC("query information about installed packages.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(query);
B_COMMAND_HELP_OPTION();
}

42
ropam/remove.c Normal file
View File

@@ -0,0 +1,42 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
ARG_PACKAGE,
};
static int remove(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_REMOVE, CMD_ROOT)
{
B_COMMAND_NAME("remove");
B_COMMAND_SHORT_NAME('R');
B_COMMAND_DESC(
"remove a set of Rosetta packages by name. any "
"automatically installed dependencies will not be removed "
"unless they are explicitly named in the list of packages to "
"remove.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(remove);
B_COMMAND_HELP_OPTION();
B_COMMAND_ARG(ARG_PACKAGE)
{
B_ARG_NAME("package-name");
B_ARG_DESC("the names of the packages to remove.");
B_ARG_NR_VALUES(B_ARG_1_OR_MORE_VALUES);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_ARG(ARG_PACKAGE);
}
}

72
ropam/sync.c Normal file
View File

@@ -0,0 +1,72 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_SYNC_DB,
OPT_SYNC_ALL,
ARG_PACKAGE,
};
static int sync(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_SYNC, CMD_ROOT)
{
B_COMMAND_NAME("sync");
B_COMMAND_SHORT_NAME('S');
B_COMMAND_DESC(
"synchronise your machine with the your registered package "
"vendor(s). this command can be used to synchronise packages, "
"installing them or updating them to the latest available "
"version. all installed packages can be synchronised to update "
"the whole system, or the package database itself can be "
"synchronised to gain access to new and updated packages.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(sync);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_SYNC_DB)
{
B_OPTION_SHORT_NAME('y');
B_OPTION_LONG_NAME("database");
B_OPTION_DESC(
"synchronise the package database before synchronising "
"any packages. this option can be specified without "
"any package names to synchronise the package database "
"on its own.");
}
B_COMMAND_OPTION(OPT_SYNC_ALL)
{
B_OPTION_SHORT_NAME('u');
B_OPTION_LONG_NAME("synchronise-all");
B_OPTION_DESC(
"synchronise all packages currently installed on the "
"system, updating them to the latest available "
"version.");
}
B_COMMAND_ARG(ARG_PACKAGE)
{
B_ARG_NAME("package-name");
B_ARG_DESC(
"the names of the packages to synchronise. if a named "
"package is not installed, the latest version will be "
"installed. otherwise, the already-installed package "
"will be updated to the latest version.");
B_ARG_NR_VALUES(B_ARG_1_OR_MORE_VALUES);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_ARG(ARG_PACKAGE);
}
}

22
ropam/vendor/add.c vendored Normal file
View File

@@ -0,0 +1,22 @@
#include "../commands.h"
#include <blue/cmd.h>
static int vendor_add(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_VENDOR_ADD, CMD_VENDOR)
{
B_COMMAND_NAME("add");
B_COMMAND_SHORT_NAME('A');
B_COMMAND_DESC("add a new package vendor to the system.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(vendor_add);
B_COMMAND_HELP_OPTION();
}

22
ropam/vendor/list.c vendored Normal file
View File

@@ -0,0 +1,22 @@
#include "../commands.h"
#include <blue/cmd.h>
static int vendor_list(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_VENDOR_LIST, CMD_VENDOR)
{
B_COMMAND_NAME("list");
B_COMMAND_SHORT_NAME('L');
B_COMMAND_DESC("list all registered package vendors.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(vendor_list);
B_COMMAND_HELP_OPTION();
}

22
ropam/vendor/remove.c vendored Normal file
View File

@@ -0,0 +1,22 @@
#include "../commands.h"
#include <blue/cmd.h>
static int vendor_remove(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_VENDOR_REMOVE, CMD_VENDOR)
{
B_COMMAND_NAME("remove");
B_COMMAND_SHORT_NAME('R');
B_COMMAND_DESC("remove a package vendor from the system.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(vendor_remove);
B_COMMAND_HELP_OPTION();
}

13
ropam/vendor/vendor.c vendored Normal file
View File

@@ -0,0 +1,13 @@
#include "../commands.h"
#include <blue/cmd.h>
B_COMMAND(CMD_VENDOR, CMD_ROOT)
{
B_COMMAND_NAME("vendor");
B_COMMAND_SHORT_NAME('V');
B_COMMAND_DESC("package vendor management commands.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_HELP_OPTION();
}

4
ropkg/CMakeLists.txt Normal file
View File

@@ -0,0 +1,4 @@
file(GLOB sources *.c *.h)
add_executable(ropkg ${sources})
target_link_libraries(ropkg Bluelib::Core Bluelib::Object Bluelib::Io Bluelib::Term Bluelib::Cmd)

55
ropkg/build.c Normal file
View File

@@ -0,0 +1,55 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_OUTPATH,
OPT_OUTPATH_PATH,
ARG_RECIPE,
};
static int build(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_BUILD, CMD_ROOT)
{
B_COMMAND_NAME("build");
B_COMMAND_SHORT_NAME('B');
B_COMMAND_DESC("build a Rosetta package from a recipe");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(build);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_OUTPATH)
{
B_OPTION_SHORT_NAME('o');
B_OPTION_LONG_NAME("out");
B_OPTION_DESC("the path to save the new package file to");
B_OPTION_ARG(OPT_OUTPATH_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_ARG(ARG_RECIPE)
{
B_ARG_NAME("recipe");
B_ARG_DESC("the recipe to build the package from.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_RECIPE);
}
}

13
ropkg/commands.h Normal file
View File

@@ -0,0 +1,13 @@
#ifndef COMMANDS_H_
#define COMMANDS_H_
enum {
CMD_ROOT,
CMD_CREATE,
CMD_BUILD,
CMD_QUERY,
CMD_EXTRACT,
CMD_INSTALL,
};
#endif

226
ropkg/create.c Normal file
View File

@@ -0,0 +1,226 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_OUTPATH,
OPT_OUTPATH_PATH,
OPT_MANIFEST,
OPT_MANIFEST_PATH,
OPT_PARAMETER,
OPT_PARAMETER_NAME,
OPT_PARAMETER_VALUE,
ARG_SOURCE_DIR,
};
static int create(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_CREATE, CMD_ROOT)
{
B_COMMAND_NAME("create");
B_COMMAND_SHORT_NAME('C');
B_COMMAND_DESC("create a Rosetta package from a directory");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(create);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_OUTPATH)
{
B_OPTION_SHORT_NAME('o');
B_OPTION_LONG_NAME("out");
B_OPTION_DESC("the path to save the new package file to");
B_OPTION_ARG(OPT_OUTPATH_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_OPTION(OPT_MANIFEST)
{
B_OPTION_SHORT_NAME('m');
B_OPTION_LONG_NAME("manifest");
B_OPTION_DESC(
"the path to a manifest file describing the "
"package to be created. if no manifest is specified, "
"the package binary directory will be searched for a "
"manifest");
B_OPTION_ARG(OPT_MANIFEST_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_OPTION(OPT_PARAMETER)
{
B_OPTION_SHORT_NAME('p');
B_OPTION_LONG_NAME("parameter");
B_OPTION_DESC(
"a parameter to use when creating the new file. "
"if a parameter EXAMPLE is defined, any variable "
"reference "
"of the form ${EXAMPLE} in the package manifest will "
"be "
"replaced with the specified parameter value.");
B_OPTION_ARG(OPT_PARAMETER_NAME)
{
B_ARG_NAME("name");
B_ARG_NR_VALUES(1);
}
B_OPTION_ARG(OPT_PARAMETER_VALUE)
{
B_ARG_NAME("value");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_ARG(ARG_SOURCE_DIR)
{
B_ARG_NAME("source-dir");
B_ARG_DESC(
"the directory to package. the specified directory "
"will become the root of the newly created package.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_SOURCE_DIR);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_MANIFEST);
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_SOURCE_DIR);
}
}
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_OUTPATH,
OPT_OUTPATH_PATH,
OPT_MANIFEST,
OPT_MANIFEST_PATH,
OPT_PARAMETER,
OPT_PARAMETER_NAME,
OPT_PARAMETER_VALUE,
ARG_SOURCE_DIR,
};
static int create(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_CREATE, CMD_ROOT)
{
B_COMMAND_NAME("create");
B_COMMAND_SHORT_NAME('C');
B_COMMAND_DESC("create a Rosetta package from a directory");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(create);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_OUTPATH)
{
B_OPTION_SHORT_NAME('o');
B_OPTION_LONG_NAME("out");
B_OPTION_DESC("the path to save the new package file to");
B_OPTION_ARG(OPT_OUTPATH_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_OPTION(OPT_MANIFEST)
{
B_OPTION_SHORT_NAME('m');
B_OPTION_LONG_NAME("manifest");
B_OPTION_DESC(
"the path to a manifest file describing the "
"package to be created. if no manifest is specified, "
"the package binary directory will be searched for a "
"manifest");
B_OPTION_ARG(OPT_MANIFEST_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_OPTION(OPT_PARAMETER)
{
B_OPTION_SHORT_NAME('p');
B_OPTION_LONG_NAME("parameter");
B_OPTION_DESC(
"a parameter to use when creating the new file. "
"if a parameter EXAMPLE is defined, any variable "
"reference "
"of the form ${EXAMPLE} in the package manifest will "
"be "
"replaced with the specified parameter value.");
B_OPTION_ARG(OPT_PARAMETER_NAME)
{
B_ARG_NAME("name");
B_ARG_NR_VALUES(1);
}
B_OPTION_ARG(OPT_PARAMETER_VALUE)
{
B_ARG_NAME("value");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_ARG(ARG_SOURCE_DIR)
{
B_ARG_NAME("source-dir");
B_ARG_DESC(
"the directory to package. the specified directory "
"will become the root of the newly created package.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_SOURCE_DIR);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_MANIFEST);
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_SOURCE_DIR);
}
}

55
ropkg/extract.c Normal file
View File

@@ -0,0 +1,55 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_OUTPATH,
OPT_OUTPATH_PATH,
ARG_PACKAGE,
};
static int extract(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_EXTRACT, CMD_ROOT)
{
B_COMMAND_NAME("extract");
B_COMMAND_SHORT_NAME('X');
B_COMMAND_DESC("extract the contents of a Rosetta package");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(extract);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_OUTPATH)
{
B_OPTION_SHORT_NAME('o');
B_OPTION_LONG_NAME("out");
B_OPTION_DESC("the path to extract the package contents to");
B_OPTION_ARG(OPT_OUTPATH_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_ARG(ARG_PACKAGE)
{
B_ARG_NAME("package");
B_ARG_DESC("the package to extract.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_OPT(OPT_OUTPATH);
B_COMMAND_USAGE_ARG(ARG_PACKAGE);
}
}

59
ropkg/install.c Normal file
View File

@@ -0,0 +1,59 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
OPT_SYSROOT,
OPT_SYSROOT_PATH,
ARG_PACKAGE,
};
static int install(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_INSTALL, CMD_ROOT)
{
B_COMMAND_NAME("install");
B_COMMAND_SHORT_NAME('I');
B_COMMAND_DESC("install a Rosetta package.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(install);
B_COMMAND_HELP_OPTION();
B_COMMAND_OPTION(OPT_SYSROOT)
{
B_OPTION_SHORT_NAME('s');
B_OPTION_LONG_NAME("sysroot");
B_OPTION_DESC(
"the system directory to install the package to. if no "
"sysroot is specified, the root directory is used. "
"alternatively, the ROSETTA_SYSROOT environment "
"variable can be used to specify the system root "
"directory");
B_OPTION_ARG(OPT_SYSROOT_PATH)
{
B_ARG_NAME("path");
B_ARG_NR_VALUES(1);
}
}
B_COMMAND_ARG(ARG_PACKAGE)
{
B_ARG_NAME("package-path");
B_ARG_DESC("the path to the package to install.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_ARG(ARG_PACKAGE);
}
}

19
ropkg/main.c Normal file
View File

@@ -0,0 +1,19 @@
#include "commands.h"
#include <blue/cmd.h>
B_COMMAND(CMD_ROOT, B_COMMAND_INVALID_ID)
{
B_COMMAND_NAME("ropkg");
B_COMMAND_DESC(
"Rosetta package manipulation tool. This tool is used to "
"create, build, and otherwise manipulate individual Rosetta "
"package files.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_HELP_OPTION();
}
int main(int argc, const char **argv)
{
return b_command_dispatch(CMD_ROOT, argc, argv);
}

38
ropkg/query.c Normal file
View File

@@ -0,0 +1,38 @@
#include "commands.h"
#include <blue/cmd.h>
enum {
ARG_PACKAGE,
};
static int query(
const b_command *self,
const b_arglist *opt,
const b_array *args)
{
return 0;
}
B_COMMAND(CMD_QUERY, CMD_ROOT)
{
B_COMMAND_NAME("query");
B_COMMAND_SHORT_NAME('Q');
B_COMMAND_DESC("query information about a Rosetta package");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_FUNCTION(query);
B_COMMAND_HELP_OPTION();
B_COMMAND_ARG(ARG_PACKAGE)
{
B_ARG_NAME("package");
B_ARG_DESC("the package to query.");
B_ARG_NR_VALUES(1);
}
B_COMMAND_USAGE()
{
B_COMMAND_USAGE_ARG(ARG_PACKAGE);
}
}

4
rovem/CMakeLists.txt Normal file
View File

@@ -0,0 +1,4 @@
file(GLOB sources *.c *.h)
add_executable(rovem ${sources})
target_link_libraries(rovem Bluelib::Core Bluelib::Object Bluelib::Io Bluelib::Term Bluelib::Cmd)

0
rovem/add-package.c Normal file
View File

12
rovem/commands.h Normal file
View File

@@ -0,0 +1,12 @@
#ifndef COMMANDS_H_
#define COMMANDS_H_
enum {
CMD_ROOT,
CMD_CREATE,
CMD_QUERY,
CMD_ADD_PACKAGE,
CMD_REMOVE_PACKAGE,
};
#endif

0
rovem/create.c Normal file
View File

19
rovem/main.c Normal file
View File

@@ -0,0 +1,19 @@
#include "commands.h"
#include <blue/cmd.h>
B_COMMAND(CMD_ROOT, B_COMMAND_INVALID_ID)
{
B_COMMAND_NAME("rovem");
B_COMMAND_DESC(
"Rosetta package vendor management tool. This tool is used to "
"create and manage a Rosetta package vendor, from which "
"packages can be retrieved and installed by clients.");
B_COMMAND_FLAGS(B_COMMAND_SHOW_HELP_BY_DEFAULT);
B_COMMAND_HELP_OPTION();
}
int main(int argc, const char **argv)
{
return b_command_dispatch(CMD_ROOT, argc, argv);
}

0
rovem/query.c Normal file
View File

0
rovem/remove-package.c Normal file
View File