fix build on Solaris 10
Solaris 10 is too old for POSIX.2008, thus wcsdup() is missing
This commit is contained in:
parent
1888f89375
commit
d648e92188
|
@ -1,8 +1,12 @@
|
||||||
# 2016, Georg Sauthoff <mail@georg.so>
|
# 2016, Georg Sauthoff <mail@georg.so>
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
project(somake C CXX)
|
project(somake C CXX)
|
||||||
|
|
||||||
|
include(CheckFunctionExists)
|
||||||
|
check_function_exists(wcsdup HAVE_WCSDUP)
|
||||||
|
configure_file(config.h.in config.h)
|
||||||
|
|
||||||
add_library(mksh STATIC
|
add_library(mksh STATIC
|
||||||
lib/mksh/dosys.cc lib/mksh/globals.cc lib/mksh/i18n.cc lib/mksh/macro.cc
|
lib/mksh/dosys.cc lib/mksh/globals.cc lib/mksh/i18n.cc lib/mksh/macro.cc
|
||||||
lib/mksh/misc.cc lib/mksh/mksh.cc lib/mksh/read.cc
|
lib/mksh/misc.cc lib/mksh/mksh.cc lib/mksh/read.cc
|
||||||
|
@ -25,12 +29,14 @@ add_executable(${PROJECT_NAME}
|
||||||
bin/main.cc bin/misc.cc bin/nse_printdep.cc bin/parallel.cc
|
bin/main.cc bin/misc.cc bin/nse_printdep.cc bin/parallel.cc
|
||||||
bin/pmake.cc bin/read.cc bin/read2.cc bin/rep.cc
|
bin/pmake.cc bin/read.cc bin/read2.cc bin/rep.cc
|
||||||
bin/state.cc
|
bin/state.cc
|
||||||
comp/progname.c
|
lib/bsd/bsd.cc
|
||||||
|
comp/progname.c comp/wcsdup.c
|
||||||
)
|
)
|
||||||
|
|
||||||
set_property(TARGET ${PROJECT_NAME} mksh vroot PROPERTY INCLUDE_DIRECTORIES
|
set_property(TARGET ${PROJECT_NAME} mksh vroot PROPERTY INCLUDE_DIRECTORIES
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/include
|
${CMAKE_CURRENT_SOURCE_DIR}/include
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
|
${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME}
|
target_link_libraries(${PROJECT_NAME}
|
||||||
|
|
14
README.md
14
README.md
|
@ -267,6 +267,11 @@ Although those changes target Linux, they aren't really Linux
|
||||||
specific. That means that the ported make should also compile on
|
specific. That means that the ported make should also compile on
|
||||||
other modern [POSIXy][posix] operating systems.
|
other modern [POSIXy][posix] operating systems.
|
||||||
|
|
||||||
|
So far, the port was successfully tested under:
|
||||||
|
|
||||||
|
- Fedora 23/x86-64
|
||||||
|
- Solaris 10/SPARC
|
||||||
|
|
||||||
|
|
||||||
## Naming
|
## Naming
|
||||||
|
|
||||||
|
@ -306,6 +311,14 @@ differently, e.g.:
|
||||||
-- Installing: dest/usr/bin/somake
|
-- Installing: dest/usr/bin/somake
|
||||||
[..]
|
[..]
|
||||||
|
|
||||||
|
### Tweaks
|
||||||
|
|
||||||
|
If you are compiling on a legacy platform with ancient libraries
|
||||||
|
you may need to tweak the cmake call a little bit. For example,
|
||||||
|
to compile with GCC on a Solaris 10 system:
|
||||||
|
|
||||||
|
$ CC=gcc CXX=g++ LDFLAGS='-lnsl /opt/csw/lib/libintl.so.8' \
|
||||||
|
cmake -DCMAKE_BUILD_TYPE=Release ../somake
|
||||||
|
|
||||||
### Manual Installation
|
### Manual Installation
|
||||||
|
|
||||||
|
@ -329,6 +342,7 @@ the following order:
|
||||||
5. `/usr/share/lib/make/make.rules`
|
5. `/usr/share/lib/make/make.rules`
|
||||||
6. `/etc/default/make.rules`
|
6. `/etc/default/make.rules`
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
Perhaps not required by the CDDL, but I license my changes
|
Perhaps not required by the CDDL, but I license my changes
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
|
|
||||||
#include <comp/progname.h>
|
#include <comp/progname.h>
|
||||||
|
#include <comp/wcsdup.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* typedefs & structs
|
* typedefs & structs
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
|
|
||||||
#include <comp/progname.h>
|
#include <comp/progname.h>
|
||||||
|
#include <comp/wcsdup.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defined macros
|
* Defined macros
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#include <mksh/misc.h> /* retmem() */
|
#include <mksh/misc.h> /* retmem() */
|
||||||
#include <vroot/report.h> /* NSE_DEPINFO */
|
#include <vroot/report.h> /* NSE_DEPINFO */
|
||||||
|
|
||||||
|
#include <comp/wcsdup.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Static variables
|
* Static variables
|
||||||
*/
|
*/
|
||||||
|
|
16
comp/wcsdup.c
Normal file
16
comp/wcsdup.c
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
// 2016, Georg Sauthoff <mail@georg.so>, CDDL and WTFPL
|
||||||
|
#include "wcsdup.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WCSDUP
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
// this function is part of POSIX.2008
|
||||||
|
wchar_t * wcsdup(const wchar_t *s)
|
||||||
|
{
|
||||||
|
size_t n = wcslen(s) + 1;
|
||||||
|
wchar_t r = malloc(n * sizeof(wchar_t));
|
||||||
|
return r ? return wmemcpy(r, s, n) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
19
comp/wcsdup.h
Normal file
19
comp/wcsdup.h
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
// 2016, Georg Sauthoff <mail@georg.so>, CDDL
|
||||||
|
#ifndef COMPAT_WCSDUP_H
|
||||||
|
#define COMPAT_WCSDUP_H
|
||||||
|
|
||||||
|
#include <wchar.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#ifndef HAVE_WCSDUP
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
wchar_t * wcsdup (const wchar_t *s);
|
||||||
|
#if defined(__cplusplus)
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
7
config.h.in
Normal file
7
config.h.in
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// 2016, Georg Sauthoff <mail@georg.so>, CDDL and WTFPL
|
||||||
|
#ifndef SOMAKE_CONFIG_H
|
||||||
|
#define SOMAKE_CONFIG_H
|
||||||
|
|
||||||
|
#cmakedefine HAVE_WCSDUP 1
|
||||||
|
|
||||||
|
#endif
|
|
@ -23,6 +23,7 @@
|
||||||
* Use is subject to license terms.
|
* Use is subject to license terms.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(__sun)
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
@ -71,3 +72,5 @@ bsd_signals (void)
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -41,6 +41,8 @@
|
||||||
|
|
||||||
#include <libintl.h>
|
#include <libintl.h>
|
||||||
|
|
||||||
|
#include <comp/wcsdup.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* File table of contents
|
* File table of contents
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in a new issue