VirtualBox

Changeset 3394 in kBuild for trunk/src


Ignore:
Timestamp:
Jul 1, 2020 8:24:52 PM (5 years ago)
Author:
bird
Message:

kmk: Added version sort function: versort, rversort, versortfiles, rversortfiles, qversortfiles, qrversortfiles. Try get the real host version on windows by using RtlGetVersion.

Location:
trunk/src
Files:
2 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/Makefile.am

    r3259 r3394  
    6363                ../lib/dos2unix.c \
    6464                ../lib/maybe_con_fwrite.c \
     65                ../lib/version_compare.c \
    6566                \
    6667                kmkbuiltin.c \
  • trunk/src/kmk/Makefile.kmk

    r3352 r3394  
    7878ifdef GCC_SANITIZERS
    7979 TEMPLATE_BIN-KMK_CFLAGS  ?= $(TEMPLATE_BIN-THREADED_CFLAGS)
    80  TEMPLATE_BIN-KMK_CFLAGS  += -fsanitize=address -fsanitize=undefined -static-libubsan -D GCC_ADDRESS_SANITIZER
     80# TEMPLATE_BIN-KMK_CFLAGS  += -fsanitize=address -fsanitize=undefined -static-libubsan -D GCC_ADDRESS_SANITIZER
     81 TEMPLATE_BIN-KMK_CFLAGS  += -fsanitize=address -fsanitize=undefined -D GCC_ADDRESS_SANITIZER
    8182 TEMPLATE_BIN-KMK_LDFLAGS ?= $(TEMPLATE_BIN-THREADED_LDFLAGS)
    8283 TEMPLATE_BIN-KMK_LDFLAGS += -fsanitize=address -fsanitize=undefined
  • trunk/src/kmk/function.c

    r3389 r3394  
    9090#  include "kmkbuiltin/mscfakes.h"
    9191# endif
     92# include "version_compare.h"
    9293#endif
    9394
     
    17661767}
    17671768
     1769#ifdef KMK
     1770/* Compare strings *S1 and *S2.
     1771   Return negative if the first is less, positive if it is greater,
     1772   zero if they are equal.  */
     1773
     1774static int
     1775version_compare_wrapper (const void *v1, const void *v2)
     1776{
     1777  const char *s1 = *((char **)v1);
     1778  const char *s2 = *((char **)v2);
     1779  return version_compare (s1, s2);
     1780}
     1781#endif /* KMK */
    17681782
    17691783/*
     
    18061820
    18071821      /* Now sort the list of words.  */
     1822#ifdef KMK
     1823      if (funcname[0] == 'v' || funcname[1] == 'v')
     1824        qsort (words, wordi, sizeof (char *), version_compare_wrapper);
     1825      else
     1826        qsort (words, wordi, sizeof (char *), alpha_compare);
     1827#else
    18081828      qsort (words, wordi, sizeof (char *), alpha_compare);
     1829#endif
    18091830
    18101831      /* Now write the sorted list, uniquified.  */
    18111832#ifdef CONFIG_WITH_RSORT
    1812       if (strcmp (funcname, "rsort"))
     1833      if (*funcname != 'r')
    18131834        {
    18141835          /* sort */
     
    67826803
    67836804static char *common_sortfiles (char *o, char **argv, unsigned int style,
    6784                                int ascending)
     6805                               int ascending, int version)
    67856806{
    67866807  struct nameseq *chain = helper_parse_file_list (argv[0], style, 0);
     
    68406861{
    68416862  return common_sortfiles (o, argv, Q_IN_QUOTED | Q_RET_QUOTED | Q_SEP_SPACE,
    6842                            funcname[0] != 'r');
     6863                           funcname[0] != 'r',
     6864                           funcname[0] == 'v' || funcname[1] == 'v');
    68436865}
    68446866
     
    68516873{
    68526874  unsigned int const style = helper_file_quoting_style (argv[0], Q_QDEFAULT);
    6853   return common_sortfiles (o, &argv[1], style, funcname[1] != 'r');
     6875  return common_sortfiles (o, &argv[1], style, funcname[1] != 'r',
     6876                           funcname[1] == 'v' || funcname[2] == 'v');
    68546877}
    68556878
     
    68766899    {
    68776900      PATH_VAR (outbuf);
    6878       int doneany = 0;
    68796901      struct nameseq *chain = helper_parse_file_list (line, style, 0);
    68806902
     
    74087430#ifdef CONFIG_WITH_RSORT
    74097431  FT_ENTRY ("rsort",         0,  1,  1,  func_sort),
     7432# ifdef KMK
     7433  FT_ENTRY ("rversort",      0,  1,  1,  func_sort),
     7434# endif
    74107435#endif
    74117436  FT_ENTRY ("shell",         0,  1,  1,  func_shell),
    74127437  FT_ENTRY ("sort",          0,  1,  1,  func_sort),
     7438# ifdef KMK
     7439  FT_ENTRY ("versort",       0,  1,  1,  func_sort),
     7440# endif
    74137441  FT_ENTRY ("strip",         0,  1,  1,  func_strip),
    74147442#ifdef CONFIG_WITH_WHERE_FUNCTION
     
    75707598  FT_ENTRY ("foreachfile",   3,  3, 0, func_foreachfile),
    75717599  FT_ENTRY ("sortfiles",     0,  1, 1, func_sortfiles),
     7600  FT_ENTRY ("versortfiles",  0,  1, 1, func_sortfiles),
    75727601# ifdef CONFIG_WITH_RSORT
    75737602  FT_ENTRY ("rsortfiles",    0,  1, 1, func_sortfiles),
     7603  FT_ENTRY ("rversortfiles", 0,  1, 1, func_sortfiles),
    75747604# endif
    75757605  /* Function variants with preceding style argument and quoting by default. */
     
    75807610  FT_ENTRY ("qforeachfile", 1+3, 1+3, 0, func_q_foreachfile),
    75817611  FT_ENTRY ("qsortfiles",   1+0, 1+1, 1, func_q_sortfiles),
     7612  FT_ENTRY ("qversortfiles",1+0, 1+1, 1, func_q_sortfiles),
    75827613# ifdef CONFIG_WITH_RSORT
    75837614  FT_ENTRY ("qrsortfiles",  1+0, 1+1, 1, func_q_sortfiles),
     7615  FT_ENTRY ("qrversortfiles",1+0,1+1, 1, func_q_sortfiles),
    75847616# endif
    75857617  FT_ENTRY ("qabspath",     1+0, 1+1, 1, func_q_abspath),
  • trunk/src/kmk/variable.c

    r3319 r3394  
    16061606  struct variable *envvar1;
    16071607  struct variable *envvar2;
    1608 # ifdef WINDOWS32
    1609   OSVERSIONINFOEX oix;
    1610 # else
     1608# ifndef WINDOWS32
    16111609  struct utsname uts;
    16121610# endif
     
    16771675
    16781676  /* The host kernel version. */
    1679 #if defined(WINDOWS32)
    1680   memset (&oix, '\0', sizeof (oix));
    1681   oix.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
    1682   if (!GetVersionEx ((LPOSVERSIONINFO)&oix))
    1683     {
    1684       memset (&oix, '\0', sizeof (oix));
    1685       oix.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
    1686       GetVersionEx ((LPOSVERSIONINFO)&oix);
    1687     }
    1688   if (oix.dwPlatformId == VER_PLATFORM_WIN32_NT)
    1689     {
    1690       ulMajor = oix.dwMajorVersion;
    1691       ulMinor = oix.dwMinorVersion;
    1692       ulPatch = oix.wServicePackMajor;
    1693       ul4th   = oix.wServicePackMinor;
    1694     }
    1695   else
    1696     {
    1697       ulMajor = oix.dwPlatformId == 1 ? 0 /*Win95/98/ME*/
    1698               : oix.dwPlatformId == 3 ? 1 /*WinCE*/
    1699               : 2; /*??*/
    1700       ulMinor = oix.dwMajorVersion;
    1701       ulPatch = oix.dwMinorVersion;
    1702       ul4th   = oix.wServicePackMajor;
    1703     }
    1704 #else
     1677# if defined(WINDOWS32)
     1678  {
     1679    OSVERSIONINFOEXW oix;
     1680    typedef NTSTATUS (WINAPI *pfnRtlGetVersion)(OSVERSIONINFOEXW *);
     1681    *(FARPROC *)&pfnRtlGetVersion = GetProcAddress (GetModuleHandleW ("NTDLL.DLL"),
     1682                                                    "RtlGetVersion"); /* GetVersionEx lies */
     1683    memset (&oix, '\0', sizeof (oix));
     1684    oix.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
     1685    if (!pfnRtlGetVersion || pfnRtlGetVersion (&oix) < 0)
     1686      {
     1687        memset (&oix, '\0', sizeof (oix));
     1688        oix.dwOSVersionInfoSize = sizeof (OSVERSIONINFOEX);
     1689        if (!GetVersionExW((LPOSVERSIONINFO)&oix))
     1690          {
     1691            memset (&oix, '\0', sizeof (oix));
     1692            oix.dwOSVersionInfoSize = sizeof (OSVERSIONINFO);
     1693            GetVersionExW ((LPOSVERSIONINFO)&oix);
     1694          }
     1695      }
     1696    if (oix.dwPlatformId == VER_PLATFORM_WIN32_NT)
     1697      {
     1698        ulMajor = oix.dwMajorVersion;
     1699        ulMinor = oix.dwMinorVersion;
     1700        ulPatch = oix.wServicePackMajor;
     1701        ul4th   = oix.wServicePackMinor;
     1702      }
     1703    else
     1704      {
     1705        ulMajor = oix.dwPlatformId == 1 ? 0 /*Win95/98/ME*/
     1706                : oix.dwPlatformId == 3 ? 1 /*WinCE*/
     1707                : 2; /*??*/
     1708        ulMinor = oix.dwMajorVersion;
     1709        ulPatch = oix.dwMinorVersion;
     1710        ul4th   = oix.wServicePackMajor;
     1711      }
     1712  }
     1713# else
    17051714  memset (&uts, 0, sizeof(uts));
    17061715  uname (&uts);
     
    17161725  define_variable_cname ("KBUILD_HOST_UNAME_MACHINE", uts.machine, o_default, 0);
    17171726  define_variable_cname ("KBUILD_HOST_UNAME_NODENAME", uts.nodename, o_default, 0);
    1718 #endif
     1727# endif
    17191728
    17201729  sprintf (buf, "%lu.%lu.%lu.%lu", ulMajor, ulMinor, ulPatch, ul4th);
     
    17651774  && defined (KMK_HELPERS)
    17661775  define_variable_cname ("KMK_FEATURES",
    1767                          "append-dash-n abspath includedep-queue install-hard-linking umask quote"
     1776                         "append-dash-n abspath includedep-queue install-hard-linking umask quote versort"
    17681777                         " kBuild-define"
    17691778                         " rsort"
     
    17961805# else /* MSC can't deal with strings mixed with #if/#endif, thus the slow way. */
    17971806#  error "All features should be enabled by default!"
    1798   strcpy (buf, "append-dash-n abspath includedep-queue install-hard-linking umask quote"
     1807  strcpy (buf, "append-dash-n abspath includedep-queue install-hard-linking umask quote versort"
    17991808               " kBuild-define");
    18001809#  if defined (CONFIG_WITH_RSORT)
  • trunk/src/kmk/variable.h

    r3140 r3394  
    313313   basic checks in variable_expand_string_2. */
    314314extern char func_char_map[256];
    315 # define MAX_FUNCTION_LENGTH    12
     315# define MAX_FUNCTION_LENGTH    14
    316316# define MIN_FUNCTION_LENGTH    2
    317317K_INLINE const char *may_be_function_name (const char *name, const char *eos)
  • trunk/src/lib/Makefile.kmk

    r3380 r3394  
    4343        is_console.c \
    4444       dos2unix.c \
    45         kbuild_version.c
     45        kbuild_version.c \
     46        version_compare.c
    4647kUtil_SOURCES.win = \
    4748        msc_buffered_printf.c \
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette