[PATCH modular] build.sh: collapse all build_xxx into one build_all_modules function

Gaetan Nadon memsize at videotron.ca
Sat Nov 16 08:46:33 PST 2013


There used to be a time where related modules could be built
together, for example, all protcols, all libraries, all fonts.

Since then, build order has changed so the group order has been
broken in several places. This means the reader has to hunt for
the function definition just to find the module he is looking for
is no longer built with the group and has to look elsewhere.

The build_all_modules function is the one stop shopping place to add
or remove modules from the build list.

There is no functional changes, or no build order changes. Just source
code reshuffling.

Signed-off-by: Gaetan Nadon <memsize at videotron.ca>
---
 build.sh |  610 ++++++++++++++++++++++++++------------------------------------
 1 file changed, 254 insertions(+), 356 deletions(-)

diff --git a/build.sh b/build.sh
index 0269ea3..3500a70 100755
--- a/build.sh
+++ b/build.sh
@@ -808,15 +808,180 @@ build() {
     fi
 }
 
-# protocol headers have no build order dependencies
-build_proto() {
+
+# just process the sub-projects supplied in the given file ($MODFILE)
+# in the order in which they are found in the list
+# (prerequisites and ordering are the responsibility of the user)
+# globals used:
+#   $MODFILE - readable file containing list of modules to process
+#              and their optional configuration options
+# arguments:
+#   (none)
+# returns:
+#   0 - good
+#   1 - bad
+process_module_file() {
+    # preconds
+    if [ X"$MODFILE" = X ]; then
+	echo "internal process_module_file() error, \$MODFILE is empty"
+	return 1
+    fi
+    if [ ! -r "$MODFILE" ]; then
+	echo "module file '$MODFILE' is not readable or does not exist"
+	return 1
+    fi
+
+    # read from input file, skipping blank and comment lines
+    while read line; do
+	# skip blank lines
+	if [ X"$line" = X ]; then
+	    continue
+	fi
+
+	# skip comment lines
+	echo "$line" | grep "^#" > /dev/null
+	if [ $? -eq 0 ]; then
+	    continue
+	fi
+
+	# parse each line to extract module, component and options name
+	field1=`echo $line | cut -d' ' -f1`
+	module=`echo $field1 | cut -d'/' -f1`
+	component=`echo $field1 | cut -d'/' -s -f2`
+	confopts=`echo $line | cut -d' ' -s -f2-`
+
+	build $module "$component" "$confopts"
+
+    done <"$MODFILE"
+
+    return 0
+}
+
+usage() {
+    basename="`expr "//$0" : '.*/\([^/]*\)'`"
+    echo "Usage: $basename [options] [prefix]"
+    echo "Options:"
+    echo "  -a          Do NOT run auto config tools (autogen.sh, configure)"
+    echo "  -b          Use .build.unknown build directory"
+    echo "  -c          Run make clean in addition to \"all install\""
+    echo "  -D          Run make dist in addition to \"all install\""
+    echo "  -d          Run make distcheck in addition \"all install\""
+    echo "  -g          Compile and link with debug information"
+    echo "  -h, --help  Display this help and exit successfully"
+    echo "  -n          Do not quit after error; just print error message"
+    echo "  -o module/component"
+    echo "              Build just this module/component"
+    echo "  -p          Update source code before building (git pull --rebase)"
+    echo "  -s sudo     The command name providing superuser privilege"
+    echo "  --autoresume resumefile"
+    echo "              Append module being built to, and autoresume from, <file>"
+    echo "  --check     Run make check in addition \"all install\""
+    echo "  --clone     Clone non-existing repositories (uses \$GITROOT if set)"
+    echo "  --cmd command"
+    echo "              Execute arbitrary git, gmake, or make command"
+    echo "  --confflags options"
+    echo "              Pass options to autgen.sh/configure of all modules"
+    echo "  --modfile modulefile"
+    echo "              Only process the module/components specified in modulefile"
+    echo "              Any text after, and on the same line as, the module/component"
+    echo "              is assumed to be configuration options for the configuration"
+    echo "              of each module/component specifically"
+    echo "  --retry-v1  Remake 'all' on failure with Automake silent rules disabled"
+    echo ""
+    echo "Usage: $basename -L"
+    echo "  -L          Just list modules to build"
+    echo ""
+    envoptions
+}
+
+# Ensure the named variable value contains a full path name
+# arguments:
+#   $1 - the variable value (the path to examine)
+#   $2 - the name of the variable
+# returns:
+#   returns nothing or exit on error with message
+check_full_path () {
+    path=$1
+    varname=$2
+    if [ X"`expr $path : "\(.\)"`" != X/ ]; then
+	echo "The path \"$path\" supplied by \"$varname\" must be a full path name"
+	echo ""
+	usage
+	exit 1
+    fi
+}
+
+# Ensure the named variable value contains a writable directory
+# arguments:
+#   $1 - the variable value (the path to examine)
+#   $2 - the name of the variable
+# returns:
+#   returns nothing or exit on error with message
+check_writable_dir () {
+    path=$1
+    varname=$2
+    if [ X"$SUDO" = X ]; then
+	if [ ! -d "$path" ] || [ ! -w "$path" ]; then
+	    echo "The path \"$path\" supplied by \"$varname\" must be a writable directory"
+	    echo ""
+	    usage
+	    exit 1
+	fi
+    fi
+}
+
+# perform sanity checks on cmdline args which require arguments
+# arguments:
+#   $1 - the option being examined
+#   $2 - the argument to the option
+# returns:
+#   if it returns, everything is good
+#   otherwise it exit's
+required_arg() {
+    option=$1
+    arg=$2
+    # preconds
+    if [ X"$option" = X ]; then
+	echo "internal required_arg() error, missing first argument"
+	exit 1
+    fi
+
+    # check for an argument
+    if [ X"$arg" = X ]; then
+	echo "the '$option' option is missing its required argument"
+	echo ""
+	usage
+	exit 1
+    fi
+
+    # does the argument look like an option?
+    echo $arg | grep "^-" > /dev/null
+    if [ $? -eq 0 ]; then
+	echo "the argument '$arg' of option '$option' looks like an option itself"
+	echo ""
+	usage
+	exit 1
+    fi
+}
+
+#==============================================================================
+#				Build All Modules
+# Globals:
+#   HOST_OS HOST_CPU
+# Arguments:
+#   None
+# Returns:
+#   None
+#==============================================================================
+build_all_modules() {
+
+    build util macros
+    build font util
+    build doc xorg-sgml-doctools
+    build doc xorg-docs
     case $HOST_OS in
-        Darwin)
-            build proto applewmproto
-        ;;
-        CYGWIN*)
-            build proto windowswmproto
-        ;;
+        Darwin)  build proto applewmproto;;
+        CYGWIN*) build proto windowswmproto;;
     esac
     build proto bigreqsproto
     build proto compositeproto
