Renaming some files in tools/

git-svn-id: http://svn.code.sf.net/p/nuttx/code/trunk@5476 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
patacongo
2013-01-04 16:00:38 +00:00
parent 19752b4453
commit c504d9e32e
8 changed files with 469 additions and 44 deletions
+7 -2
View File
@@ -41,6 +41,10 @@ Installing Cygwin
tiny setup.exe program and it does the real, internet installation tiny setup.exe program and it does the real, internet installation
for you. for you.
NOTE: NuttX can also be installed and built on a native Windows
system, but with some loss of tool functionality (see the
discussion "Native Windows Build" below).
Some Cygwin installation tips: Some Cygwin installation tips:
1. Install at C:\cygwin 1. Install at C:\cygwin
@@ -61,8 +65,9 @@ Installing Cygwin
After installing Cygwin, you will get lots of links for installed After installing Cygwin, you will get lots of links for installed
tools and shells. I use the RXVT native shell. It is fast and reliable tools and shells. I use the RXVT native shell. It is fast and reliable
and does not require you to run the Cygwin X server (which is neither and does not require you to run the Cygwin X server (which is neither
fast nor reliable). The rest of these instructions assume that you fast nor reliable). Unless otherwise noted, the rest of these
are at a bash command line prompt in either Linux or in Cygwin shell. instructions assume that you are at a bash command line prompt in
either Linux or in Cygwin shell.
Download and Unpack Download and Unpack
------------------- -------------------
+55 -29
View File
@@ -6,8 +6,7 @@ standards, things that could be improved, and ideas for enhancements.
nuttx/ nuttx/
(6) Task/Scheduler (sched/) (10) Task/Scheduler (sched/)
(1) On-demand paging (sched/)
(1) Memory Managment (mm/) (1) Memory Managment (mm/)
(2) Signals (sched/, arch/) (2) Signals (sched/, arch/)
(2) pthreads (sched/) (2) pthreads (sched/)
@@ -56,14 +55,9 @@ o Task/Scheduler (sched/)
Title: CHILD PTHREAD TERMINATION Title: CHILD PTHREAD TERMINATION
Description: When a tasks exits, shouldn't all of its child pthreads also be Description: When a tasks exits, shouldn't all of its child pthreads also be
terminated? terminated?
Status: Open Status: Closed. No, this behavior will not be implemented.
Priority: Medium, required for good emulation of process/pthread model. Priority: Medium, required for good emulation of process/pthread model.
Title: MMAN.H
Description: Implement sys/mman.h and functions
Status: Open
Priority: Low
Title: WAIT.H Title: WAIT.H
Description: Implement sys/wait.h and functions. Consider implementing wait, Description: Implement sys/wait.h and functions. Consider implementing wait,
waitpid, waitid. At present, a parent has no information about waitpid, waitid. At present, a parent has no information about
@@ -72,14 +66,16 @@ o Task/Scheduler (sched/)
Update: A simple but usable version of waitpid() has been included. Update: A simple but usable version of waitpid() has been included.
This version is not compliant with all specifications and can be This version is not compliant with all specifications and can be
enabled with CONFIG_SCHED_WAITPID. enabled with CONFIG_SCHED_WAITPID.
Status: Open Status: Open, however no further work is planned.
Priority: Low Priority: Low
Title: MISSING ERRNO SETTINGS Title: MISSING ERRNO SETTINGS
Description: Several APIs do not set errno. Need to review all APIs. Description: Several APIs do not set errno. Need to review all APIs.
Update: These are being fixed as they are encountered. There is Update: These are being fixed as they are encountered. There is
no accounting of how many interfaces have this problem. no accounting of how many interfaces have this problem.
Status: Open Status: Open? There has been an effort over the past few years to assure
that all errno settings are in place. What is the current state?
Unknown.
Priority: Medium, required for standard compliance (but makes the Priority: Medium, required for standard compliance (but makes the
code bigger) code bigger)
@@ -107,18 +103,29 @@ o Task/Scheduler (sched/)
3) sched_process_timeslice(). Then there is round-robin time-slicing. 3) sched_process_timeslice(). Then there is round-robin time-slicing.
Status: Open The primary advantage of a tickless OS is that is would allow for
reduce power consumptions. That is because timer interrupts will
usually awaken CPUs from reduced power consumption states.
Status: Open. There will probably be no tickless OS implementation unless
someone gets motivated and drives the change.
Priority: Low Priority: Low
Title: posix_spawn() Title: posix_spawn()
Description: This would be a good interface to add to NuttX. It is really Description: This would be a good interface to add to NuttX. It is really
just a re-packaging of the existing, non-standard NuttX exec() just a re-packaging of the existing, non-standard NuttX exec()
function. function.
Status: Open Status: Open. There are no plans to implement this capabilitiey now.
Priority: Medium low. Priority: Medium low.
o On-demand paging (sched/) Title: pause() NON-COMPLIANCE
^^^^^^^^^^^^^^^^^^^^^^^^^ Description: In the POSIX description of this function is the pause() function
will suspend the calling thread until delivery of a signal whose
action is either to execute a signal-catching function or to
terminate the process. The current implementation only waits for
any non-blocked signal to be received. It should only wake up if
the signal is delivered to a handler.
Status: Open.
Priority: Medium Low.
Title: ON-DEMAND PAGE INCOMPLETE Title: ON-DEMAND PAGE INCOMPLETE
Description: On-demand paging has recently been incorporated into the RTOS. Description: On-demand paging has recently been incorporated into the RTOS.
@@ -130,19 +137,16 @@ o On-demand paging (sched/)
configs/ea3131/pgnsh and locked directories). There are configs/ea3131/pgnsh and locked directories). There are
some limitations of this testing so I still cannot say that some limitations of this testing so I still cannot say that
the feature is fully functional. the feature is fully functional.
Status: Open Status: Open. This has been put on the shelf for some time.
Priority: Medium-Low Priority: Medium-Low
o Other core OS logic
^^^^^^^^^^^^^^^^^^^
Title: GET_ENVIRON_PTR() Title: GET_ENVIRON_PTR()
Description: get_environ_ptr() (sched/sched_getenvironptr.c) is not implemented. Description: get_environ_ptr() (sched/sched_getenvironptr.c) is not implemented.
The representation of the the environment strings selected for The representation of the the environment strings selected for
NutX is not compatible with the operation. Some significant NutX is not compatible with the operation. Some significant
re-design would be required to implement this funcion and that re-design would be required to implement this funcion and that
effort is thought to be not worth the result. effort is thought to be not worth the result.
Status: Open Status: Open. No change is planned.
Priority: Low -- There is no plan to implement this. Priority: Low -- There is no plan to implement this.
Title: TIMER_GETOVERRUN() Title: TIMER_GETOVERRUN()
@@ -150,6 +154,23 @@ o Other core OS logic
Status: Open Status: Open
Priority: Low -- There is no plan to implement this. Priority: Low -- There is no plan to implement this.
Title: USER-SPACE WORK QUEUES
Description: There has been some use of work queues that has crept into some
user code. I am thinking of NxWidgets::CNxTimer. That timer
logic was originally implemented (correctly) using POSIX timers,
but was re-implemented using timed work.
The issue is that NxWidgets::CNxTimer is a user-space application
but the work queues are an OS internal feature. This will be a
problem for KERNEL builds. Hooks and definitions have been added
in include/nuttx/wqueue.h to support a user-space work queue, but
the corresponding logic has not been implemented.
The work queue logic will need to be moved from sched/ to libc/wqueue/
Status: Open. No work will probably be done until a functional KERNEL build
that includes NxWisges::CNxTimer is needed.
Priority: Medium Low for now
o Memory Managment (mm/) o Memory Managment (mm/)
^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^
@@ -212,7 +233,7 @@ o Memory Managment (mm/)
be required to keep this memory on the correct list (or on be required to keep this memory on the correct list (or on
no list at all). no list at all).
Status: Open Status: Open. No changes are planned.
Priority: Medium/Low, a good feature to prevent memory leaks but would Priority: Medium/Low, a good feature to prevent memory leaks but would
have negative impact on memory usage and code size. have negative impact on memory usage and code size.
@@ -222,7 +243,7 @@ o Signals (sched/, arch/)
Title: STANDARD SIGNALS Title: STANDARD SIGNALS
Description: 'Standard' signals and signal actions are not supported. Description: 'Standard' signals and signal actions are not supported.
(e.g., SIGINT, SIGCHLD, SIGSEGV, etc). (e.g., SIGINT, SIGCHLD, SIGSEGV, etc).
Status: Open Status: Open. No changes are planned.
Priority: Low, required by standards but not so critical for an Priority: Low, required by standards but not so critical for an
embedded system. embedded system.
@@ -240,11 +261,11 @@ o pthreads (sched/)
Title: CANCELLATION POINTS Title: CANCELLATION POINTS
Description: pthread_cancel(): Should implement cancellation points and Description: pthread_cancel(): Should implement cancellation points and
pthread_testcancel() pthread_testcancel()
Status: Open Status: Open. No changes are planned.
Priority: Low, probably not that useful Priority: Low, probably not that useful
Title: PTHREAD_PRIO_PROTECT Title: PTHREAD_PRIO_PROTECT
Description: Extended pthread_mutexattr_setprotocol() suport PTHREAD_PRIO_PROTECT: Description: Extended pthread_mutexattr_setprotocol() suport PTHREAD_PRIO_PROTECT:
"When a thread owns one or more mutexes initialized with the "When a thread owns one or more mutexes initialized with the
PTHREAD_PRIO_PROTECT protocol, it shall execute at the higher of its PTHREAD_PRIO_PROTECT protocol, it shall execute at the higher of its
priority or the highest of the priority ceilings of all the mutexes priority or the highest of the priority ceilings of all the mutexes
@@ -260,7 +281,7 @@ o pthreads (sched/)
PTHREAD_PRIO_PROTECT protocol attributes, it shall not be subject to PTHREAD_PRIO_PROTECT protocol attributes, it shall not be subject to
being moved to the tail of the scheduling queue at its priority in the being moved to the tail of the scheduling queue at its priority in the
event that its original priority is changed." event that its original priority is changed."
Status: Open Status: Open. No changes planned.
Priority: Low -- about zero, probably not that useful. Priority inheritance is Priority: Low -- about zero, probably not that useful. Priority inheritance is
already supported and is a much better solution. And it turns out already supported and is a much better solution. And it turns out
that priority protection is just about as complex as priority inheritance. that priority protection is just about as complex as priority inheritance.
@@ -442,21 +463,25 @@ o Network (net/, drivers/net)
Title: SOCK_RAW/SOCK_PACKET Title: SOCK_RAW/SOCK_PACKET
Description: Should implement SOCK_RAW, SOCK_PACKET Description: Should implement SOCK_RAW, SOCK_PACKET
Status: Open Status: Open. No changes are planned.
Priority: Low Priority: Low
Tile: MULTIPLE NETWORK INTERFACE SUPPORT Tile: MULTIPLE NETWORK INTERFACE SUPPORT
Description: uIP polling issues / Multiple network interface support: Description: uIP polling issues / Multiple network interface support:
(1) Current logic will not support multiple ethernet drivers. (1) Current logic will not support multiple ethernet drivers.
Each driver should poll on TCP connections connect on the Each driver should poll on TCP connections connect on the
network supported by the driver; UDP polling should respond network supported by the driver; UDP polling should respond
with TX data only if the UDP packet is intended for the with TX data only if the UDP packet is intended for the
the network supported by the driver. the network supported by the driver.
(2) If there were multiple drivers, polling would occur at (2) If there were multiple drivers, polling would occur at
double the rate. Fix by using bound IP address in TCP double the rate. Fix by using bound IP address in TCP
connection (lipaddr) and verifying that it is in the subnet connection (lipaddr) and verifying that it is in the subnet
served by the driver. served by the driver.
Status: Open
Status: Open. Nothing will probably be done until I have a platform
with two network interfaces that I need to support.
Priority: Medium, The feature is not important, but it is important Priority: Medium, The feature is not important, but it is important
for NuttX to resolve the architectural issues. for NuttX to resolve the architectural issues.
@@ -464,7 +489,7 @@ o Network (net/, drivers/net)
Description: sendto() and multiple network interface support: Description: sendto() and multiple network interface support:
When polled, would have to assure that the destination IP When polled, would have to assure that the destination IP
is on the subnet served by the polling driver. is on the subnet served by the polling driver.
Status: Open Status: Open. This is really part of the above issue.
Priority: Medium, The feature is not important, but it is important Priority: Medium, The feature is not important, but it is important
for NuttX to resolve the architectural issues. for NuttX to resolve the architectural issues.
@@ -472,7 +497,8 @@ o Network (net/, drivers/net)
Description: IPv6 support is incomplete. Adam Dunkels has recently announced Description: IPv6 support is incomplete. Adam Dunkels has recently announced
IPv6 support for uIP (currently only as part of Contiki). Those IPv6 support for uIP (currently only as part of Contiki). Those
changes need to be ported to NuttX. changes need to be ported to NuttX.
Status: Open Status: Open. No work will probably be done until there is a specific
requirement for IPv6.
Priority: Medium Priority: Medium
Title: LISTENING FOR UDP BROADCASTS Title: LISTENING FOR UDP BROADCASTS
@@ -488,7 +514,7 @@ o Network (net/, drivers/net)
driver should be throttled. Perhaps the driver should disable driver should be throttled. Perhaps the driver should disable
RX interrupts when throttled and re-anable on each poll time. RX interrupts when throttled and re-anable on each poll time.
recvfrom would, of course, have to un-throttle. recvfrom would, of course, have to un-throttle.
Status: Open Status: Open. This is just a thought experiment. No changes are planned.
Priority: Medium Priority: Medium
Title: STANDARDIZE ETHERNET DRIVER STATISTICS Title: STANDARDIZE ETHERNET DRIVER STATISTICS
+15 -7
View File
@@ -45,13 +45,12 @@ ifneq ($(CONFIG_WINDOWS_NATIVE),y)
endif endif
all: b16$(HOSTEXEEXT) bdf-converter$(HOSTEXEEXT) cmpconfig$(HOSTEXEEXT) \ all: b16$(HOSTEXEEXT) bdf-converter$(HOSTEXEEXT) cmpconfig$(HOSTEXEEXT) \
mkconfig$(HOSTEXEEXT) mkdeps$(HOSTEXEEXT) mksymtab$(HOSTEXEEXT) \ configure$(HOSTEXEEXT) mkconfig$(HOSTEXEEXT) mkdeps$(HOSTEXEEXT) mksymtab$(HOSTEXEEXT) \
mksyscall$(HOSTEXEEXT) mkversion$(HOSTEXEEXT) mksyscall$(HOSTEXEEXT) mkversion$(HOSTEXEEXT)
default: mkconfig$(HOSTEXEEXT) mksyscall$(HOSTEXEEXT) mkdeps$(HOSTEXEEXT) default: mkconfig$(HOSTEXEEXT) mksyscall$(HOSTEXEEXT) mkdeps$(HOSTEXEEXT)
ifdef HOSTEXEEXT ifdef HOSTEXEEXT
.PHONY: b16 bdf-converter cmpconfig clean mkconfig mkdeps mksymtab \ .PHONY: b16 bdf-converter cmpconfig clean configure mkconfig mkdeps mksymtab mksyscall mkversion
mksyscall mkversion
else else
.PHONY: clean .PHONY: clean
endif endif
@@ -70,10 +69,19 @@ ifdef HOSTEXEEXT
b16: b16$(HOSTEXEEXT) b16: b16$(HOSTEXEEXT)
endif endif
# configure - Instantiate a canned NuttX configuration
configure$(HOSTEXEEXT): configure.c cfgparser.c
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o configure$(HOSTEXEEXT) configure.c cfgparser.c
ifdef HOSTEXEEXT
configure: configure$(HOSTEXEEXT)
endif
# mkconfig - Convert a .config file into a C config.h file # mkconfig - Convert a .config file into a C config.h file
mkconfig$(HOSTEXEEXT): mkconfig.c cfgparser.c mkconfig$(HOSTEXEEXT): mkconfig.c cfgdefine.c
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkconfig$(HOSTEXEEXT) mkconfig.c cfgparser.c $(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkconfig$(HOSTEXEEXT) mkconfig.c cfgdefine.c
ifdef HOSTEXEEXT ifdef HOSTEXEEXT
mkconfig: mkconfig$(HOSTEXEEXT) mkconfig: mkconfig$(HOSTEXEEXT)
@@ -90,8 +98,8 @@ endif
# mkversion - Convert a .version file into a C version.h file # mkversion - Convert a .version file into a C version.h file
mkversion$(HOSTEXEEXT): mkconfig.c cfgparser.c mkversion$(HOSTEXEEXT): mkconfig.c cfgdefine.c
$(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkversion$(HOSTEXEEXT) mkversion.c cfgparser.c $(Q) $(HOSTCC) $(HOSTCFLAGS) -o mkversion$(HOSTEXEEXT) mkversion.c cfgdefine.c
ifdef HOSTEXEEXT ifdef HOSTEXEEXT
mkversion: mkversion$(HOSTEXEEXT) mkversion: mkversion$(HOSTEXEEXT)
+2 -2
View File
@@ -38,7 +38,7 @@ discover.py
Example script for discovering devices in the local network. Example script for discovering devices in the local network.
It is the counter part to apps/netutils/discover It is the counter part to apps/netutils/discover
mkconfig.c, cfgparser.c, and cfgparser.h mkconfig.c, cfgdefine.c, and cfgdefine.h
---------------------------------------- ----------------------------------------
These are Cs file that are used to build mkconfig program. The mkconfig These are Cs file that are used to build mkconfig program. The mkconfig
@@ -79,7 +79,7 @@ mkfsdata.pl
NOTE: This perl script comes from uIP and was (probably) written NOTE: This perl script comes from uIP and was (probably) written
by Adam Dunkels. uIP has a license that is compatible with NuttX. by Adam Dunkels. uIP has a license that is compatible with NuttX.
mkversion.c, cfgparser.c, and cfgparser.h mkversion.c, cfgdefine.c, and cfgdefine.h
----------------------------------------- -----------------------------------------
This is C file that is used to build mkversion program. The mkversion This is C file that is used to build mkversion program. The mkversion
+322
View File
@@ -0,0 +1,322 @@
/****************************************************************************
* tools/cfgdefine.c
*
* Copyright (C) 2007-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* 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 OWNER 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.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <string.h>
#include <ctype.h>
#include "cfgdefine.h"
/****************************************************************************
* Definitions
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
char line[LINESIZE+1];
/****************************************************************************
* Private Data
****************************************************************************/
/* These are configuration variable name that are quoted by configuration tool
* but which must be unquoted when used in C code.
*/
static const char *dequote_list[] =
{
/* NuttX */
"CONFIG_USER_ENTRYPOINT", /* Name of entry point function */
/* NxWidgets/NxWM */
"CONFIG_NXWM_BACKGROUND_IMAGE", /* Name of bitmap image class */
"CONFIG_NXWM_STARTWINDOW_ICON", /* Name of bitmap image class */
"CONFIG_NXWM_NXCONSOLE_ICON", /* Name of bitmap image class */
"CONFIG_NXWM_CALIBRATION_ICON", /* Name of bitmap image class */
"CONFIG_NXWM_HEXCALCULATOR_ICON", /* Name of bitmap image class */
NULL /* Marks the end of the list */
};
/****************************************************************************
* Private Functions
****************************************************************************/
/* Skip over any spaces */
static char *skip_space(char *ptr)
{
while (*ptr && isspace((int)*ptr)) ptr++;
return ptr;
}
/* Find the end of a variable string */
static char *find_name_end(char *ptr)
{
while (*ptr && (isalnum((int)*ptr) || *ptr == '_')) ptr++;
return ptr;
}
/* Find the end of a value string */
static char *find_value_end(char *ptr)
{
while (*ptr && !isspace((int)*ptr))
{
if (*ptr == '"')
{
do ptr++; while (*ptr && *ptr != '"');
if (*ptr) ptr++;
}
else
{
do ptr++; while (*ptr && !isspace((int)*ptr) && *ptr != '"');
}
}
return ptr;
}
/* Read the next line from the configuration file */
static char *read_line(FILE *stream)
{
char *ptr;
for (;;)
{
line[LINESIZE] = '\0';
if (!fgets(line, LINESIZE, stream))
{
return NULL;
}
else
{
ptr = skip_space(line);
if (*ptr && *ptr != '#' && *ptr != '\n')
{
return ptr;
}
}
}
}
/* Parse the line from the configuration file into a variable name
* string and a value string.
*/
static void parse_line(char *ptr, char **varname, char **varval)
{
/* Skip over any leading spaces */
ptr = skip_space(ptr);
/* The first no-space is the beginning of the variable name */
*varname = skip_space(ptr);
*varval = NULL;
/* Parse to the end of the variable name */
ptr = find_name_end(ptr);
/* An equal sign is expected next, perhaps after some white space */
if (*ptr && *ptr != '=')
{
/* Some else follows the variable name. Terminate the variable
* name and skip over any spaces.
*/
*ptr = '\0';
ptr = skip_space(ptr + 1);
}
/* Verify that the equal sign is present */
if (*ptr == '=')
{
/* Make sure that the variable name is terminated (this was already
* done if the name was followed by white space.
*/
*ptr = '\0';
/* The variable value should follow =, perhaps separated by some
* white space.
*/
ptr = skip_space(ptr + 1);
if (*ptr)
{
/* Yes.. a variable follows. Save the pointer to the start
* of the variable string.
*/
*varval = ptr;
/* Find the end of the variable string and make sure that it
* is terminated.
*/
ptr = find_value_end(ptr);
*ptr = '\0';
}
}
}
static char *dequote_value(const char *varname, char *varval)
{
const char **dqnam;
char *dqval = varval;
int len;
if (dqval)
{
/* Check if the variable name is in the list of strings to be dequoated */
for (dqnam = dequote_list; *dqnam; dqnam++)
{
if (strcmp(*dqnam, varname) == 0)
{
break;
}
}
/* Did we find the variable name in the list of configuration variables
* to be dequoated?
*/
if (*dqnam)
{
/* Yes... Check if there is a traiing quote */
len = strlen(dqval);
if (dqval[len-1] == '"')
{
/* Yes... replace it with a terminator */
dqval[len-1] = '\0';
len--;
}
/* Is there a leading quote? */
if (dqval[0] == '"')
{
/* Yes.. skip over the leading quote */
dqval++;
len--;
}
/* Handle the case where nothing is left after dequoting */
if (len <= 0)
{
dqval = NULL;
}
}
}
return dqval;
}
/****************************************************************************
* Public Functions
****************************************************************************/
void generate_definitions(FILE *stream)
{
char *varname;
char *varval;
char *ptr;
/* Loop until the entire file has been parsed. */
do
{
/* Read the next line from the file */
ptr = read_line(stream);
if (ptr)
{
/* Parse the line into a variable and a value field */
parse_line(ptr, &varname, &varval);
/* Was a variable name found? */
if (varname)
{
/* Yes.. dequote the value if necessary */
varval = dequote_value(varname, varval);
/* If no value was provided or if the special value 'n' was provided,
* then undefine the configuration variable.
*/
if (!varval || strcmp(varval, "n") == 0)
{
printf("#undef %s\n", varname);
}
/* Simply define the configuration variable if it has the special
* value "y"
*/
else if (strcmp(varval, "y") == 0)
{
printf("#define %s 1\n", varname);
}
/* Otherwise, use the value as provided */
else
{
printf("#define %s %s\n", varname, varval);
}
}
}
}
while (ptr);
}
+64
View File
@@ -0,0 +1,64 @@
/****************************************************************************
* tools/cfgdefine.h
*
* Copyright (C) 2007-2011 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* 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 OWNER 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 __TOOLS_CFGDEFINE_H
#define __TOOLS_CFGDEFINE_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <stdio.h>
#include <limits.h>
/****************************************************************************
* Definitions
****************************************************************************/
#define LINESIZE ( PATH_MAX > 256 ? PATH_MAX : 256 )
/****************************************************************************
* Public Data
****************************************************************************/
extern char line[LINESIZE+1];
/****************************************************************************
* Public Functions
****************************************************************************/
extern void generate_definitions(FILE *stream);
#endif /* __TOOLS_CFGDEFINE_H */
+2 -2
View File
@@ -41,7 +41,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include "cfgparser.h" #include "cfgdefine.h"
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@@ -99,7 +99,7 @@ int main(int argc, char **argv, char **envp)
printf("#ifndef __INCLUDE_NUTTX_CONFIG_H\n"); printf("#ifndef __INCLUDE_NUTTX_CONFIG_H\n");
printf("#define __INCLUDE_NUTTX_CONFIG_H\n\n"); printf("#define __INCLUDE_NUTTX_CONFIG_H\n\n");
printf("/* Architecture-specific options *************************/\n\n"); printf("/* Architecture-specific options *************************/\n\n");
parse_file(stream); generate_definitions(stream);
printf("\n/* Sanity Checks *****************************************/\n\n"); printf("\n/* Sanity Checks *****************************************/\n\n");
printf("/* If this is an NXFLAT, external build, then make sure that\n"); printf("/* If this is an NXFLAT, external build, then make sure that\n");
printf(" * NXFLAT support is enabled in the base code.\n"); printf(" * NXFLAT support is enabled in the base code.\n");
+2 -2
View File
@@ -41,7 +41,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <errno.h> #include <errno.h>
#include "cfgparser.h" #include "cfgdefine.h"
/**************************************************************************** /****************************************************************************
* Definitions * Definitions
@@ -98,7 +98,7 @@ int main(int argc, char **argv, char **envp)
printf("/* version.h -- Autogenerated! Do not edit. */\n\n"); printf("/* version.h -- Autogenerated! Do not edit. */\n\n");
printf("#ifndef __INCLUDE_NUTTX_VERSION_H\n"); printf("#ifndef __INCLUDE_NUTTX_VERSION_H\n");
printf("#define __INCLUDE_NUTTX_VERSION_H\n\n"); printf("#define __INCLUDE_NUTTX_VERSION_H\n\n");
parse_file(stream); generate_definitions(stream);
printf("\n#define CONFIG_VERSION ((CONFIG_VERSION_MAJOR << 8) | (CONFIG_VERSION_MINOR))\n\n"); printf("\n#define CONFIG_VERSION ((CONFIG_VERSION_MAJOR << 8) | (CONFIG_VERSION_MINOR))\n\n");
printf("#endif /* __INCLUDE_NUTTX_VERSION_H */\n"); printf("#endif /* __INCLUDE_NUTTX_VERSION_H */\n");
fclose(stream); fclose(stream);