update uwproj and check toolchain dependency for coverage flags - fixes #345

Sat, 20 Jan 2024 16:02:04 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 20 Jan 2024 16:02:04 +0100
changeset 815
b0c4750cecd8
parent 814
5f9e07d3dd6c
child 816
425234b05dff

update uwproj and check toolchain dependency for coverage flags - fixes #345

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/suncc.mk file | annotate | diff | comparison | revisions
make/toolchain.sh file | annotate | diff | comparison | revisions
make/uwproj.xsd file | annotate | diff | comparison | revisions
--- a/configure	Wed Jan 17 21:01:50 2024 +0100
+++ b/configure	Sat Jan 20 16:02:04 2024 +0100
@@ -163,17 +163,17 @@
 printf "detect platform... "
 if [ "$OS" = "SunOS" ]; then
     PLATFORM="solaris sunos unix svr4"
-fi
-if [ "$OS" = "Linux" ]; then
+elif [ "$OS" = "Linux" ]; then
     PLATFORM="linux unix"
-fi
-if [ "$OS" = "FreeBSD" ]; then
+elif [ "$OS" = "FreeBSD" ]; then
     PLATFORM="freebsd bsd unix"
-fi
-if [ "$OS" = "Darwin" ]; then
+elif [ "$OS" = "OpenBSD" ]; then
+    PLATFORM="openbsd bsd unix"
+elif [ "$OS" = "NetBSD" ]; then
+    PLATFORM="netbsd bsd unix"
+elif [ "$OS" = "Darwin" ]; then
     PLATFORM="macos osx bsd unix"
-fi
-if echo "$OS" | grep -i "MINGW" > /dev/null; then
+elif echo "$OS" | grep -i "MINGW" > /dev/null; then
     PLATFORM="windows mingw"
 fi
 : ${PLATFORM:="unix"}
@@ -201,6 +201,26 @@
     done
     return 0
 }
+istoolchain()
+{
+    for t in $TOOLCHAIN
+    do
+        if [ "$t" = "$1" ]; then
+            return 0
+        fi
+    done
+    return 1
+}
+notistoolchain()
+{
+    for t in $TOOLCHAIN
+    do
+        if [ "$t" = "$1" ]; then
+            return 1
+        fi
+    done
+    return 0
+}
 
 
 # generate vars.mk
@@ -267,9 +287,12 @@
 dependency_error_coverage()
 {
     print_check_msg "$dep_checked_coverage" "checking for coverage... "
-    # dependency coverage
+    # dependency coverage toolchain="gnuc"
     while true
     do
+        if notistoolchain "gnuc"; then
+            break
+        fi
         TEMP_CFLAGS="$TEMP_CFLAGS \${COVERAGE_CFLAGS}"
         TEMP_LDFLAGS="$TEMP_LDFLAGS \${COVERAGE_LDFLAGS}"
         print_check_msg "$dep_checked_coverage" "yes\n"
@@ -453,10 +476,10 @@
 
 # add general dependency flags to flags.mk
 echo "# general flags" >> "$TEMP_DIR/flags.mk"
-if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
+if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
     echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
-if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
+if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
     echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ -n "${TEMP_LDFLAGS}" ]; then
@@ -639,10 +662,10 @@
     fi
 fi
 
-if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
+if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
     echo "CFLAGS  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
-if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
+if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
     echo "CXXFLAGS  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ "$BUILD_TYPE" = "debug" ]; then
@@ -699,6 +722,3 @@
 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
 rm -Rf "$TEMP_DIR"
-
-
-
--- a/make/cc.mk	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/cc.mk	Sat Jan 20 16:02:04 2024 +0100
@@ -9,6 +9,3 @@
 
 SHLIB_CFLAGS = -fPIC
 SHLIB_LDFLAGS = -shared
-
-COVERAGE_CFLAGS =
-COVERAGE_LDFLAGS =
--- a/make/configure.vm	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/configure.vm	Sat Jan 20 16:02:04 2024 +0100
@@ -93,11 +93,7 @@
 #if( $features.size() > 0 )
 Optional Features:
 #foreach( $feature in $features )
-#if( $feature.auto )
-  --disable-${feature.arg}
-#else
-  --enable-${feature.arg}
-#end
+${feature.helpText}
 #end
 
 #end
@@ -190,17 +186,17 @@
 printf "detect platform... "
 if [ "$OS" = "SunOS" ]; then
     PLATFORM="solaris sunos unix svr4"