@@ -845,31 +1010,8 @@ build_proto() {
     build proto xf86vidmodeproto
     build proto xineramaproto
     build xcb proto
-}
-
-# bitmaps is needed for building apps, so has to be done separately first
-# cursors depends on apps/xcursorgen
-# xkbdata is obsolete - use xkbdesc from xkeyboard-config instead
-build_data() {
-#    build data bitmaps
-    build data cursors
-}
-
-# All protocol modules must be installed before the libs (okay, that's an
-# overstatement, but all protocol modules should be installed anyway)
-#
-# the libraries have a dependency order:
-# xtrans, Xau, Xdmcp before anything else
-# fontenc before Xfont
-# ICE before SM
-# X11 before Xext
-# (X11 and SM) before Xt
-# Xt before Xmu and Xpm
-# Xext before any other extension library
-# Xfixes before Xcomposite
-# Xp before XprintUtil before XprintAppUtil
-#
-build_lib() {
+    # Required by mesa and depends on xproto
+    build util makedepend
     build lib libxtrans
     build lib libXau
     build lib libXdmcp
@@ -883,12 +1025,8 @@ build_lib() {
     build lib libX11
     build lib libXext
     case $HOST_OS in
-        Darwin)
-            build lib libAppleWM
-        ;;
-        CYGWIN*)
-            build lib libWindowsWM
-        ;;
+        Darwin)  build lib libAppleWM;;
+        CYGWIN*) build lib libWindowsWM;;
     esac
     build lib libdmx
     build lib libfontenc
