Move common code to a separate file
This commit is contained in:
parent
f45fb01cb8
commit
ce35c9c919
100
src/common.c
Normal file
100
src/common.c
Normal file
|
@ -0,0 +1,100 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2017 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. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* functions */
|
||||||
|
/* enum_map_find */
|
||||||
|
unsigned int enum_map_find(unsigned int last, EnumMap const * map,
|
||||||
|
String const * str)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for(i = 0; map[i].value != last; i++)
|
||||||
|
if(string_compare(map[i].string, str) == 0)
|
||||||
|
return map[i].value;
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* enum_string */
|
||||||
|
unsigned int enum_string(unsigned int last, const String * strings[],
|
||||||
|
String const * str)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for(i = 0; i < last; i++)
|
||||||
|
if(string_compare(strings[i], str) == 0)
|
||||||
|
return i;
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* enum_string_short */
|
||||||
|
unsigned int enum_string_short(unsigned int last, const String * strings[],
|
||||||
|
String const * str)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for(i = 0; i < last; i++)
|
||||||
|
if(string_compare_length(strings[i], str,
|
||||||
|
string_length(strings[i])) == 0)
|
||||||
|
return i;
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* source_extension */
|
||||||
|
String const * source_extension(String const * source)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
for(len = string_length(source); len > 0; len--)
|
||||||
|
if(source[len - 1] == '.')
|
||||||
|
return &source[len];
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* source_type */
|
||||||
|
ObjectType source_type(String const * source)
|
||||||
|
{
|
||||||
|
String const * extension;
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
if((extension = source_extension(source)) == NULL)
|
||||||
|
extension = source;
|
||||||
|
for(i = 0; sExtensionType[i].extension != NULL; i++)
|
||||||
|
if(string_compare(sExtensionType[i].extension, extension) == 0)
|
||||||
|
return sExtensionType[i].type;
|
||||||
|
return OT_UNKNOWN;
|
||||||
|
}
|
58
src/common.h
Normal file
58
src/common.h
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2017 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_COMMON_H
|
||||||
|
# define CONFIGURE_COMMON_H
|
||||||
|
|
||||||
|
# include <System.h>
|
||||||
|
# include "configure.h"
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* types */
|
||||||
|
typedef struct _EnumMap
|
||||||
|
{
|
||||||
|
unsigned int value;
|
||||||
|
String const * string;
|
||||||
|
} EnumMap;
|
||||||
|
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
unsigned int enum_map_find(unsigned int last, EnumMap const * map,
|
||||||
|
String const * str);
|
||||||
|
unsigned int enum_string(unsigned int last, const String * strings[],
|
||||||
|
String const * str);
|
||||||
|
unsigned int enum_string_short(unsigned int last, const String * strings[],
|
||||||
|
String const * str);
|
||||||
|
|
||||||
|
String const * source_extension(String const * source);
|
||||||
|
ObjectType source_type(String const * source);
|
||||||
|
|
||||||
|
#endif /* !CONFIGURE_COMMON_H */
|
|
@ -38,6 +38,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "common.h"
|
||||||
#include "makefile.h"
|
#include "makefile.h"
|
||||||
#include "configure.h"
|
#include "configure.h"
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
|
@ -138,52 +139,7 @@ const struct ExtensionType _sExtensionType[] =
|
||||||
const struct ExtensionType * sExtensionType = _sExtensionType;
|
const struct ExtensionType * sExtensionType = _sExtensionType;
|
||||||
|
|
||||||
|
|
||||||
/* prototypes */
|
|
||||||
String const * _source_extension(String const * source);
|
|
||||||
ObjectType _source_type(String const * source);
|
|
||||||
|
|
||||||
|
|
||||||
/* functions */
|
/* functions */
|
||||||
/* enum_map_find */
|
|
||||||
unsigned int enum_map_find(unsigned int last, EnumMap const * map,
|
|
||||||
String const * str)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for(i = 0; map[i].value != last; i++)
|
|
||||||
if(string_compare(map[i].string, str) == 0)
|
|
||||||
return map[i].value;
|
|
||||||
return last;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* enum_string */
|
|
||||||
unsigned int enum_string(unsigned int last, const String * strings[],
|
|
||||||
String const * str)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for(i = 0; i < last; i++)
|
|
||||||
if(string_compare(strings[i], str) == 0)
|
|
||||||
return i;
|
|
||||||
return last;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* enum_string_short */
|
|
||||||
unsigned int enum_string_short(unsigned int last, const String * strings[],
|
|
||||||
String const * str)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
for(i = 0; i < last; i++)
|
|
||||||
if(string_compare_length(strings[i], str,
|
|
||||||
string_length(strings[i])) == 0)
|
|
||||||
return i;
|
|
||||||
return last;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* configure_new */
|
/* configure_new */
|
||||||
static void _new_detect(Configure * configure);
|
static void _new_detect(Configure * configure);
|
||||||
static HostKernel _new_detect_kernel(HostOS os, char const * release);
|
static HostKernel _new_detect_kernel(HostOS os, char const * release);
|
||||||
|
@ -568,30 +524,3 @@ int configure_warning(int ret, char const * format, ...)
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* source_extension */
|
|
||||||
String const * _source_extension(String const * source)
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
for(len = string_length(source); len > 0; len--)
|
|
||||||
if(source[len - 1] == '.')
|
|
||||||
return &source[len];
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* source_type */
|
|
||||||
ObjectType _source_type(String const * source)
|
|
||||||
{
|
|
||||||
String const * extension;
|
|
||||||
size_t i;
|
|
||||||
|
|
||||||
if((extension = _source_extension(source)) == NULL)
|
|
||||||
extension = source;
|
|
||||||
for(i = 0; sExtensionType[i].extension != NULL; i++)
|
|
||||||
if(string_compare(sExtensionType[i].extension, extension) == 0)
|
|
||||||
return sExtensionType[i].type;
|
|
||||||
return OT_UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
|
@ -37,12 +37,6 @@
|
||||||
/* types */
|
/* types */
|
||||||
ARRAY(Config *, config)
|
ARRAY(Config *, config)
|
||||||
|
|
||||||
typedef struct _EnumMap
|
|
||||||
{
|
|
||||||
unsigned int value;
|
|
||||||
String const * string;
|
|
||||||
} EnumMap;
|
|
||||||
|
|
||||||
typedef enum _HostArch
|
typedef enum _HostArch
|
||||||
{
|
{
|
||||||
HA_AMD64 = 0,
|
HA_AMD64 = 0,
|
||||||
|
@ -174,15 +168,4 @@ int configure_warning(int ret, char const * format, ...);
|
||||||
|
|
||||||
int configure_project(Configure * configure, String const * directory);
|
int configure_project(Configure * configure, String const * directory);
|
||||||
|
|
||||||
/* generic */
|
|
||||||
unsigned int enum_map_find(unsigned int last, EnumMap const * map,
|
|
||||||
String const * str);
|
|
||||||
unsigned int enum_string(unsigned int last, const String * strings[],
|
|
||||||
String const * str);
|
|
||||||
unsigned int enum_string_short(unsigned int last, const String * strings[],
|
|
||||||
String const * str);
|
|
||||||
|
|
||||||
String const * _source_extension(String const * source);
|
|
||||||
ObjectType _source_type(String const * source);
|
|
||||||
|
|
||||||
#endif /* !CONFIGURE_CONFIGURE_H */
|
#endif /* !CONFIGURE_CONFIGURE_H */
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include "common.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
#include "configure.h"
|
#include "configure.h"
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
|
@ -998,7 +999,7 @@ static int _objs_source(Makefile * makefile, String * source, TargetType tt)
|
||||||
String const * extension;
|
String const * extension;
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
if((extension = _source_extension(source)) == NULL)
|
if((extension = source_extension(source)) == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s%s%s", PROGNAME ": ", source,
|
fprintf(stderr, "%s%s%s", PROGNAME ": ", source,
|
||||||
": no extension for source\n");
|
": no extension for source\n");
|
||||||
|
@ -1006,7 +1007,7 @@ static int _objs_source(Makefile * makefile, String * source, TargetType tt)
|
||||||
}
|
}
|
||||||
len = string_length(source) - string_length(extension) - 1;
|
len = string_length(source) - string_length(extension) - 1;
|
||||||
source[len] = '\0';
|
source[len] = '\0';
|
||||||
switch(_source_type(extension))
|
switch(source_type(extension))
|
||||||
{
|
{
|
||||||
case OT_ASM_SOURCE:
|
case OT_ASM_SOURCE:
|
||||||
case OT_C_SOURCE:
|
case OT_C_SOURCE:
|
||||||
|
@ -1088,13 +1089,13 @@ static int _target_flags(Makefile * makefile, String const * target)
|
||||||
continue;
|
continue;
|
||||||
c = sources[i];
|
c = sources[i];
|
||||||
sources[i] = '\0';
|
sources[i] = '\0';
|
||||||
extension = _source_extension(sources);
|
extension = source_extension(sources);
|
||||||
if(extension == NULL)
|
if(extension == NULL)
|
||||||
{
|
{
|
||||||
sources[i] = c;
|
sources[i] = c;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
type = _source_type(extension);
|
type = source_type(extension);
|
||||||
if(!done[type])
|
if(!done[type])
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
|
@ -1354,9 +1355,9 @@ static int _target_object(Makefile * makefile,
|
||||||
": An object can have only one source file\n");
|
": An object can have only one source file\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if((extension = _source_extension(p)) == NULL)
|
if((extension = source_extension(p)) == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
switch(_source_type(extension))
|
switch(source_type(extension))
|
||||||
{
|
{
|
||||||
case OT_ASM_SOURCE:
|
case OT_ASM_SOURCE:
|
||||||
_makefile_print(makefile, "\n%s%s%s%s\n%s%s",
|
_makefile_print(makefile, "\n%s%s%s%s\n%s%s",
|
||||||
|
@ -1636,11 +1637,11 @@ static int _target_source(Makefile * makefile,
|
||||||
|
|
||||||
if((p = _makefile_get_config(makefile, target, "type")) != NULL)
|
if((p = _makefile_get_config(makefile, target, "type")) != NULL)
|
||||||
tt = enum_string(TT_LAST, sTargetType, p);
|
tt = enum_string(TT_LAST, sTargetType, p);
|
||||||
if((extension = _source_extension(source)) == NULL)
|
if((extension = source_extension(source)) == NULL)
|
||||||
return 1;
|
return 1;
|
||||||
len = string_length(source) - string_length(extension) - 1;
|
len = string_length(source) - string_length(extension) - 1;
|
||||||
source[len] = '\0';
|
source[len] = '\0';
|
||||||
switch((ot = _source_type(extension)))
|
switch((ot = source_type(extension)))
|
||||||
{
|
{
|
||||||
case OT_ASM_SOURCE:
|
case OT_ASM_SOURCE:
|
||||||
if(tt == TT_OBJECT)
|
if(tt == TT_OBJECT)
|
||||||
|
|
|
@ -5,18 +5,21 @@ cflags_force=`pkg-config --cflags libSystem`
|
||||||
cflags=-W -Wall -g -O2 -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector
|
cflags=-W -Wall -g -O2 -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector
|
||||||
ldflags_force=`pkg-config --libs libSystem`
|
ldflags_force=`pkg-config --libs libSystem`
|
||||||
ldflags=-pie -Wl,-z,relro -Wl,-z,now
|
ldflags=-pie -Wl,-z,relro -Wl,-z,now
|
||||||
dist=Makefile,configure.h,makefile.h,settings.h
|
dist=Makefile,common.h,configure.h,makefile.h,settings.h
|
||||||
|
|
||||||
[configure]
|
[configure]
|
||||||
type=binary
|
type=binary
|
||||||
depends=$(OBJDIR)makefile.o
|
depends=$(OBJDIR)makefile.o
|
||||||
sources=configure.c,settings.c,main.c
|
sources=common.c,configure.c,settings.c,main.c
|
||||||
ldflags=$(OBJDIR)makefile.o
|
ldflags=$(OBJDIR)makefile.o
|
||||||
install=$(BINDIR)
|
install=$(BINDIR)
|
||||||
|
|
||||||
|
[common.c]
|
||||||
|
depends=common.h
|
||||||
|
|
||||||
[configure.c]
|
[configure.c]
|
||||||
cppflags=-D PREFIX=\"$(PREFIX)\"
|
cppflags=-D PREFIX=\"$(PREFIX)\"
|
||||||
depends=configure.h,makefile.h,../config.h
|
depends=common.h,configure.h,makefile.h,../config.h
|
||||||
|
|
||||||
[main.c]
|
[main.c]
|
||||||
depends=configure.h
|
depends=configure.h
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
|
|
||||||
#define BASEDIR ".."
|
#define BASEDIR ".."
|
||||||
|
|
||||||
|
#include "../src/common.c"
|
||||||
#include "../src/configure.c"
|
#include "../src/configure.c"
|
||||||
#include "../src/makefile.c"
|
#include "../src/makefile.c"
|
||||||
#include "../src/settings.c"
|
#include "../src/settings.c"
|
||||||
|
|
|
@ -11,7 +11,7 @@ ldflags=`pkg-config --libs libSystem`
|
||||||
sources=configure.c
|
sources=configure.c
|
||||||
|
|
||||||
[configure.c]
|
[configure.c]
|
||||||
depends=../src/configure.c,../src/configure.h,../src/main.c,../src/makefile.c,../src/makefile.h,../src/settings.c,../src/settings.h
|
depends=../src/common.c,../src/common.h,../src/configure.c,../src/configure.h,../src/main.c,../src/makefile.c,../src/makefile.h,../src/settings.c,../src/settings.h
|
||||||
|
|
||||||
[pkg-config]
|
[pkg-config]
|
||||||
type=binary
|
type=binary
|
||||||
|
|
Loading…
Reference in New Issue
Block a user