-fi
-if [ "$OS" = "Linux" ]; then
+elif [ "$OS" = "Linux" ]; then
     PLATFORM="linux unix"
-fi
-if [ "$OS" = "FreeBSD" ]; then
+elif [ "$OS" = "FreeBSD" ]; then
     PLATFORM="freebsd bsd unix"
-fi
-if [ "$OS" = "Darwin" ]; then
+elif [ "$OS" = "OpenBSD" ]; then
+    PLATFORM="openbsd bsd unix"
+elif [ "$OS" = "NetBSD" ]; then
+    PLATFORM="netbsd bsd unix"
+elif [ "$OS" = "Darwin" ]; then
     PLATFORM="macos osx bsd unix"
-fi
-if echo "$OS" | grep -i "MINGW" > /dev/null; then
+elif echo "$OS" | grep -i "MINGW" > /dev/null; then
     PLATFORM="windows mingw"
 fi
 : ${PLATFORM:="unix"}
@@ -228,6 +224,26 @@
     done
     return 0
 }
+istoolchain()
+{
+    for t in $TOOLCHAIN
+    do
+        if [ "$t" = "$1" ]; then
+            return 0
+        fi
+    done
+    return 1
+}
+notistoolchain()
+{
+    for t in $TOOLCHAIN
+    do
+        if [ "$t" = "$1" ]; then
+            return 1
+        fi
+    done
+    return 0
+}
 ]]#
 ## End of unparsed content **
 
@@ -307,8 +323,13 @@
             break
         fi
         #end
+        #if( $sub.toolchain )
+        if notistoolchain "${sub.toolchain}"; then
+            break
+        fi
+        #end
         #foreach( $np in $sub.notList )
-        if isplatform "${np}"; then
+        if isplatform "${np}" || istoolchain "${np}"; then
             break
         fi
         #end
@@ -384,8 +405,13 @@
         break
     fi
     #end
+    #if( $dependency.toolchain )
+    if notistoolchain "${dependency.toolchain}"; then
+        break
+    fi
+    #end
     #foreach( $np in $dependency.notList )
-    if isplatform "${np}"; then
+    if isplatform "${np}" || istoolchain "${np}"; then
         break
     fi
     #end
@@ -444,10 +470,10 @@
 
 # add general dependency flags to flags.mk
 echo "# general flags" >> "$TEMP_DIR/flags.mk"
-if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
+if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
     echo "CFLAGS += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
-if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
+if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
     echo "CXXFLAGS += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ -n "${TEMP_LDFLAGS}" ]; then
@@ -578,10 +604,10 @@
 fi
 #end
 
-if [ -n "${TEMP_CFLAGS}" -a -n "$lang_c" ]; then
+if [ -n "${TEMP_CFLAGS}" ] && [ -n "$lang_c" ]; then
     echo "${target.cFlags}  += $TEMP_CFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
-if [ -n "${TEMP_CXXFLAGS}" -a -n "$lang_cpp" ]; then
+if [ -n "${TEMP_CXXFLAGS}" ] && [ -n "$lang_cpp" ]; then
     echo "${target.cxxFlags}  += $TEMP_CXXFLAGS" >> "$TEMP_DIR/flags.mk"
 fi
 if [ "$BUILD_TYPE" = "debug" ]; then
@@ -645,6 +671,3 @@
 write_toolchain_defaults "$TEMP_DIR/toolchain.mk"
 cat "$TEMP_DIR/vars.mk" "$TEMP_DIR/toolchain.mk" "$TEMP_DIR/flags.mk" "$TEMP_DIR/make.mk" > config.mk
 rm -Rf "$TEMP_DIR"
-
-
-
--- a/make/project.xml	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/project.xml	Sat Jan 20 16:02:04 2024 +0100
@@ -69,7 +69,7 @@
         <test>test -n "$PANDOC"</test>
     </dependency>
 
-    <dependency name="coverage">
+    <dependency name="coverage" toolchain="gnuc">
         <cflags>\${COVERAGE_CFLAGS}</cflags>
         <ldflags>\${COVERAGE_LDFLAGS}</ldflags>
     </dependency>
--- a/make/suncc.mk	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/suncc.mk	Sat Jan 20 16:02:04 2024 +0100
@@ -9,6 +9,3 @@
 
 SHLIB_CFLAGS = -Kpic
 SHLIB_LDFLAGS = -G
-
-COVERAGE_CFLAGS =
-COVERAGE_LDFLAGS =
--- a/make/toolchain.sh	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/toolchain.sh	Sat Jan 20 16:02:04 2024 +0100
@@ -3,64 +3,74 @@
 # toolchain detection
 #
 