@@ -925,16 +1063,9 @@ build_lib() {
     build lib libXxf86vm
     build lib libpciaccess
     build pixman ""
-}
-
-# Most apps depend at least on libX11.
-#
-# bdftopcf depends on libXfont
-# mkfontscale depends on libfontenc and libfreetype
-# mkfontdir depends on mkfontscale
-#
-# TODO: detailed breakdown of which apps require which libs
-build_app() {
+    build mesa drm
+    build mesa mesa
+    build data bitmaps
     build app appres
     build app bdftopcf
     build app beforelight
@@ -1005,6 +1136,7 @@ build_app() {
     build app xmh
     build app xmodmap
     build app xmore
+    build app xpr
     build app xprop
     build app xrandr
     build app xrdb
@@ -1020,21 +1152,10 @@ build_app() {
     build app xwd
     build app xwininfo
     build app xwud
-}
-
-build_mesa() {
-    build mesa drm
-    build mesa mesa
-}
-
-# The server requires at least the following libraries:
-# Xfont, Xau, Xdmcp, pciaccess
-build_xserver() {
     build xserver ""
-}
-
-build_driver_input() {
-    # Some drivers are only buildable on some OS'es
+    case $HOST_OS in
+	Linux) build libevdev "";;
+    esac
     case $HOST_OS in
 	Linux)
 	    build driver xf86-input-evdev
@@ -1044,131 +1165,89 @@ build_driver_input() {
 	    build driver xf86-input-joystick
 	    ;;
     esac
-
-    # And some drivers are only buildable on some CPUs.
     case $HOST_CPU in
 	i*86 | amd64 | x86_64 | i86pc)
 	    build driver xf86-input-vmmouse
 	    ;;
     esac
-
-    build driver xf86-input-keyboard
-    build driver xf86-input-mouse
-    build driver xf86-input-synaptics
-    build driver xf86-input-void
-}
-
-build_driver_video() {
-    # Some drivers are only buildable on some OS'es
     case $HOST_OS in
-	FreeBSD)
-	    case $HOST_CPU in
-		sparc64)
+        Darwin)
+	    ;;
+	*)
+	    build driver xf86-input-keyboard
+	    build driver xf86-input-mouse
+	    build driver xf86-input-synaptics
+	    build driver xf86-input-void
+	    case $HOST_OS in
+		FreeBSD)
+		    case $HOST_CPU in
+			sparc64)
+			    build driver xf86-video-sunffb
+			    ;;
+		    esac
+		    ;;
+		NetBSD | OpenBSD)
+		    build driver xf86-video-wsfb
 		    build driver xf86-video-sunffb
 		    ;;
+		Linux)
+		    build driver xf86-video-sisusb
+		    build driver xf86-video-sunffb
+		    build driver xf86-video-v4l
+		    build driver xf86-video-xgixp
+		    case $HOST_CPU in
+			i*86)
+	                    # AMD Geode CPU. Driver contains 32 bit assembler code
+			    build driver xf86-video-geode
+			    ;;
+		    esac
+		    ;;
 	    esac
