configure
/* $Id$ */
/* Copyright (c) 2006-2022 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS Devel configure */
/* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
#ifndef CONFIGURE_CONFIGURE_H
# define CONFIGURE_CONFIGURE_H
# include <System.h>
/* types */
ARRAY2(Config *, config)
typedef enum _HostArch
{
HA_AMD64 = 0,
HA_ARM,
HA_I386, HA_I486, HA_I586, HA_I686,
HA_SPARC, HA_SPARC64,
HA_UNKNOWN
} HostArch;
# define HA_LAST HA_UNKNOWN
# define HA_COUNT (HA_LAST + 1)
extern const String * sHostArch[HA_COUNT];
typedef enum _HostOS
{
HO_DEFORAOS = 0,
HO_DARWIN,
HO_GNU_LINUX,
HO_FREEBSD, HO_NETBSD, HO_OPENBSD,
HO_SUNOS,
HO_WIN32,
HO_UNKNOWN
} HostOS;
# define HO_LAST HO_UNKNOWN
# define HO_COUNT (HO_LAST + 1)
/* aliases */
# define HO_MACOS HO_DARWIN
# define HO_MACOSX HO_DARWIN
extern const String * sHostOS[HO_COUNT];
typedef enum _HostKernel
{
HK_LINUX20 = 0, HK_LINUX22, HK_LINUX24, HK_LINUX26,
HK_MACOSX106, HK_MACOSX113,
HK_NETBSD2, HK_NETBSD3, HK_NETBSD4, HK_NETBSD5, HK_NETBSD51,
HK_OPENBSD40, HK_OPENBSD41,
HK_SUNOS57, HK_SUNOS58, HK_SUNOS59, HK_SUNOS510,
HK_UNKNOWN
} HostKernel;
# define HK_LAST HK_UNKNOWN
# define HK_COUNT (HK_LAST + 1)
typedef struct _HostKernelMap
{
HostOS os;
const char * version;
const char * os_display;
const char * version_display;
} HostKernelMap;
extern const HostKernelMap sHostKernel[HK_COUNT];
typedef enum _TargetType
{
TT_BINARY = 0, TT_COMMAND, TT_LIBRARY, TT_LIBTOOL, TT_OBJECT, TT_PLUGIN,
TT_SCRIPT, TT_UNKNOWN
} TargetType;
# define TT_LAST TT_UNKNOWN
# define TT_COUNT (TT_LAST + 1)
extern const String * sTargetType[TT_COUNT];
typedef enum _ObjectType
{
OT_UNKNOWN = 0,
OT_ASM_SOURCE,
OT_ASMPP_SOURCE,
OT_C_SOURCE,
OT_CXX_SOURCE,
OT_GOLANG_SOURCE,
OT_JAVA_SOURCE,
OT_OBJC_SOURCE,
OT_OBJCXX_SOURCE,
OT_VERILOG_SOURCE
} ObjectType;
# define OT_LAST OT_VERILOG_SOURCE
# define OT_COUNT (OT_LAST + 1)
struct ExtensionType
{
const char * extension;
ObjectType type;
};
extern const struct ExtensionType * sExtensionType;
/* constants */
# ifndef CONFEXT
# define CONFEXT ".conf"
# endif
# ifndef PROJECT_CONF
# define PROJECT_CONF "project" CONFEXT
# endif
# ifndef MAKEFILE
# define MAKEFILE "Makefile"
# endif
/* configure */
/* types */
typedef struct _ConfigurePrefs
{
unsigned int flags;
String const * mode;
String const * os;
} ConfigurePrefs;
# define PREFS_n 0x1
# define PREFS_S 0x2
# define PREFS_v 0x4
typedef struct _Configure Configure;
/* functions */
Configure * configure_new(ConfigurePrefs * prefs);
void configure_delete(Configure * configure);
/* accessors */
int configure_can_library_static(Configure * configure);
String const * configure_get_config(Configure * configure,
String const * section, String const * variable);
String const * configure_get_config_mode(Configure * configure,
String const * mode, String const * variable);
String const * configure_get_extension(Configure * configure,
String const * extension);
String const * configure_get_mode(Configure * configure);
String const * configure_get_mode_title(Configure * configure,
String const * mode);
String const * configure_get_path(Configure * configure, String const * path);
HostOS configure_get_os(Configure * configure);
ConfigurePrefs const * configure_get_prefs(Configure * configure);
String const * configure_get_program(Configure * configure,
String const * name);
unsigned int configure_is_flag_set(Configure * configure, unsigned int flags);
int configure_set_mode(Configure * configure, String const * mode);
int configure_set_path(Configure * configure, String const * path,
String const * value);
/* useful */
int configure_error(int ret, char const * format, ...);
int configure_warning(int ret, char const * format, ...);
int configure_project(Configure * configure, String const * directory);
#endif /* !CONFIGURE_CONFIGURE_H */