-C_COMPILERS="gcc clang suncc cc"
-CPP_COMPILERS="g++ clang++ sunCC CC"
+if isplatform "bsd" && notisplatform "openbsd"; then
+  C_COMPILERS="clang gcc cc"
+  CPP_COMPILERS="clang++ g++ CC"
+else
+  C_COMPILERS="gcc clang suncc cc"
+  CPP_COMPILERS="g++ clang++ sunCC CC"
+fi
+unset TOOLCHAIN
 unset TOOLCHAIN_NAME
 unset TOOLCHAIN_CC
 unset TOOLCHAIN_CXX
 
 check_c_compiler()
 {
-	cat > "$TEMP_DIR/test.c" << __EOF__
+  cat > "$TEMP_DIR/test.c" << __EOF__
 /* test file */
 #include <stdio.h>
 int main(int argc, char **argv) {
-#if defined(__clang__)
-	printf("clang\n");
+#if defined(_MSC_VER)
+  printf("msc\n");
+#elif defined(__clang__)
+  printf("clang gnuc\n");
 #elif defined(__GNUC__)
-	printf("gcc\n");
+  printf("gcc gnuc\n");
 #elif defined(__sun)
-	printf("suncc\n");
+  printf("suncc\n");
 #else
-	printf("unknown\n");
+  printf("unknown\n");
 #endif
-	return 0;
+  return 0;
 }
 __EOF__
-	rm -f "$TEMP_DIR/checkcc"
-	$1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null
+  rm -f "$TEMP_DIR/checkcc"
+  $1 -o "$TEMP_DIR/checkcc" $CFLAGS $LDFLAGS "$TEMP_DIR/test.c" 2> /dev/null
 }
 
 check_cpp_compiler()
 {
-	cat > "$TEMP_DIR/test.cpp" << __EOF__
+  cat > "$TEMP_DIR/test.cpp" << __EOF__
 /* test file */
 #include <iostream>
 int main(int argc, char **argv) {
-#if defined(__clang__)
-	std::cout << "clang" << std::endl;
+#if defined(_MSC_VER)
+  std::cout << "msc" << std::endl;
+#elif defined(__clang__)
+  std::cout << "clang gnuc" << std::endl;
 #elif defined(__GNUC__)
-	std::cout << "gcc" << std::endl;
+  std::cout << "gcc gnuc" << std::endl;
 #elif defined(__sun)
-	std::cout << "suncc" << std::endl;
+  std::cout << "suncc" << std::endl;
 #else
-	std::cout << "cc" << std::endl;
+  std::cout << "cc" << std::endl;
 #endif
-	return 0;
+  return 0;
 }
 __EOF__
-	rm -f "$TEMP_DIR/checkcc"
-	$1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
+  rm -f "$TEMP_DIR/checkcc"
+  $1 -o "$TEMP_DIR/checkcc" $CXXFLAGS $LDFLAGS "$TEMP_DIR/test.cpp" 2> /dev/null
 }
 
 create_libtest_source()
 {
   # $1: filename
   # $2: optional include
-	cat > "$TEMP_DIR/$1" << __EOF__
+  cat > "$TEMP_DIR/$1" << __EOF__
 /* libtest file */
 int main(int argc, char **argv) {
-	return 0;
+  return 0;
 }
 __EOF__
   if [ -n "$2" ]; then
@@ -77,7 +87,7 @@
   fi
   create_libtest_source "test.c" "$2"
   rm -f "$TEMP_DIR/checklib"
-	$TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
+  $TOOLCHAIN_CC -o "$TEMP_DIR/checklib" $CFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.c" 2> /dev/null
 }
 
 check_cpp_lib()
@@ -87,20 +97,20 @@
   if [ -z "$TOOLCHAIN_CXX" ]; then
     return 1
   fi
-	create_libtest_source "test.cpp" "$2"
+  create_libtest_source "test.cpp" "$2"
   rm -f "$TEMP_DIR/checklib"
-	$TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null
+  $TOOLCHAIN_CXX -o "$TEMP_DIR/checklib" $CXXFLAGS $LDFLAGS "-l$1" "$TEMP_DIR/test.cpp" 2> /dev/null
 }
 
 check_lib()
 {
   # $1: libname
   # $2: optional include
-	if [ -n "$TOOLCHAIN_CC" ]; then
-		check_c_lib "$1" "$2"
-	elif  [ -n "$TOOLCHAIN_CXX" ]; then
-	  check_cpp_lib "$1" "$2"
-	fi
+  if [ -n "$TOOLCHAIN_CC" ]; then
+    check_c_lib "$1" "$2"
+  elif  [ -n "$TOOLCHAIN_CXX" ]; then
+    check_cpp_lib "$1" "$2"
+  fi
 }
 
 detect_c_compiler()
