Sun, 01 Oct 2023 12:53:35 +0200
add uwproj configure script generator
.hgignore | file | annotate | diff | comparison | revisions | |
Makefile | file | annotate | diff | comparison | revisions | |
configure | file | annotate | diff | comparison | revisions | |
make/cc.mk | file | annotate | diff | comparison | revisions | |
make/configure.vm | file | annotate | diff | comparison | revisions | |
make/project.xml | file | annotate | diff | comparison | revisions | |
make/toolchain.sh | file | annotate | diff | comparison | revisions | |
make/uwproj.xsd | file | annotate | diff | comparison | revisions | |
src/Makefile | file | annotate | diff | comparison | revisions | |
src/chess/Makefile | file | annotate | diff | comparison | revisions | |
src/terminal-chess.h | file | annotate | diff | comparison | revisions |
1.1 --- a/.hgignore Tue Aug 13 00:33:59 2019 +0200 1.2 +++ b/.hgignore Sun Oct 01 12:53:35 2023 +0200 1.3 @@ -5,3 +5,4 @@ 1.4 \.conflict\~$ 1.5 ^build/.*$ 1.6 ^nbproject/.*$ 1.7 +^config\.mk$
2.1 --- a/Makefile Tue Aug 13 00:33:59 2019 +0200 2.2 +++ b/Makefile Sun Oct 01 12:53:35 2023 +0200 2.3 @@ -26,21 +26,14 @@ 2.4 # POSSIBILITY OF SUCH DAMAGE. 2.5 # 2.6 2.7 -include conf.mk 2.8 +include config.mk 2.9 2.10 -ROOTDIR=$(shell pwd) 2.11 +all: $(BUILDDIR) 2.12 + cd src; $(MAKE) 2.13 2.14 -all: chess 2.15 - cd src; $(MAKE) BUILDDIR=$(ROOTDIR)/build/release 2.16 +$(BUILDDIR): 2.17 + $(MKDIR) $(MKDIRFLAGS) $(BUILDDIR) 2.18 2.19 -debug: chess-debug 2.20 - cd src; $(MAKE) BUILDDIR=$(ROOTDIR)/build/debug CFLAGS="${CFLAGS_D}" 2.21 +clean: 2.22 + $(RM) $(RMFLAGS) $(BUILDDIR) 2.23 2.24 -chess: 2.25 - cd src/chess; $(MAKE) BUILDDIR=$(ROOTDIR)/build/release 2.26 - 2.27 -chess-debug: 2.28 - cd src/chess; $(MAKE) BUILDDIR=$(ROOTDIR)/build/debug CFLAGS="${CFLAGS_D}" 2.29 - 2.30 -clean: 2.31 - $(RM) $(RMFLAGS) build
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/configure Sun Oct 01 12:53:35 2023 +0200 3.3 @@ -0,0 +1,431 @@ 3.4 +#!/bin/sh 3.5 + 3.6 +# create temporary directory 3.7 +TEMP_DIR=".tmp-`uname -n`" 3.8 +rm -Rf "$TEMP_DIR" 3.9 +if mkdir -p "$TEMP_DIR"; then 3.10 + : 3.11 +else 3.12 + echo "Cannot create tmp dir $TEMP_DIR" 3.13 + echo "Abort" 3.14 + exit 1 3.15 +fi 3.16 +touch "$TEMP_DIR/options" 3.17 +touch "$TEMP_DIR/features" 3.18 + 3.19 +# define standard variables 3.20 +PREFIX=/usr 3.21 +EPREFIX= 3.22 +BINDIR= 3.23 +SBINDIR= 3.24 +LIBDIR= 3.25 +LIBEXECDIR= 3.26 +DATADIR= 3.27 +SYSCONFDIR= 3.28 +SHAREDSTATEDIR= 3.29 +LOCALSTATEDIR= 3.30 +INCLUDEDIR= 3.31 +INFODIR= 3.32 +MANDIR= 3.33 + 3.34 +# custom variables 3.35 +BUILDDIR=`pwd`/build 3.36 + 3.37 +# features 3.38 + 3.39 +# clean abort 3.40 +abort_configure() 3.41 +{ 3.42 + rm -Rf "$TEMP_DIR" 3.43 + exit 1 3.44 +} 3.45 + 3.46 +# help text 3.47 +printhelp() 3.48 +{ 3.49 + echo "Usage: $0 [OPTIONS]..." 3.50 + cat << __EOF__ 3.51 +Installation directories: 3.52 + --prefix=PREFIX path prefix for architecture-independent files 3.53 + [/usr] 3.54 + --exec-prefix=EPREFIX path prefix for architecture-dependent files 3.55 + [PREFIX] 3.56 + 3.57 + --bindir=DIR user executables [EPREFIX/bin] 3.58 + --sbindir=DIR system admin executables [EPREFIX/sbin] 3.59 + --libexecdir=DIR program executables [EPREFIX/libexec] 3.60 + --sysconfdir=DIR system configuration files [PREFIX/etc] 3.61 + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 3.62 + --localstatedir=DIR modifiable single-machine data [PREFIX/var] 3.63 + --libdir=DIR object code libraries [EPREFIX/lib] 3.64 + --includedir=DIR C header files [PREFIX/include] 3.65 + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] 3.66 + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] 3.67 + --infodir=DIR info documentation [DATAROOTDIR/info] 3.68 + --mandir=DIR man documentation [DATAROOTDIR/man] 3.69 + 3.70 +__EOF__ 3.71 +} 3.72 + 3.73 +# 3.74 +# parse arguments 3.75 +# 3.76 +BUILD_TYPE="default" 3.77 +for ARG in "$@" 3.78 +do 3.79 + case "$ARG" in 3.80 + "--prefix="*) PREFIX=${ARG#--prefix=} ;; 3.81 + "--exec-prefix="*) EPREFIX=${ARG#--exec-prefix=} ;; 3.82 + "--bindir="*) BINDIR=${ARG#----bindir=} ;; 3.83 + "--sbindir="*) SBINDIR=${ARG#--sbindir=} ;; 3.84 + "--libdir="*) LIBDIR=${ARG#--libdir=} ;; 3.85 + "--libexecdir="*) LIBEXECDIR=${ARG#--libexecdir=} ;; 3.86 + "--datadir="*) DATADIR=${ARG#--datadir=} ;; 3.87 + "--sysconfdir="*) SYSCONFDIR=${ARG#--sysconfdir=} ;; 3.88 + "--sharedstatedir="*) SHAREDSTATEDIR=${ARG#--sharedstatedir=} ;; 3.89 + "--localstatedir="*) LOCALSTATEDIR=${ARG#--localstatedir=} ;; 3.90 + "--includedir="*) INCLUDEDIR=${ARG#--includedir=} ;; 3.91 + "--infodir="*) INFODIR=${ARG#--infodir=} ;; 3.92 + "--mandir"*) MANDIR=${ARG#--mandir} ;; 3.93 + "--help"*) printhelp; abort_configure ;; 3.94 + "--debug") BUILD_TYPE="debug" ;; 3.95 + "--release") BUILD_TYPE="release" ;; 3.96 + "-"*) echo "unknown option: $ARG"; abort_configure ;; 3.97 + esac 3.98 +done 3.99 + 3.100 + 3.101 +# set dir variables 3.102 +: ${EPREFIX:="$PREFIX"} 3.103 +: ${BINDIR:="$EPREFIX/bin"} 3.104 +: ${SBINDIR:="$EPREFIX/sbin"} 3.105 +: ${LIBDIR:="$EPREFIX/lib"} 3.106 +: ${LIBEXECDIR:="$EPREFIX/libexec"} 3.107 +: ${DATADIR:="$PREFIX/share"} 3.108 +: ${SYSCONFDIR:="$PREFIX/etc"} 3.109 +: ${SHAREDSTATEDIR:="$PREFIX/com"} 3.110 +: ${LOCALSTATEDIR:="$PREFIX/var"} 3.111 +: ${INCLUDEDIR:="$PREFIX/include"} 3.112 +: ${INFODIR:="$PREFIX/info"} 3.113 +: ${MANDIR:="$PREFIX/man"} 3.114 + 3.115 +# Test for availability of pkg-config 3.116 +PKG_CONFIG=`command -v pkg-config` 3.117 +: ${PKG_CONFIG:="false"} 3.118 + 3.119 +# Simple uname based platform detection 3.120 +# $PLATFORM is used for platform dependent dependency selection 3.121 +OS=`uname -s` 3.122 +OS_VERSION=`uname -r` 3.123 +printf "detect platform... " 3.124 +if [ "$OS" = "SunOS" ]; then 3.125 + PLATFORM="solaris sunos unix svr4" 3.126 +fi 3.127 +if [ "$OS" = "Linux" ]; then 3.128 + PLATFORM="linux unix" 3.129 +fi 3.130 +if [ "$OS" = "FreeBSD" ]; then 3.131 + PLATFORM="freebsd bsd unix" 3.132 +fi 3.133 +if [ "$OS" = "Darwin" ]; then 3.134 + PLATFORM="macos osx bsd unix" 3.135 +fi 3.136 +if echo "$OS" | grep -i "MINGW" > /dev/null; then 3.137 + PLATFORM="windows mingw" 3.138 +fi 3.139 +: ${PLATFORM:="unix"} 3.140 + 3.141 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -` 3.142 +echo "$PLATFORM_NAME" 3.143 + 3.144 +isplatform() 3.145 +{ 3.146 + for p in $PLATFORM 3.147 + do 3.148 + if [ "$p" = "$1" ]; then 3.149 + return 0 3.150 + fi 3.151 + done 3.152 + return 1 3.153 +} 3.154 +notisplatform() 3.155 +{ 3.156 + for p in $PLATFORM 3.157 + do 3.158 + if [ "$p" = "$1" ]; then 3.159 + return 1 3.160 + fi 3.161 + done 3.162 + return 0 3.163 +} 3.164 + 3.165 + 3.166 +# generate vars.mk 3.167 +cat > "$TEMP_DIR/vars.mk" << __EOF__ 3.168 +PREFIX=$PREFIX 3.169 +EPREFIX=$EPREFIX 3.170 +BINDIR=$BINDIR 3.171 +SBINDIR=$SBINDIR 3.172 +LIBDIR=$LIBDIR 3.173 +LIBEXECDIR=$LIBEXECDIR 3.174 +DATADIR=$DATADIR 3.175 +SYSCONFDIR=$SYSCONFDIR 3.176 +SHAREDSTATEDIR=$SHAREDSTATEDIR 3.177 +LOCALSTATEDIR=$LOCALSTATEDIR 3.178 +INCLUDEDIR=$INCLUDEDIR 3.179 +INFODIR=$INFODIR 3.180 +MANDIR=$MANDIR 3.181 +BUILDDIR=$BUILDDIR 3.182 +__EOF__ 3.183 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk" 3.184 + 3.185 + 3.186 +# toolchain detection utilities 3.187 +. make/toolchain.sh 3.188 + 3.189 +# 3.190 +# DEPENDENCIES 3.191 +# 3.192 + 3.193 +# check languages 3.194 +lang_c= 3.195 +lang_cpp= 3.196 +if detect_c_compiler ; then 3.197 + lang_c=1 3.198 +fi 3.199 + 3.200 +# create buffer for make variables required by dependencies 3.201 +echo > "$TEMP_DIR/make.mk" 3.202 + 3.203 +test_pkg_config() 3.204 +{ 3.205 + if "$PKG_CONFIG" --exists "$1" ; then : 3.206 + else return 1 ; fi 3.207 + if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then : 3.208 + else return 1 ; fi 3.209 + if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then : 3.210 + else return 1 ; fi 3.211 + if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then : 3.212 + else return 1 ; fi 3.213 + return 0 3.214 +} 3.215 + 3.216 +dependency_error_archiver() 3.217 +{ 3.218 + printf "checking for archiver... " 3.219 + # dependency archiver 3.220 + while true 3.221 + do 3.222 + if command -v ar > /dev/null ; then 3.223 + : 3.224 + else 3.225 + break 3.226 + fi 3.227 + cat >> $TEMP_DIR/make.mk << __EOF__ 3.228 +# Dependency: archiver 3.229 +AR = ar 3.230 +ARFLAGS = -r 3.231 + 3.232 +__EOF__ 3.233 + echo yes 3.234 + return 1 3.235 + done 3.236 + 3.237 + echo no 3.238 + return 0 3.239 +} 3.240 +dependency_error_rmdir() 3.241 +{ 3.242 + printf "checking for rmdir... " 3.243 + # dependency rmdir 3.244 + while true 3.245 + do 3.246 + if command -v rm > /dev/null ; then 3.247 + : 3.248 + else 3.249 + break 3.250 + fi 3.251 + cat >> $TEMP_DIR/make.mk << __EOF__ 3.252 +# Dependency: rmdir 3.253 +RM = rm 3.254 +RMFLAGS = -f -R 3.255 + 3.256 +__EOF__ 3.257 + echo yes 3.258 + return 1 3.259 + done 3.260 + 3.261 + echo no 3.262 + return 0 3.263 +} 3.264 +dependency_error_ncurses() 3.265 +{ 3.266 + printf "checking for ncurses... " 3.267 + # dependency ncurses 3.268 + while true 3.269 + do 3.270 + if [ -z "$PKG_CONFIG" ]; then 3.271 + break 3.272 + fi 3.273 + if test_pkg_config "ncursesw" "" "" "" ; then 3.274 + TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags ncursesw`" 3.275 + TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs ncursesw`" 3.276 + else 3.277 + break 3.278 + fi 3.279 + echo yes 3.280 + return 1 3.281 + done 3.282 + 3.283 + echo no 3.284 + return 0 3.285 +} 3.286 +dependency_error_mkdir() 3.287 +{ 3.288 + printf "checking for mkdir... " 3.289 + # dependency mkdir 3.290 + while true 3.291 + do 3.292 + if command -v mkdir > /dev/null ; then 3.293 + : 3.294 + else 3.295 + break 3.296 + fi 3.297 + cat >> $TEMP_DIR/make.mk << __EOF__ 3.298 +# Dependency: mkdir 3.299 +MKDIR = mkdir 3.300 +MKDIRFLAGS = -p 3.301 + 3.302 +__EOF__ 3.303 + echo yes 3.304 + return 1 3.305 + done 3.306 + 3.307 + echo no 3.308 + return 0 3.309 +} 3.310 + 3.311 + 3.312 + 3.313 + 3.314 +# start collecting dependency information 3.315 +echo > "$TEMP_DIR/flags.mk" 3.316 + 3.317 +DEPENDENCIES_FAILED= 3.318 +ERROR=0 3.319 +# unnamed dependencies 3.320 +TEMP_CFLAGS= 3.321 +TEMP_CXXFLAGS= 3.322 +TEMP_LDFLAGS= 3.323 +while true 3.324 +do 3.325 + while true 3.326 + do 3.327 + if [ -z "$lang_c" ] ; then 3.328 + ERROR=1 3.329 + break 3.330 + fi 3.331 + 3.332 + cat >> "$TEMP_DIR/make.mk" << __EOF__ 3.333 +LIB_EXT = .a 3.334 +OBJ_EXT = .o 3.335 + 3.336 +__EOF__ 3.337 + break 3.338 + done 3.339 + break 3.340 +done 3.341 + 3.342 +# add general dependency flags to flags.mk 3.343 +echo "# general flags" >> "$TEMP_DIR/flags.mk" 3.344 +if [ -n "${TEMP_CFLAGS}" ]; then 3.345 + echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 3.346 +fi 3.347 +if [ -n "${TEMP_CXXFLAGS}" ]; then 3.348 + echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 3.349 +fi 3.350 +if [ -n "${TEMP_LDFLAGS}" ]; then 3.351 + echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 3.352 +fi 3.353 + 3.354 +# 3.355 +# OPTION VALUES 3.356 +# 3.357 + 3.358 +# 3.359 +# TARGETS 3.360 +# 3.361 + 3.362 +echo >> "$TEMP_DIR/flags.mk" 3.363 +# Target: default 3.364 +echo "# flags for target default" >> "$TEMP_DIR/flags.mk" 3.365 +TEMP_CFLAGS= 3.366 +TEMP_CXXFLAGS= 3.367 +TEMP_LDFLAGS= 3.368 + 3.369 +if dependency_error_archiver; then 3.370 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED archiver " 3.371 + ERROR=1 3.372 +fi 3.373 +if dependency_error_rmdir; then 3.374 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED rmdir " 3.375 + ERROR=1 3.376 +fi 3.377 +if dependency_error_ncurses; then 3.378 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ncurses " 3.379 + ERROR=1 3.380 +fi 3.381 +if dependency_error_mkdir; then 3.382 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED mkdir " 3.383 + ERROR=1 3.384 +fi 3.385 + 3.386 +# Features 3.387 + 3.388 + 3.389 +if [ -n "${TEMP_CFLAGS}" ]; then 3.390 + echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 3.391 +fi 3.392 +if [ -n "${TEMP_CXXFLAGS}" ]; then 3.393 + echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 3.394 +fi 3.395 +if [ "$BUILD_TYPE" = "debug" ]; then 3.396 + echo 'CFLAGS += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk" 3.397 + echo 'CXXFLAGS += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk" 3.398 +fi 3.399 +if [ "$BUILD_TYPE" = "release" ]; then 3.400 + echo 'CFLAGS += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk" 3.401 + echo 'CXXFLAGS += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk" 3.402 +fi 3.403 +if [ -n "${TEMP_LDFLAGS}" ]; then 3.404 + echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 3.405 +fi 3.406 + 3.407 + 3.408 +# final result 3.409 +if [ $ERROR -ne 0 ]; then 3.410 + echo 3.411 + echo "Error: Unresolved dependencies" 3.412 + echo "$DEPENDENCIES_FAILED" 3.413 + abort_configure 3.414 +fi 3.415 + 3.416 +echo "configure finished" 3.417 +echo 3.418 +echo "Build Config:" 3.419 +echo " PREFIX: $PREFIX" 3.420 +echo " TOOLCHAIN: $TOOLCHAIN_NAME" 3.421 +echo 3.422 + 3.423 +# generate the config.mk file 3.424 +cat > "$TEMP_DIR/config.mk" << __EOF__ 3.425 +# 3.426 +# config.mk generated by configure 3.427 +# 3.428 + 3.429 +__EOF__ 3.430 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk" 3.431 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk 3.432 +rm -Rf "$TEMP_DIR" 3.433 + 3.434 +
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/make/cc.mk Sun Oct 01 12:53:35 2023 +0200 4.3 @@ -0,0 +1,11 @@ 4.4 +# 4.5 +# cc toolchain config 4.6 +# 4.7 + 4.8 +CFLAGS = 4.9 +DEBUG_CC_FLAGS = -g 4.10 +RELEASE_CC_FLAGS = -O3 -DNDEBUG 4.11 +LDFLAGS = 4.12 + 4.13 +SHLIB_CFLAGS = -fPIC 4.14 +SHLIB_LDFLAGS = -shared 4.15 \ No newline at end of file
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/make/configure.vm Sun Oct 01 12:53:35 2023 +0200 5.3 @@ -0,0 +1,597 @@ 5.4 +#!/bin/sh 5.5 + 5.6 +# create temporary directory 5.7 +TEMP_DIR=".tmp-`uname -n`" 5.8 +rm -Rf "$TEMP_DIR" 5.9 +if mkdir -p "$TEMP_DIR"; then 5.10 + : 5.11 +else 5.12 + echo "Cannot create tmp dir $TEMP_DIR" 5.13 + echo "Abort" 5.14 + exit 1 5.15 +fi 5.16 +touch "$TEMP_DIR/options" 5.17 +touch "$TEMP_DIR/features" 5.18 + 5.19 +# define standard variables 5.20 +PREFIX=/usr 5.21 +EPREFIX= 5.22 +BINDIR= 5.23 +SBINDIR= 5.24 +LIBDIR= 5.25 +LIBEXECDIR= 5.26 +DATADIR= 5.27 +SYSCONFDIR= 5.28 +SHAREDSTATEDIR= 5.29 +LOCALSTATEDIR= 5.30 +INCLUDEDIR= 5.31 +INFODIR= 5.32 +MANDIR= 5.33 + 5.34 +# custom variables 5.35 +#foreach( $var in $vars ) 5.36 +#if( $var.exec ) 5.37 +${var.varName}=`${var.value}` 5.38 +#else 5.39 +${var.varName}=${var.value} 5.40 +#end 5.41 +#end 5.42 + 5.43 +# features 5.44 +#foreach( $feature in $features ) 5.45 +#if( ${feature.isDefault()} ) 5.46 +${feature.getVarName()}=auto 5.47 +#end 5.48 +#end 5.49 + 5.50 +# clean abort 5.51 +abort_configure() 5.52 +{ 5.53 + rm -Rf "$TEMP_DIR" 5.54 + exit 1 5.55 +} 5.56 + 5.57 +# help text 5.58 +printhelp() 5.59 +{ 5.60 + echo "Usage: $0 [OPTIONS]..." 5.61 + cat << __EOF__ 5.62 +Installation directories: 5.63 + --prefix=PREFIX path prefix for architecture-independent files 5.64 + [/usr] 5.65 + --exec-prefix=EPREFIX path prefix for architecture-dependent files 5.66 + [PREFIX] 5.67 + 5.68 + --bindir=DIR user executables [EPREFIX/bin] 5.69 + --sbindir=DIR system admin executables [EPREFIX/sbin] 5.70 + --libexecdir=DIR program executables [EPREFIX/libexec] 5.71 + --sysconfdir=DIR system configuration files [PREFIX/etc] 5.72 + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 5.73 + --localstatedir=DIR modifiable single-machine data [PREFIX/var] 5.74 + --libdir=DIR object code libraries [EPREFIX/lib] 5.75 + --includedir=DIR C header files [PREFIX/include] 5.76 + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] 5.77 + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] 5.78 + --infodir=DIR info documentation [DATAROOTDIR/info] 5.79 + --mandir=DIR man documentation [DATAROOTDIR/man] 5.80 + 5.81 +#if( $options.size() > 0 ) 5.82 +Options: 5.83 + --debug add extra compile flags for debug builds 5.84 + --release add extra compile flags for release builds 5.85 +#foreach( $opt in $options ) 5.86 + --${opt.getArgument()}=${opt.getValuesString()} 5.87 +#end 5.88 + 5.89 +#end 5.90 +#if( $features.size() > 0 ) 5.91 +Optional Features: 5.92 +#foreach( $feature in $features ) 5.93 +#if( $feature.default ) 5.94 + --disable-${feature.arg} 5.95 +#else 5.96 + --enable-${feature.arg} 5.97 +#end 5.98 +#end 5.99 + 5.100 +#end 5.101 +__EOF__ 5.102 +} 5.103 + 5.104 +# 5.105 +# parse arguments 5.106 +# 5.107 +BUILD_TYPE="default" 5.108 +#set( $D = '$' ) 5.109 +for ARG in "$@" 5.110 +do 5.111 + case "$ARG" in 5.112 + "--prefix="*) PREFIX=${D}{ARG#--prefix=} ;; 5.113 + "--exec-prefix="*) EPREFIX=${D}{ARG#--exec-prefix=} ;; 5.114 + "--bindir="*) BINDIR=${D}{ARG#----bindir=} ;; 5.115 + "--sbindir="*) SBINDIR=${D}{ARG#--sbindir=} ;; 5.116 + "--libdir="*) LIBDIR=${D}{ARG#--libdir=} ;; 5.117 + "--libexecdir="*) LIBEXECDIR=${D}{ARG#--libexecdir=} ;; 5.118 + "--datadir="*) DATADIR=${D}{ARG#--datadir=} ;; 5.119 + "--sysconfdir="*) SYSCONFDIR=${D}{ARG#--sysconfdir=} ;; 5.120 + "--sharedstatedir="*) SHAREDSTATEDIR=${D}{ARG#--sharedstatedir=} ;; 5.121 + "--localstatedir="*) LOCALSTATEDIR=${D}{ARG#--localstatedir=} ;; 5.122 + "--includedir="*) INCLUDEDIR=${D}{ARG#--includedir=} ;; 5.123 + "--infodir="*) INFODIR=${D}{ARG#--infodir=} ;; 5.124 + "--mandir"*) MANDIR=${D}{ARG#--mandir} ;; 5.125 + "--help"*) printhelp; abort_configure ;; 5.126 + "--debug") BUILD_TYPE="debug" ;; 5.127 + "--release") BUILD_TYPE="release" ;; 5.128 + #foreach( $opt in $options ) 5.129 + "--${opt.getArgument()}="*) ${opt.getVarName()}=${D}{ARG#--${opt.getArgument()}=} ;; 5.130 + #end 5.131 + #foreach( $feature in $features ) 5.132 + "--enable-${feature.arg}") ${feature.getVarName()}=on ;; 5.133 + "--disable-${feature.arg}") unset ${feature.getVarName()} ;; 5.134 + #end 5.135 + "-"*) echo "unknown option: $ARG"; abort_configure ;; 5.136 + esac 5.137 +done 5.138 + 5.139 +## Begin unparsed content. ** 5.140 +#[[ 5.141 +# set dir variables 5.142 +: ${EPREFIX:="$PREFIX"} 5.143 +: ${BINDIR:="$EPREFIX/bin"} 5.144 +: ${SBINDIR:="$EPREFIX/sbin"} 5.145 +: ${LIBDIR:="$EPREFIX/lib"} 5.146 +: ${LIBEXECDIR:="$EPREFIX/libexec"} 5.147 +: ${DATADIR:="$PREFIX/share"} 5.148 +: ${SYSCONFDIR:="$PREFIX/etc"} 5.149 +: ${SHAREDSTATEDIR:="$PREFIX/com"} 5.150 +: ${LOCALSTATEDIR:="$PREFIX/var"} 5.151 +: ${INCLUDEDIR:="$PREFIX/include"} 5.152 +: ${INFODIR:="$PREFIX/info"} 5.153 +: ${MANDIR:="$PREFIX/man"} 5.154 + 5.155 +# Test for availability of pkg-config 5.156 +PKG_CONFIG=`command -v pkg-config` 5.157 +: ${PKG_CONFIG:="false"} 5.158 + 5.159 +# Simple uname based platform detection 5.160 +# $PLATFORM is used for platform dependent dependency selection 5.161 +OS=`uname -s` 5.162 +OS_VERSION=`uname -r` 5.163 +printf "detect platform... " 5.164 +if [ "$OS" = "SunOS" ]; then 5.165 + PLATFORM="solaris sunos unix svr4" 5.166 +fi 5.167 +if [ "$OS" = "Linux" ]; then 5.168 + PLATFORM="linux unix" 5.169 +fi 5.170 +if [ "$OS" = "FreeBSD" ]; then 5.171 + PLATFORM="freebsd bsd unix" 5.172 +fi 5.173 +if [ "$OS" = "Darwin" ]; then 5.174 + PLATFORM="macos osx bsd unix" 5.175 +fi 5.176 +if echo "$OS" | grep -i "MINGW" > /dev/null; then 5.177 + PLATFORM="windows mingw" 5.178 +fi 5.179 +: ${PLATFORM:="unix"} 5.180 + 5.181 +PLATFORM_NAME=`echo "$PLATFORM" | cut -f1 -d' ' -` 5.182 +echo "$PLATFORM_NAME" 5.183 + 5.184 +isplatform() 5.185 +{ 5.186 + for p in $PLATFORM 5.187 + do 5.188 + if [ "$p" = "$1" ]; then 5.189 + return 0 5.190 + fi 5.191 + done 5.192 + return 1 5.193 +} 5.194 +notisplatform() 5.195 +{ 5.196 + for p in $PLATFORM 5.197 + do 5.198 + if [ "$p" = "$1" ]; then 5.199 + return 1 5.200 + fi 5.201 + done 5.202 + return 0 5.203 +} 5.204 +]]# 5.205 +## End of unparsed content ** 5.206 + 5.207 +# generate vars.mk 5.208 +cat > "$TEMP_DIR/vars.mk" << __EOF__ 5.209 +PREFIX=$PREFIX 5.210 +EPREFIX=$EPREFIX 5.211 +BINDIR=$BINDIR 5.212 +SBINDIR=$SBINDIR 5.213 +LIBDIR=$LIBDIR 5.214 +LIBEXECDIR=$LIBEXECDIR 5.215 +DATADIR=$DATADIR 5.216 +SYSCONFDIR=$SYSCONFDIR 5.217 +SHAREDSTATEDIR=$SHAREDSTATEDIR 5.218 +LOCALSTATEDIR=$LOCALSTATEDIR 5.219 +INCLUDEDIR=$INCLUDEDIR 5.220 +INFODIR=$INFODIR 5.221 +MANDIR=$MANDIR 5.222 +#foreach( $var in $vars ) 5.223 +${var.varName}=$${var.varName} 5.224 +#end 5.225 +__EOF__ 5.226 +sort -u -o "$TEMP_DIR/vars.mk" "$TEMP_DIR/vars.mk" 5.227 + 5.228 + 5.229 +# toolchain detection utilities 5.230 +. make/toolchain.sh 5.231 + 5.232 +# 5.233 +# DEPENDENCIES 5.234 +# 5.235 + 5.236 +# check languages 5.237 +lang_c= 5.238 +lang_cpp= 5.239 +#foreach( $lang in $languages ) 5.240 +if detect_${lang}_compiler ; then 5.241 + lang_${lang}=1 5.242 +fi 5.243 +#end 5.244 + 5.245 +# create buffer for make variables required by dependencies 5.246 +echo > "$TEMP_DIR/make.mk" 5.247 + 5.248 +test_pkg_config() 5.249 +{ 5.250 + if "$PKG_CONFIG" --exists "$1" ; then : 5.251 + else return 1 ; fi 5.252 + if [ -z "$2" ] || "$PKG_CONFIG" --atleast-version="$2" "$1" ; then : 5.253 + else return 1 ; fi 5.254 + if [ -z "$3" ] || "$PKG_CONFIG" --exact-version="$3" "$1" ; then : 5.255 + else return 1 ; fi 5.256 + if [ -z "$4" ] || "$PKG_CONFIG" --max-version="$4" "$1" ; then : 5.257 + else return 1 ; fi 5.258 + return 0 5.259 +} 5.260 + 5.261 +#foreach( $dependency in $namedDependencies ) 5.262 +dependency_error_${dependency.name}() 5.263 +{ 5.264 + printf "checking for ${dependency.name}... " 5.265 + #foreach( $sub in $dependency.getSubdependencies() ) 5.266 + # dependency $sub.getFullName() 5.267 + while true 5.268 + do 5.269 + #if( $sub.platform ) 5.270 + if notisplatform "${sub.platform}"; then 5.271 + break 5.272 + fi 5.273 + #end 5.274 + #foreach( $np in $sub.getNotList() ) 5.275 + if isplatform "${np}"; then 5.276 + break 5.277 + fi 5.278 + #end 5.279 + #foreach( $lang in $sub.lang ) 5.280 + if [ -z "$lang_${lang}" ] ; then 5.281 + break 5.282 + fi 5.283 + #end 5.284 + #if( $sub.pkgconfig.size() > 0 ) 5.285 + if [ -z "$PKG_CONFIG" ]; then 5.286 + break 5.287 + fi 5.288 + #end 5.289 + #foreach( $test in $sub.tests ) 5.290 + if $test > /dev/null ; then 5.291 + : 5.292 + else 5.293 + break 5.294 + fi 5.295 + #end 5.296 + #foreach( $pkg in $sub.pkgconfig ) 5.297 + if test_pkg_config "$pkg.name" "$pkg.atleast" "$pkg.exact" "$pkg.max" ; then 5.298 + TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags $pkg.name`" 5.299 + TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs $pkg.name`" 5.300 + else 5.301 + break 5.302 + fi 5.303 + #end 5.304 + #foreach( $flags in $sub.flags ) 5.305 + #if( $flags.exec ) 5.306 + if tmp_flags=`$flags.value` ; then 5.307 + TEMP_$flags.varName="$TEMP_$flags.varName $tmp_flags" 5.308 + else 5.309 + break 5.310 + fi 5.311 + #else 5.312 + TEMP_$flags.varName="$TEMP_$flags.varName $flags.value" 5.313 + #end 5.314 + #end 5.315 + #if ( $sub.make.length() > 0 ) 5.316 + cat >> $TEMP_DIR/make.mk << __EOF__ 5.317 +# Dependency: $dependency.name 5.318 +$sub.make 5.319 +__EOF__ 5.320 + #end 5.321 + echo yes 5.322 + return 1 5.323 + done 5.324 + 5.325 + #end 5.326 + echo no 5.327 + return 0 5.328 +} 5.329 +#end 5.330 + 5.331 + 5.332 + 5.333 + 5.334 +# start collecting dependency information 5.335 +echo > "$TEMP_DIR/flags.mk" 5.336 + 5.337 +DEPENDENCIES_FAILED= 5.338 +ERROR=0 5.339 +#if( $dependencies.size() > 0 ) 5.340 +# unnamed dependencies 5.341 +TEMP_CFLAGS= 5.342 +TEMP_CXXFLAGS= 5.343 +TEMP_LDFLAGS= 5.344 +#foreach( $dependency in $dependencies ) 5.345 +while true 5.346 +do 5.347 + #if( $dependency.platform ) 5.348 + if notisplatform "${dependency.platform}"; then 5.349 + break 5.350 + fi 5.351 + #end 5.352 + #foreach( $np in $dependency.getNotList() ) 5.353 + if isplatform "${np}"; then 5.354 + break 5.355 + fi 5.356 + #end 5.357 + while true 5.358 + do 5.359 + #foreach( $lang in $dependency.lang ) 5.360 + if [ -z "$lang_${lang}" ] ; then 5.361 + ERROR=1 5.362 + break 5.363 + fi 5.364 + #end 5.365 + #if( $dependency.pkgconfig.size() > 0 ) 5.366 + if [ -z "$PKG_CONFIG" ]; then 5.367 + ERROR=1 5.368 + break 5.369 + fi 5.370 + #end 5.371 + #foreach( $pkg in $dependency.pkgconfig ) 5.372 + printf "checking for pkg-config package $pkg.name... " 5.373 + if test_pkg_config "$pkg.name" "$pkg.atleast" "$pkg.exact" "$pkg.max" ; then 5.374 + echo yes 5.375 + TEMP_CFLAGS="$TEMP_CFLAGS `"$PKG_CONFIG" --cflags $pkg.name`" 5.376 + TEMP_LDFLAGS="$TEMP_LDFLAGS `"$PKG_CONFIG" --libs $pkg.name`" 5.377 + else 5.378 + echo no 5.379 + ERROR=1 5.380 + break 5.381 + fi 5.382 + #end 5.383 + 5.384 + #foreach( $flags in $dependency.flags ) 5.385 + #if( $flags.exec ) 5.386 + $flags.value > /dev/null 5.387 + if tmp_flags=`$flags.value` ; then 5.388 + TEMP_$flags.varName="$TEMP_$flags.varName $tmp_flags" 5.389 + else 5.390 + ERROR=1 5.391 + break 5.392 + fi 5.393 + #else 5.394 + TEMP_$flags.varName="$TEMP_$flags.varName $flags.value" 5.395 + #end 5.396 + #end 5.397 + #if ( $dependency.make.length() > 0 ) 5.398 + cat >> "$TEMP_DIR/make.mk" << __EOF__ 5.399 +$dependency.make 5.400 +__EOF__ 5.401 + #end 5.402 + break 5.403 + done 5.404 + break 5.405 +done 5.406 +#end 5.407 + 5.408 +# add general dependency flags to flags.mk 5.409 +echo "# general flags" >> "$TEMP_DIR/flags.mk" 5.410 +if [ -n "${TEMP_CFLAGS}" ]; then 5.411 + echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 5.412 +fi 5.413 +if [ -n "${TEMP_CXXFLAGS}" ]; then 5.414 + echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 5.415 +fi 5.416 +if [ -n "${TEMP_LDFLAGS}" ]; then 5.417 + echo "LDFLAGS += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 5.418 +fi 5.419 +#end 5.420 + 5.421 +# 5.422 +# OPTION VALUES 5.423 +# 5.424 +#foreach( $opt in $options ) 5.425 +#foreach( $val in $opt.values ) 5.426 +${val.func}() 5.427 +{ 5.428 + VERR=0 5.429 + #foreach( $dep in $val.dependencies ) 5.430 + if dependency_error_$dep ; then 5.431 + VERR=1 5.432 + fi 5.433 + #end 5.434 + if [ $VERR -ne 0 ]; then 5.435 + return 1 5.436 + fi 5.437 + #foreach( $def in $val.defines ) 5.438 + TEMP_CFLAGS="$TEMP_CFLAGS ${def.toFlags()}" 5.439 + TEMP_CXXFLAGS="$TEMP_CXXFLAGS ${def.toFlags()}" 5.440 + #end 5.441 + #if( $val.hasMake() ) 5.442 + cat >> "$TEMP_DIR/make.mk" << __EOF__ 5.443 +$val.make 5.444 +__EOF__ 5.445 + #end 5.446 + return 0 5.447 +} 5.448 +#end 5.449 +#end 5.450 + 5.451 +# 5.452 +# TARGETS 5.453 +# 5.454 + 5.455 +#foreach( $target in $targets ) 5.456 +echo >> "$TEMP_DIR/flags.mk" 5.457 +#if ( $target.name ) 5.458 +# Target: $target.name 5.459 +echo "# flags for target $target.name" >> "$TEMP_DIR/flags.mk" 5.460 +#else 5.461 +# Target 5.462 +echo "# flags for unnamed target" >> "$TEMP_DIR/flags.mk" 5.463 +#end 5.464 +TEMP_CFLAGS= 5.465 +TEMP_CXXFLAGS= 5.466 +TEMP_LDFLAGS= 5.467 + 5.468 +#foreach( $dependency in $target.dependencies ) 5.469 +if dependency_error_$dependency; then 5.470 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} " 5.471 + ERROR=1 5.472 +fi 5.473 +#end 5.474 + 5.475 +# Features 5.476 +#foreach( $feature in $target.features ) 5.477 +if [ -n "$${feature.getVarName()}" ]; then 5.478 +#foreach( $dependency in $feature.dependencies ) 5.479 + # check dependency 5.480 + if dependency_error_$dependency ; then 5.481 + # "auto" features can fail and are just disabled in this case 5.482 + if [ "$${feature.getVarName()}" = "auto" ]; then 5.483 + DISABLE_${feature.getVarName()}=1 5.484 + else 5.485 + DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED ${dependency} " 5.486 + ERROR=1 5.487 + fi 5.488 + fi 5.489 +#end 5.490 + if [ -n "$DISABLE_${feature.getVarName()}" ]; then 5.491 + unset ${feature.getVarName()} 5.492 + fi 5.493 +fi 5.494 +#end 5.495 + 5.496 +#foreach( $opt in $target.options ) 5.497 +# Option: --${opt.argument} 5.498 +if [ -z ${D}${opt.getVarName()} ]; then 5.499 + SAVED_ERROR="$ERROR" 5.500 + SAVED_DEPENDENCIES_FAILED="$DEPENDENCIES_FAILED" 5.501 + ERROR=1 5.502 + while true 5.503 + do 5.504 + #foreach( $optdef in $opt.defaults ) 5.505 + #if( $optdef.platform ) 5.506 + if isplatform "$optdef.platform"; then 5.507 + #end 5.508 + if $optdef.func ; then 5.509 + echo " ${opt.argument}: ${optdef.valueName}" >> "$TEMP_DIR/options" 5.510 + ERROR=0 5.511 + break 5.512 + fi 5.513 + #if( $optdef.platform ) 5.514 + fi 5.515 + #end 5.516 + #end 5.517 + break 5.518 + done 5.519 + if [ $ERROR -ne 0 ]; then 5.520 + SAVED_ERROR=1 5.521 + fi 5.522 + ERROR="$SAVED_ERROR" 5.523 + DEPENDENCIES_FAILED="$SAVED_DEPENDENCIES_FAILED" 5.524 +else 5.525 + if false; then 5.526 + false 5.527 + #foreach( $optval in $opt.values ) 5.528 + elif [ "${D}${opt.getVarName()}" = "${optval.value}" ]; then 5.529 + echo " ${opt.argument}: ${D}${opt.getVarName()}" >> $TEMP_DIR/options 5.530 + if $optval.func ; then 5.531 + : 5.532 + else 5.533 + ERROR=1 5.534 + fi 5.535 + #end 5.536 + fi 5.537 +fi 5.538 +#end 5.539 + 5.540 +if [ -n "${TEMP_CFLAGS}" ]; then 5.541 + echo "${target.getCFlags()} += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk" 5.542 +fi 5.543 +if [ -n "${TEMP_CXXFLAGS}" ]; then 5.544 + echo "${target.getCXXFlags()} += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk" 5.545 +fi 5.546 +if [ "$BUILD_TYPE" = "debug" ]; then 5.547 + echo '${target.getCFlags()} += ${DEBUG_CC_FLAGS}' >> "$TEMP_DIR/flags.mk" 5.548 + echo '${target.getCXXFlags()} += ${DEBUG_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk" 5.549 +fi 5.550 +if [ "$BUILD_TYPE" = "release" ]; then 5.551 + echo '${target.getCFlags()} += ${RELEASE_CC_FLAGS}' >> "$TEMP_DIR/flags.mk" 5.552 + echo '${target.getCXXFlags()} += ${RELEASE_CXX_FLAGS}' >> "$TEMP_DIR/flags.mk" 5.553 +fi 5.554 +if [ -n "${TEMP_LDFLAGS}" ]; then 5.555 + echo "${target.getLDFlags()} += $TEMP_LDFLAGS" >> "$TEMP_DIR/flags.mk" 5.556 +fi 5.557 + 5.558 +#end 5.559 + 5.560 +# final result 5.561 +if [ $ERROR -ne 0 ]; then 5.562 + echo 5.563 + echo "Error: Unresolved dependencies" 5.564 + echo "$DEPENDENCIES_FAILED" 5.565 + abort_configure 5.566 +fi 5.567 + 5.568 +echo "configure finished" 5.569 +echo 5.570 +echo "Build Config:" 5.571 +echo " PREFIX: $PREFIX" 5.572 +echo " TOOLCHAIN: $TOOLCHAIN_NAME" 5.573 +#if ( $options.size() > 0 ) 5.574 +echo "Options:" 5.575 +cat "$TEMP_DIR/options" 5.576 +#end 5.577 +#if ( $features.size() > 0 ) 5.578 +echo "Features:" 5.579 +#foreach( $feature in $features ) 5.580 +if [ -n "$${feature.getVarName()}" ]; then 5.581 +echo " $feature.name: on" 5.582 +else 5.583 +echo " $feature.name: off" 5.584 +fi 5.585 +#end 5.586 +#end 5.587 +echo 5.588 + 5.589 +# generate the config.mk file 5.590 +cat > "$TEMP_DIR/config.mk" << __EOF__ 5.591 +# 5.592 +# config.mk generated by configure 5.593 +# 5.594 + 5.595 +__EOF__ 5.596 +write_toolchain_defaults "$TEMP_DIR/toolchain.mk" 5.597 +cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk 5.598 +rm -Rf "$TEMP_DIR" 5.599 + 5.600 +
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/make/project.xml Sun Oct 01 12:53:35 2023 +0200 6.3 @@ -0,0 +1,38 @@ 6.4 +<?xml version="1.0" encoding="UTF-8"?> 6.5 +<project xmlns="http://unixwork.de/uwproj"> 6.6 + <config> 6.7 + <var name="BUILDDIR">`pwd`/build</var> 6.8 + </config> 6.9 + <dependency> 6.10 + <lang>c</lang> 6.11 + <make> 6.12 +LIB_EXT = .a 6.13 +OBJ_EXT = .o 6.14 + </make> 6.15 + </dependency> 6.16 + <dependency name="mkdir"> 6.17 + <test>command -v mkdir</test> 6.18 + <make> 6.19 +MKDIR = mkdir 6.20 +MKDIRFLAGS = -p 6.21 + </make> 6.22 + </dependency> 6.23 + <dependency name="rmdir"> 6.24 + <test>command -v rm</test> 6.25 + <make> 6.26 +RM = rm 6.27 +RMFLAGS = -f -R 6.28 + </make> 6.29 + </dependency> 6.30 + <dependency name="archiver"> 6.31 + <test>command -v ar</test> 6.32 + <make> 6.33 +AR = ar 6.34 +ARFLAGS = -r 6.35 + </make> 6.36 + </dependency> 6.37 + <dependency name="ncurses"> 6.38 + <pkgconfig>ncursesw</pkgconfig> 6.39 + </dependency> 6.40 +</project> 6.41 +
7.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 7.2 +++ b/make/toolchain.sh Sun Oct 01 12:53:35 2023 +0200 7.3 @@ -0,0 +1,186 @@ 7.4 +#!/bin/sh 7.5 +# 7.6 +# toolchain detection 7.7 +# 7.8 + 7.9 +C_COMPILERS="gcc clang suncc cc" 7.10 +CPP_COMPILERS="g++ clang++ sunCC CC" 7.11 +unset TOOLCHAIN_NAME 7.12 +unset TOOLCHAIN_CC 7.13 +unset TOOLCHAIN_CXX 7.14 + 7.15 +check_c_compiler() 7.16 +{ 7.17 + cat > "$TEMP_DIR/test.c" << __EOF__ 7.18 +/* test file */ 7.19 +#include <stdio.h> 7.20 +int main(int argc, char **argv) { 7.21 +#if defined(__clang__) 7.22 + printf("clang\n"); 7.23 +#elif defined(__GNUC__) 7.24 + printf("gcc\n"); 7.25 +#elif defined(__sun) 7.26 + printf("suncc\n"); 7.27 +#else 7.28 + printf("unknown\n"); 7.29 +#endif 7.30 + return 0; 7.31 +} 7.32 +__EOF__ 7.33 + rm -f "$TEMP_DIR/checkcc" 7.34 + $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null 7.35 +} 7.36 + 7.37 +check_cpp_compiler() 7.38 +{ 7.39 + cat > "$TEMP_DIR/test.cpp" << __EOF__ 7.40 +/* test file */ 7.41 +#include <iostream> 7.42 +int main(int argc, char **argv) { 7.43 +#if defined(__clang__) 7.44 + std::cout << "clang" << std::endl; 7.45 +#elif defined(__GNUC__) 7.46 + std::cout << "gcc" << std::endl; 7.47 +#elif defined(__sun) 7.48 + std::cout << "suncc" << std::endl; 7.49 +#else 7.50 + std::cout << "cc" << std::endl; 7.51 +#endif 7.52 + return 0; 7.53 +} 7.54 +__EOF__ 7.55 + rm -f "$TEMP_DIR/checkcc" 7.56 + $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null 7.57 +} 7.58 + 7.59 +create_libtest_source() 7.60 +{ 7.61 + # $1: filename 7.62 + # $2: optional include 7.63 + cat > "$TEMP_DIR/$1" << __EOF__ 7.64 +/* libtest file */ 7.65 +int main(int argc, char **argv) { 7.66 + return 0; 7.67 +} 7.68 +__EOF__ 7.69 + if [ -n "$2" ]; then 7.70 + echo "#include <$2>" >> "$TEMP_DIR/$1" 7.71 + fi 7.72 +} 7.73 + 7.74 +check_c_lib() 7.75 +{ 7.76 + # $1: libname 7.77 + # $2: optional include 7.78 + if [ -z "$TOOLCHAIN_CC" ]; then 7.79 + return 1 7.80 + fi 7.81 + create_libtest_source "test.c" "$2" 7.82 + rm -f "$TEMP_DIR/checklib" 7.83 + $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null 7.84 +} 7.85 + 7.86 +check_cpp_lib() 7.87 +{ 7.88 + # $1: libname 7.89 + # $2: optional include 7.90 + if [ -z "$TOOLCHAIN_CXX" ]; then 7.91 + return 1 7.92 + fi 7.93 + create_libtest_source "test.cpp" "$2" 7.94 + rm -f "$TEMP_DIR/checklib" 7.95 + $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null 7.96 +} 7.97 + 7.98 +check_lib() 7.99 +{ 7.100 + # $1: libname 7.101 + # $2: optional include 7.102 + if [ -n "$TOOLCHAIN_CC" ]; then 7.103 + check_c_lib "$1" "$2" 7.104 + elif [ -n "$TOOLCHAIN_CXX" ]; then 7.105 + check_cpp_lib "$1" "$2" 7.106 + fi 7.107 +} 7.108 + 7.109 +detect_c_compiler() 7.110 +{ 7.111 + if [ -n "$TOOLCHAIN_CC" ]; then 7.112 + return 0 7.113 + fi 7.114 + printf "detect C compiler... " 7.115 + if [ -n "$CC" ]; then 7.116 + if check_c_compiler "$CC"; then 7.117 + TOOLCHAIN_CC=$CC 7.118 + TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 7.119 + echo "$CC" 7.120 + return 0 7.121 + else 7.122 + echo "$CC is not a working C compiler" 7.123 + return 1 7.124 + fi 7.125 + else 7.126 + for COMP in $C_COMPILERS 7.127 + do 7.128 + if check_c_compiler "$COMP"; then 7.129 + TOOLCHAIN_CC=$COMP 7.130 + TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 7.131 + echo "$COMP" 7.132 + return 0 7.133 + fi 7.134 + done 7.135 + echo "not found" 7.136 + return 1 7.137 + fi 7.138 +} 7.139 + 7.140 +detect_cpp_compiler() 7.141 +{ 7.142 + if [ -n "$TOOLCHAIN_CXX" ]; then 7.143 + return 0 7.144 + fi 7.145 + printf "detect C++ compiler... " 7.146 + 7.147 + if [ -n "$CXX" ]; then 7.148 + if check_cpp_compiler "$CXX"; then 7.149 + TOOLCHAIN_CXX=$CXX 7.150 + TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 7.151 + echo "$CXX" 7.152 + return 0 7.153 + else 7.154 + echo "$CXX is not a working C++ compiler" 7.155 + return 1 7.156 + fi 7.157 + else 7.158 + for COMP in $CPP_COMPILERS 7.159 + do 7.160 + if check_cpp_compiler "$COMP"; then 7.161 + TOOLCHAIN_CXX=$COMP 7.162 + TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"` 7.163 + echo "$COMP" 7.164 + return 0 7.165 + fi 7.166 + done 7.167 + echo "${TOOLCHAIN_CXX:-"not found"}" 7.168 + return 1 7.169 + fi 7.170 +} 7.171 + 7.172 +write_toolchain_defaults() 7.173 +{ 7.174 + echo "# toolchain" >> "$1" 7.175 + if [ -n "$TOOLCHAIN_CC" ]; then 7.176 + echo "CC = ${TOOLCHAIN_CC}" >> "$1" 7.177 + fi 7.178 + if [ -n "$TOOLCHAIN_CXX" ]; then 7.179 + echo "CXX = ${TOOLCHAIN_CXX}" >> "$1" 7.180 + fi 7.181 + echo >> "$1" 7.182 + if [ -f "make/${TOOLCHAIN_NAME}.mk" ]; then 7.183 + cat "make/${TOOLCHAIN_NAME}.mk" >> "$1" 7.184 + elif [ -f "make/cc.mk" ]; then 7.185 + cat "make/cc.mk" >> "$1" 7.186 + else 7.187 + echo "!!! WARNING !!! Default toolchain flags not found. Configuration might be incomplete." 7.188 + fi 7.189 +}
8.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 8.2 +++ b/make/uwproj.xsd Sun Oct 01 12:53:35 2023 +0200 8.3 @@ -0,0 +1,131 @@ 8.4 +<?xml version="1.0" encoding="UTF-8"?> 8.5 +<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 8.6 + xmlns="http://unixwork.de/uwproj" 8.7 + targetNamespace="http://unixwork.de/uwproj" 8.8 + elementFormDefault="qualified" 8.9 + version="0.1" 8.10 +> 8.11 + <xs:element name="project" type="ProjectType"/> 8.12 + 8.13 + <xs:complexType name="ProjectType"> 8.14 + <xs:sequence> 8.15 + <xs:element name="config" type="ConfigType" minOccurs="0"/> 8.16 + <xs:element name="dependency" type="DependencyType" minOccurs="0" maxOccurs="unbounded"/> 8.17 + <xs:element name="target" type="TargetType" minOccurs="0" maxOccurs="unbounded"/> 8.18 + </xs:sequence> 8.19 + </xs:complexType> 8.20 + 8.21 + <xs:complexType name="ConfigType"> 8.22 + <xs:sequence> 8.23 + <xs:element name="var" type="ConfigVarType" minOccurs="0" maxOccurs="unbounded"/> 8.24 + </xs:sequence> 8.25 + </xs:complexType> 8.26 + 8.27 + <xs:complexType name="ConfigVarType"> 8.28 + <xs:simpleContent> 8.29 + <xs:extension base="xs:string"> 8.30 + <xs:attribute name="name" type="xs:string" use="required"/> 8.31 + <xs:attribute name="exec" type="xs:boolean" default="false"/> 8.32 + </xs:extension> 8.33 + </xs:simpleContent> 8.34 + </xs:complexType> 8.35 + 8.36 + <xs:complexType name="PkgConfigType"> 8.37 + <xs:simpleContent> 8.38 + <xs:extension base="xs:string"> 8.39 + <xs:attribute name="atleast" type="xs:string"/> 8.40 + <xs:attribute name="exact" type="xs:string"/> 8.41 + <xs:attribute name="max" type="xs:string"/> 8.42 + </xs:extension> 8.43 + </xs:simpleContent> 8.44 + </xs:complexType> 8.45 + 8.46 + <xs:simpleType name="LangType"> 8.47 + <xs:restriction base="xs:string"> 8.48 + <xs:enumeration value="c"/> 8.49 + <xs:enumeration value="cpp"/> 8.50 + </xs:restriction> 8.51 + </xs:simpleType> 8.52 + 8.53 + <xs:complexType name="DependencyType"> 8.54 + <xs:choice minOccurs="0" maxOccurs="unbounded"> 8.55 + <xs:element name="lang" type="LangType"/> 8.56 + <xs:element name="cflags" type="FlagsType"/> 8.57 + <xs:element name="cxxflags" type="FlagsType"/> 8.58 + <xs:element name="ldflags" type="FlagsType"/> 8.59 + <xs:element name="pkgconfig" type="PkgConfigType"/> 8.60 + <xs:element name="test" type="xs:string"/> 8.61 + <xs:element name="make" type="xs:string"/> 8.62 + </xs:choice> 8.63 + <xs:attribute name="name" type="xs:string"/> 8.64 + <xs:attribute name="platform" type="xs:string"/> 8.65 + <xs:attribute name="not" type="xs:string"/> 8.66 + </xs:complexType> 8.67 + 8.68 + <xs:complexType name="FlagsType"> 8.69 + <xs:simpleContent> 8.70 + <xs:extension base="xs:string"> 8.71 + <xs:attribute name="exec" type="xs:boolean" default="false"/> 8.72 + </xs:extension> 8.73 + </xs:simpleContent> 8.74 + </xs:complexType> 8.75 + 8.76 + <xs:complexType name="TargetType"> 8.77 + <xs:choice minOccurs="0" maxOccurs="unbounded"> 8.78 + <xs:element name="feature" type="FeatureType"/> 8.79 + <xs:element name="option" type="OptionType"/> 8.80 + <xs:element name="define" type="DefineType"/> 8.81 + <xs:element name="dependencies" type="DependenciesType"/> 8.82 + <xs:element name="alldependencies"> 8.83 + <xs:complexType/> 8.84 + </xs:element> 8.85 + </xs:choice> 8.86 + <xs:attribute name="name" type="xs:string"/> 8.87 + </xs:complexType> 8.88 + 8.89 + <xs:complexType name="FeatureType"> 8.90 + <xs:choice minOccurs="0" maxOccurs="unbounded"> 8.91 + <xs:group ref="TargetDataGroup"/> 8.92 + </xs:choice> 8.93 + <xs:attribute name="name" type="xs:string" use="required"/> 8.94 + <xs:attribute name="arg" type="xs:string"/> 8.95 + <xs:attribute name="default" type="xs:boolean" default="false"/> 8.96 + </xs:complexType> 8.97 + 8.98 + <xs:complexType name="OptionType"> 8.99 + <xs:sequence> 8.100 + <xs:element name="value" type="OptionValueType" minOccurs="0" maxOccurs="unbounded"/> 8.101 + <xs:element name="default" type="OptionDefaultType" minOccurs="0" maxOccurs="unbounded"/> 8.102 + </xs:sequence> 8.103 + <xs:attribute name="arg" type="xs:string"/> 8.104 + </xs:complexType> 8.105 + 8.106 + <xs:complexType name="OptionValueType"> 8.107 + <xs:choice minOccurs="0" maxOccurs="unbounded"> 8.108 + <xs:group ref="TargetDataGroup"/> 8.109 + </xs:choice> 8.110 + <xs:attribute name="str" type="xs:string" use="required"/> 8.111 + </xs:complexType> 8.112 + 8.113 + <xs:complexType name="OptionDefaultType"> 8.114 + <xs:attribute name="value" type="xs:string" use="required"/> 8.115 + <xs:attribute name="platform" type="xs:string"/> 8.116 + </xs:complexType> 8.117 + 8.118 + <xs:group name="TargetDataGroup"> 8.119 + <xs:choice> 8.120 + <xs:element name="define" type="DefineType" minOccurs="0" maxOccurs="unbounded"/> 8.121 + <xs:element name="dependencies" type="DependenciesType" minOccurs="0" maxOccurs="unbounded"/> 8.122 + <xs:element name="make" type="xs:string" minOccurs="0" maxOccurs="unbounded"/> 8.123 + </xs:choice> 8.124 + </xs:group> 8.125 + 8.126 + <xs:complexType name="DefineType"> 8.127 + <xs:attribute name="name" type="xs:string" use="required"/> 8.128 + <xs:attribute name="value" type="xs:string"/> 8.129 + </xs:complexType> 8.130 + 8.131 + <xs:simpleType name="DependenciesType"> 8.132 + <xs:restriction base="xs:string"/> 8.133 + </xs:simpleType> 8.134 +</xs:schema> 8.135 \ No newline at end of file
9.1 --- a/src/Makefile Tue Aug 13 00:33:59 2019 +0200 9.2 +++ b/src/Makefile Sun Oct 01 12:53:35 2023 +0200 9.3 @@ -26,25 +26,22 @@ 9.4 # POSSIBILITY OF SUCH DAMAGE. 9.5 # 9.6 9.7 -include ../conf.mk 9.8 +include ../config.mk 9.9 9.10 -SRC = main.c 9.11 -SRC += colors.c 9.12 -SRC += network.c 9.13 -SRC += input.c 9.14 -SRC += server.c 9.15 -SRC += client.c 9.16 -SRC += game.c 9.17 +SRC = main.c colors.c network.c input.c server.c client.c game.c 9.18 9.19 OBJ = $(SRC:%.c=$(BUILDDIR)/%$(OBJ_EXT)) 9.20 9.21 -all: $(BUILDDIR) $(OBJ) 9.22 - $(LD) -o $(BUILDDIR)/$(BIN) $(OBJ) \ 9.23 - $(BUILDDIR)/chess$(LIB_EXT) $(LDFLAGS) 9.24 +all: $(BUILDDIR)/terminal-chess FORCE 9.25 + @echo "Build complete." 9.26 + 9.27 +$(BUILDDIR)/terminal-chess: $(OBJ) $(BUILDDIR)/libchess$(LIB_EXT) 9.28 + $(CC) -o $@ $(LDFLAGS) $^ 9.29 + 9.30 +$(BUILDDIR)/libchess$(LIB_EXT): FORCE 9.31 + cd chess; $(MAKE) 9.32 9.33 $(BUILDDIR)/%$(OBJ_EXT): %.c 9.34 $(CC) -o $@ $(CFLAGS) -c $< 9.35 - 9.36 -$(BUILDDIR): 9.37 - $(MKDIR) $(MKDIRFLAGS) $(BUILDDIR) 9.38 9.39 +FORCE:
10.1 --- a/src/chess/Makefile Tue Aug 13 00:33:59 2019 +0200 10.2 +++ b/src/chess/Makefile Sun Oct 01 12:53:35 2023 +0200 10.3 @@ -26,25 +26,19 @@ 10.4 # POSSIBILITY OF SUCH DAMAGE. 10.5 # 10.6 10.7 -include ../../conf.mk 10.8 +include ../../config.mk 10.9 10.10 -SRC += pawn.c 10.11 -SRC += rook.c 10.12 -SRC += knight.c 10.13 -SRC += bishop.c 10.14 -SRC += queen.c 10.15 -SRC += king.c 10.16 -SRC += rules.c 10.17 -SRC += pgn.c 10.18 +SRC = pawn.c rook.c knight.c bishop.c queen.c king.c \ 10.19 + rules.c pgn.c 10.20 10.21 OBJ = $(SRC:%.c=$(BUILDDIR)/%$(OBJ_EXT)) 10.22 10.23 all: $(BUILDDIR) $(OBJ) 10.24 - $(AR) $(ARFLAGS) $(BUILDDIR)/chess$(LIB_EXT) $(OBJ) 10.25 + $(AR) $(ARFLAGS) $(BUILDDIR)/libchess$(LIB_EXT) $(OBJ) 10.26 10.27 $(BUILDDIR)/%$(OBJ_EXT): %.c 10.28 $(CC) -o $@ $(CFLAGS) -c $< 10.29 10.30 $(BUILDDIR): 10.31 $(MKDIR) $(MKDIRFLAGS) $(BUILDDIR) 10.32 - 10.33 \ No newline at end of file 10.34 +
11.1 --- a/src/terminal-chess.h Tue Aug 13 00:33:59 2019 +0200 11.2 +++ b/src/terminal-chess.h Sun Oct 01 12:53:35 2023 +0200 11.3 @@ -36,7 +36,7 @@ 11.4 #ifndef TERMINAL_CHESS_H 11.5 #define TERMINAL_CHESS_H 11.6 11.7 -#define PROGRAM_VERSION "0.9-r70" 11.8 +#define PROGRAM_VERSION "0.9-r71" 11.9 11.10 #ifdef __cplusplus 11.11 extern "C" {