-	    ;;
-	NetBSD | OpenBSD)
-	    build driver xf86-video-wsfb
-	    build driver xf86-video-sunffb
-	    ;;
-	Linux)
-	    build driver xf86-video-sisusb
-	    build driver xf86-video-sunffb
-	    build driver xf86-video-v4l
-	    build driver xf86-video-xgixp
 	    case $HOST_CPU in
-		i*86)
-                    # AMD Geode CPU. Driver contains 32 bit assembler code
-		    build driver xf86-video-geode
+		sparc | sparc64)
+		    build driver xf86-video-suncg14
+		    build driver xf86-video-suncg3
+		    build driver xf86-video-suncg6
+		    build driver xf86-video-sunleo
+		    build driver xf86-video-suntcx
+		    ;;
+		i*86 | amd64 | x86_64 | i86pc)
+	            build driver xf86-video-i740
+	            build driver xf86-video-intel
 		    ;;
 	    esac
+	    build driver xf86-video-apm
+	    build driver xf86-video-ark
+	    build driver xf86-video-ast
+	    build driver xf86-video-ati
+	    build driver xf86-video-chips
+	    build driver xf86-video-cirrus
+	    build driver xf86-video-dummy
+	    build driver xf86-video-fbdev
+	    build driver xf86-video-glint
+	    build driver xf86-video-i128
+	    build driver xf86-video-mach64
+	    build driver xf86-video-mga
+	    build driver xf86-video-modesetting
+	    build driver xf86-video-neomagic
+	    build driver xf86-video-nv
+	    build driver xf86-video-rendition
+	    build driver xf86-video-r128
+	    build driver xf86-video-s3
+	    build driver xf86-video-s3virge
+	    build driver xf86-video-savage
+	    build driver xf86-video-siliconmotion
+	    build driver xf86-video-sis
+	    build driver xf86-video-tdfx
+	    build driver xf86-video-tga
+	    build driver xf86-video-trident
+	    build driver xf86-video-tseng
+	    build driver xf86-video-vesa
+	    build driver xf86-video-vmware
+	    build driver xf86-video-voodoo
 	    ;;
     esac
