diff options
Diffstat (limited to 'build.sh')
-rwxr-xr-x | build.sh | 610 |
1 files changed, 254 insertions, 356 deletions
@@ -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 |