@@ -112,7 +122,8 @@
   if [ -n "$CC" ]; then
     if check_c_compiler "$CC"; then
       TOOLCHAIN_CC=$CC
-      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+      TOOLCHAIN=`"$TEMP_DIR/checkcc"`
+      TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
       echo "$CC"
       return 0
     else
@@ -124,7 +135,8 @@
     do
       if check_c_compiler "$COMP"; then
         TOOLCHAIN_CC=$COMP
-        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+        TOOLCHAIN=`"$TEMP_DIR/checkcc"`
+        TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
         echo "$COMP"
         return 0
       fi
@@ -144,7 +156,8 @@
   if [ -n "$CXX" ]; then
     if check_cpp_compiler "$CXX"; then
       TOOLCHAIN_CXX=$CXX
-      TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+      TOOLCHAIN=`"$TEMP_DIR/checkcc"`
+      TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
       echo "$CXX"
       return 0
     else
@@ -156,7 +169,8 @@
     do
       if check_cpp_compiler "$COMP"; then
         TOOLCHAIN_CXX=$COMP
-        TOOLCHAIN_NAME=`"$TEMP_DIR/checkcc"`
+        TOOLCHAIN=`"$TEMP_DIR/checkcc"`
+        TOOLCHAIN_NAME=`echo "$TOOLCHAIN" | cut -f1 -d' ' -`
         echo "$COMP"
         return 0
       fi
--- a/make/uwproj.xsd	Wed Jan 17 21:01:50 2024 +0100
+++ b/make/uwproj.xsd	Sat Jan 20 16:02:04 2024 +0100
@@ -3,7 +3,7 @@
            xmlns="http://unixwork.de/uwproj"
            targetNamespace="http://unixwork.de/uwproj"
            elementFormDefault="qualified"
-           version="0.1"
+           version="0.2"
 >
     <xs:element name="project" type="ProjectType"/>
 
@@ -102,9 +102,11 @@
                 </p>
                 <p>
                     The optional <code>platform</code> attribute may specify a <em>single</em> platform identifier and
-                    the optional <code>not</code> attribute may specify a comma-separated list of platform identifiers.
-                    The configure script shall skip this dependency declaration if the detected platform is not
-                    matching the filter specification of these attributes.
+                    the optional <code>toolchain</code> attribute may specify a <em>single</em> toolchain.
+                    The optional <code>not</code> attribute may specify a comma-separated list of platform and/or
+                    toolchain identifiers.
+                    The configure script shall skip this dependency declaration if the detected platform and toolchain
+                    is not matching the filter specification of these attributes.
                 </p>
             </xs:documentation>
         </xs:annotation>
@@ -125,6 +127,7 @@
         </xs:choice>
         <xs:attribute name="name" type="xs:string"/>
         <xs:attribute name="platform" type="xs:string"/>
+        <xs:attribute name="toolchain" type="xs:string"/>
         <xs:attribute name="not" type="xs:string"/>
     </xs:complexType>
 
@@ -186,6 +189,8 @@
                 and is supposed to be automatically disabled (without error) when the dependencies are not satisfied.
                 The name that is supposed to be used for the --enable and --disable arguments can be optionally
                 specified with the <code>arg</code> attribute. Otherwise, the <code>name</code> is used by default.
+                Optionally, a description for the help text of the resulting configure script can be specified by
+                adding a <code>desc</code> element.
             </xs:documentation>
         </xs:annotation>
         <xs:choice minOccurs="0" maxOccurs="unbounded">
@@ -194,6 +199,7 @@
         <xs:attribute name="name" type="xs:string" use="required"/>
         <xs:attribute name="arg" type="xs:string"/>
         <xs:attribute name="default" type="xs:boolean" default="false"/>
+        <xs:element name="desc" type="xs:string"/>
     </xs:complexType>
 
     <xs:complexType name="OptionType">
@@ -278,4 +284,4 @@
         </xs:annotation>
         <xs:restriction base="xs:string"/>
     </xs:simpleType>
-</xs:schema>
\ No newline at end of file
+</xs:schema>

mercurial