-
-    # Some drivers are only buildable on some architectures
-    case $HOST_CPU in
-	sparc | sparc64)
-	    build driver xf86-video-suncg14
-	    build driver xf86-video-suncg3
-	    build driver xf86-video-suncg6
-	    build driver xf86-video-sunleo
-	    build driver xf86-video-suntcx
-	    ;;
-	i*86 | amd64 | x86_64 | i86pc)
-            build driver xf86-video-i740
-            build driver xf86-video-intel
-	    ;;
-    esac
-
-    build driver xf86-video-apm
-    build driver xf86-video-ark
-    build driver xf86-video-ast
-    build driver xf86-video-ati
-    build driver xf86-video-chips
-    build driver xf86-video-cirrus
-    build driver xf86-video-dummy
-    build driver xf86-video-fbdev
-#    build driver xf86-video-glide
-    build driver xf86-video-glint
-    build driver xf86-video-i128
-    build driver xf86-video-mach64
-    build driver xf86-video-mga
-    build driver xf86-video-modesetting
-    build driver xf86-video-neomagic
-    build driver xf86-video-nv
-    build driver xf86-video-rendition
-    build driver xf86-video-r128
-    build driver xf86-video-s3
-    build driver xf86-video-s3virge
-    build driver xf86-video-savage
-    build driver xf86-video-siliconmotion
-    build driver xf86-video-sis
-    build driver xf86-video-tdfx
-    build driver xf86-video-tga
-    build driver xf86-video-trident
-    build driver xf86-video-tseng
-    build driver xf86-video-vesa
-    build driver xf86-video-vmware
-    build driver xf86-video-voodoo
-}
-
-# The server must be built before the drivers
-build_driver() {
-    # XQuartz doesn't need these...
-    case $HOST_OS in
-        Darwin) return 0 ;;
-    esac
-
-# Build the Wrapper library for evdev devices
-    case $HOST_OS in
-	Linux)
-	    build libevdev ""
-	    ;;
-    esac
-    build_driver_input
-    build_driver_video
-}
-
-# All fonts require mkfontscale and mkfontdir to be available
-#
-# The following fonts require bdftopcf to be available:
-#   adobe-100dpi, adobe-75dpi, adobe-utopia-100dpi, adobe-utopia-75dpi,
-#   arabic-misc, bh-100dpi, bh-75dpi, bh-lucidatypewriter-100dpi,
-#   bh-lucidatypewriter-75dpi, bitstream-100dpi, bitstream-75dpi,
-#   cronyx-cyrillic, cursor-misc, daewoo-misc, dec-misc, isas-misc,
-#   jis-misc, micro-misc, misc-cyrillic, misc-misc, mutt-misc,
-#   schumacher-misc, screen-cyrillic, sony-misc, sun-misc and
-#   winitzki-cyrillic
-#
-# The font util component must be built before any of the fonts, since they
-# use the fontutil.m4 installed by it.   (As do several other modules, such
-# as libfontenc and app/xfs, which is why it is moved up to the top.)
-#
-# The alias component is recommended to be installed after the other fonts
-# since the fonts.alias files reference specific fonts installed from the
-# other font components
-build_font() {
+    build data cursors
     build font encodings
     build font adobe-100dpi
     build font adobe-75dpi
@@ -1205,178 +1284,14 @@ build_font() {
     build font winitzki-cyrillic
     build font xfree86-type1
     build font alias
-}
-
-# makedepend requires xproto
-build_util() {
     build util cf
     build util imake
     build util gccmakedep
     build util lndir
-
     build xkeyboard-config ""
-}
-
-# xorg-docs requires xorg-sgml-doctools
-build_doc() {
-    build doc xorg-sgml-doctools
-    build doc xorg-docs
-}
-
-# just process the sub-projects supplied in the given file ($MODFILE)
-# in the order in which they are found in the list
-# (prerequisites and ordering are the responsibility of the user)
-# globals used:
-#   $MODFILE - readable file containing list of modules to process
-#              and their optional configuration options
-# arguments:
-#   (none)
-# returns:
-#   0 - good
-#   1 - bad
-process_module_file() {
-    # preconds
-    if [ X"$MODFILE" = X ]; then
-	echo "internal process_module_file() error, \$MODFILE is empty"
-	return 1
-    fi
-    if [ ! -r "$MODFILE" ]; then
-	echo "module file '$MODFILE' is not readable or does not exist"
-	return 1
-    fi
-
-    # read from input file, skipping blank and comment lines
-    while read line; do
-	# skip blank lines
-	if [ X"$line" = X ]; then
-	    continue
-	fi
-
-	# skip comment lines
-	echo "$line" | grep "^#" > /dev/null
-	if [ $? -eq 0 ]; then
-	    continue
-	fi
-
-	# parse each line to extract module, component and options name
-	field1=`echo $line | cut -d' ' -f1`
-	module=`echo $field1 | cut -d'/' -f1`
-	component=`echo $field1 | cut -d'/' -s -f2`
-	confopts=`echo $line | cut -d' ' -s -f2-`
-
-	build $module "$component" "$confopts"
-
-    done <"$MODFILE"
-
     return 0
 }
 
-usage() {
-    basename="`expr "//$0" : '.*/\([^/]*\)'`"
-    echo "Usage: $basename [options] [prefix]"
-    echo "Options:"
-    echo "  -a          Do NOT run auto config tools (autogen.sh, configure)"
-    echo "  -b          Use .build.unknown build directory"
-    echo "  -c          Run make clean in addition to \"all install\""
-    echo "  -D          Run make dist in addition to \"all install\""
-    echo "  -d          Run make distcheck in addition \"all install\""
-    echo "  -g          Compile and link with debug information"
-    echo "  -h, --help  Display this help and exit successfully"
-    echo "  -n          Do not quit after error; just print error message"
-    echo "  -o module/component"
-    echo "              Build just this module/component"
-    echo "  -p          Update source code before building (git pull --rebase)"
-    echo "  -s sudo     The command name providing superuser privilege"
-    echo "  --autoresume resumefile"
-    echo "              Append module being built to, and autoresume from, <file>"
-    echo "  --check     Run make check in addition \"all install\""
-    echo "  --clone     Clone non-existing repositories (uses \$GITROOT if set)"
-    echo "  --cmd command"
-    echo "              Execute arbitrary git, gmake, or make command"
-    echo "  --confflags options"
-    echo "              Pass options to autgen.sh/configure of all modules"
-    echo "  --modfile modulefile"
-    echo "              Only process the module/components specified in modulefile"
-    echo "              Any text after, and on the same line as, the module/component"
-    echo "              is assumed to be configuration options for the configuration"
-    echo "              of each module/component specifically"
-    echo "  --retry-v1  Remake 'all' on failure with Automake silent rules disabled"
-    echo ""
-    echo "Usage: $basename -L"
-    echo "  -L          Just list modules to build"
-    echo ""
-    envoptions
-}
-
-# Ensure the named variable value contains a full path name
-# arguments:
-#   $1 - the variable value (the path to examine)
-#   $2 - the name of the variable
-# returns:
-#   returns nothing or exit on error with message
-check_full_path () {
-    path=$1
-    varname=$2
-    if [ X"`expr $path : "\(.\)"`" != X/ ]; then
-	echo "The path \"$path\" supplied by \"$varname\" must be a full path name"
-	echo ""
-	usage
-	exit 1
-    fi
-}
-
-# Ensure the named variable value contains a writable directory
-# arguments:
-#   $1 - the variable value (the path to examine)
-#   $2 - the name of the variable
-# returns:
-#   returns nothing or exit on error with message
-check_writable_dir () {
-    path=$1
-    varname=$2
-    if [ X"$SUDO" = X ]; then
-	if [ ! -d "$path" ] || [ ! -w "$path" ]; then
-	    echo "The path \"$path\" supplied by \"$varname\" must be a writable directory"
-	    echo ""
-	    usage
-	    exit 1
-	fi
-    fi
-}
-
-# perform sanity checks on cmdline args which require arguments
-# arguments:
-#   $1 - the option being examined
-#   $2 - the argument to the option
-# returns:
-#   if it returns, everything is good
-#   otherwise it exit's
-required_arg() {
-    option=$1
-    arg=$2
-    # preconds
-    if [ X"$option" = X ]; then
-	echo "internal required_arg() error, missing first argument"
-	exit 1
-    fi
-
-    # check for an argument
-    if [ X"$arg" = X ]; then
-	echo "the '$option' option is missing its required argument"
-	echo ""
-	usage
-	exit 1
-    fi
-
-    # does the argument look like an option?
-    echo $arg | grep "^-" > /dev/null
-    if [ $? -eq 0 ]; then
-	echo "the argument '$arg' of option '$option' looks like an option itself"
-	echo ""
-	usage
-	exit 1
-    fi
-}
 
 #------------------------------------------------------------------------------
 #			Script main line
@@ -1616,24 +1531,7 @@ if [ X"$BUILT_MODULES_FILE" != X -a -r "$BUILT_MODULES_FILE" ]; then
 fi
 
 if [ X"$MODFILE" = X ]; then
-    # We must install the global macros before anything else
-    build util macros
-    build font util
-
-    build_doc
-    build_proto
-    # Required by mesa and depends on xproto
-    build util makedepend
-    build_lib
-    build_mesa
-
-    build data bitmaps
-    build_app
-    build_xserver
-    build_driver
-    build_data
-    build_font
-    build_util
+    build_all_modules
 else
     process_module_file
 fi
-- 
1.7.9.5



More information about the xorg-devel mailing list