#!/bin/sh # # Build and install XFree86 on Slackware Linux. # VERSION=4.4.0 ARCH=i486 COMPILE_OPTIONS="-O2 -march=i486 -mcpu=i686" BUILD=3 # ***************************************************** # ************** GLIDE SUPPORT ********************** # ***************************************************** # If you want to build against Glide, run with $1 = YES # See more info below. # [more info]: It seems that as of XFree86 4.3.0 it is no longer # necessary to build X with libglide3 in order to support 3dfx DRI. # The tdfx_dri.so driver will be built either way, and appears to # be the same. Instead of being linked with libglide, it does # runtime library discovery which also allows it to find versions # of glide for all the various 3dfx cards instead of just the most # common ones that we were including in previous builds. # # Just in case, we'll leave most of the glide cruft in place. GLIDE=$1 TMP=/tmp BLOC=$TMP/xfree86-build PKG=$BLOC/package-xfree86 if [ ! -d $TMP ]; then mkdir -p $TMP fi rm -rf $BLOC $PKG mkdir -p $BLOC $PKG if [ "$GLIDE" = "YES" ]; then echo "*** building X with Glide support ***" sleep 2 else echo "*** building X without Glide support ***" sleep 2 fi CWD=`pwd` cd $BLOC rm -rf xc for file in $CWD/XFree86-${VERSION}-src-?.tar.bz2 ; do tar xjvf $file done cd xc chown -R root.root . zcat $CWD/site.def.diff.gz | patch -p1 --backup --verbose --suffix=.orig -E zcat $CWD/Xlib.h.diff.gz | patch -p1 --backup --verbose --suffix=.orig -E #zcat $CWD/xclock.glibc.diff.gz | patch -p1 --backup --verbose --suffix=.orig -E zcat $CWD/linux.cf.zlib.diff.gz | patch -p1 --backup --verbose --suffix=.orig -E zcat $CWD/XFree86-4.4.0-VeraIt.diff.gz | patch -p1 --backup --verbose --suffix=.orig -E # Upgrade some libraries: ( cd lib rm -rf Xcursor tar xjf $CWD/Xcursor-1.1.2.tar.bz2 rm -rf Xft tar xjf $CWD/Xft-2.1.5.tar.bz2 rm -rf Xrender tar xjf $CWD/Xrender-0.8.4.tar.bz2 ) # Set various compile defaults in host.def: cat << EOF > config/cf/host.def /* * By default, the sample config files for xinit, xdm and xfs are installed * only when there is no pre-existing version installed. Uncommenting the * following lines will force the sample versions to be installed even if * it means over-writing existing versions. */ #define InstallXinitConfig YES #define InstallXdmConfig YES #define InstallFSConfig YES /* Other Slackware defaults */ #define FSUseSyslog YES #define HasPam NO #define UseUtempter YES #define HasZlib YES #define SharedLibGlu YES /* Build static libs, too */ #define ForceNormalLib YES /* Let XFree86 provide freetype2 at first, or it might not build correctly */ /* Later we can replace this with a newer version (if it passes our test suite) */ #define BuildFreetype2 YES /* We use our own expat */ #define HasExpat YES /* We will allow XFree86 to build fontconfig, but will later upgrade it. */ /* #define HasFontconfig YES */ /* These are just examples if you use Glide... */ /* #define HasGlide3 YES */ /* #define Glide3IncDir /usr/include/glide3 */ EOF # If we have the precompiled fonts, use those: if [ -r $CWD/fonts.tar.bz2 ]; then cat << EOF >> config/cf/host.def /* Don't build the fonts, as we've already got them */ #define BuildFonts NO EOF mkdir -p /usr/X11R6/lib/X11 ( cd /usr/X11R6/lib/X11 tar xjvf $CWD/fonts.tar.bz2 ) mkdir -p $PKG/usr/X11R6/lib/X11 ( cd $PKG/usr/X11R6/lib/X11 tar xjvf $CWD/fonts.tar.bz2 ) else # otherwise build the fonts from source cat << EOF >> config/cf/host.def /* Build the X fonts from source */ #define BuildFonts YES EOF fi if [ "$GLIDE" = "YES" ]; then # This edits host.def to add HasGlide3. You'll need to install the a DRI capable # version of Glide for your video card class (voodoo3/banshee, or voodoo4/5), then the # tdfx DRI module will be built for that card. cat << EOF >> config/cf/host.def #define HasGlide3 YES #define Glide3IncDir /usr/include/glide3 EOF fi # pkgconfig files (like alocal files) are best placed in a single location, like /usr/lib/pkgconfig. # First make sure the pkgconfig directories exist: mkdir -p /usr/lib/pkgconfig /usr/X11R6/lib/pkgconfig # Then, move any existing files. This may (and probably will) produce an error if # /usr/X11R6/lib/pkgconfig is empty, so we'll silence stderr: mv /usr/X11R6/lib/pkgconfig/* /usr/lib/pkgconfig 2> /dev/null # Finally, make a link from the old location to the system-wide one: ( cd /usr/X11R6/lib ; rm -rf pkgconfig ) ( cd /usr/X11R6/lib ; ln -sf ../../lib/pkgconfig . ) # Now set up the same structure in the target install location: mkdir -p $PKG/usr/lib/pkgconfig $PKG/usr/X11R6/lib ( cd $PKG/usr/X11R6/lib ; rm -rf pkgconfig ) ( cd $PKG/usr/X11R6/lib ; ln -sf ../../lib/pkgconfig . ) # It's VERY important to build freetype2 ourselves first (or some functions are left # out), but also to use the XFree86 supplied sources. # # Step one is to remove existing freetype2 cruft: rm -rf /usr/include/freetype2 \ /usr/X11R6/include/freetype2 \ /usr/X11R6/include/ft2build.h \ /usr/lib/libfreetype.* \ /usr/X11R6/lib/libfreetype.* # It seems prudent to move this into /usr rather than /usr/X11R6, as *many* source bits # won't find ft2build.h in /usr/X11R6/include without some patching. # Therefore, --prefix=/usr must be the ad-hoc standard. Another # rationale: /usr is also the prefix for freetype1 (for as long as that sticks around), # and putting them in different prefixes causes problems. Also, we're bumping the -march # from i386 to i486, as I can't imagine too many people are running the latest Slackware # with X on a 386 in the year 2002. If there are, maybe they can get away with running an # earlier version of X. :-) ( cd extras/freetype2 CFLAGS="$COMPILE_OPTIONS" make setup CFG="--prefix=/usr $ARCH-slackware-linux" make -j2 # This only needs to go to the main system for now make install ) ldconfig # This shouldn't be needed (apps should pick up -I/usr/include/freetype2 from # `freetype-config --cflags` while compiling), but it's so often reported as a bug that # I'll give in to the point. Now that Freetype1 is pretty much gone having this link # shouldn't hurt anything. Try not to rely on it, though. ( cd /usr/include rm -rf freetype ln -sf freetype2/freetype . ) # Build and install XFree86: make World -j2 -i CDEBUGFLAGS="$COMPILE_OPTIONS" make install DESTDIR=$PKG # Save the fonts so we don't need to build them the next time. if [ ! -r $CWD/fonts.tar.bz2 ]; then ( cd $PKG/usr/X11R6/lib/X11/fonts find . -type f | xargs chmod 644 ) ( cd $PKG/usr/X11R6/lib/X11 tar cjvf $CWD/fonts.tar.bz2 fonts ) fi # OK, now we must spam your development box to ensure that the our rebuild of # fontconfig links against the correct libraries. We'll also be doing this # with the freetype rebuild. It saves many problems that could crop up with # the compile, and besides, that's what a development box is for. It should # be disposable. :-) make install ldconfig # Install man pages: make install.man DESTDIR=$PKG # Just to be on the safe side, we should provide Compose files where # they are missing, as it's been known to cause a crash. for dir in $PKG/usr/X11R6/lib/X11/locale/* ; do if [ -d $dir ]; then if [ -r $dir/XI18N_OBJS -o -r $dir/XLC_LOCALE ]; then if [ ! -r $dir/Compose ]; then NAME=`basename $dir` CAPN=`echo $NAME | tr [a-z] [A-Z]` cat << EOF > $dir/Compose # # $CAPN Compose Sequence # # Sequence Definition # # \$XFree86: xc/nls/Compose/$NAME,v 1.2 `date` volkerdi Exp $ # # This file currently has no entries. It appears that a compose file (even # just an empty one) is required for the appropriate keysyms to work for # this encoding. # # Means # Special Character # End of Sequence Definition EOF fi fi fi done # These are currently broken with Qt, but we'll install them anyway. # Someday they might work in Konsole again. mkdir -p $PKG/usr/X11R6/lib/X11/fonts/misc cat $CWD/linux8x16.pcf.gz > $PKG/usr/X11R6/lib/X11/fonts/misc/linux8x16.pcf.gz cat $CWD/linux8x8.pcf.gz > $PKG/usr/X11R6/lib/X11/fonts/misc/linux8x8.pcf.gz # Don't need this rm -f /usr/X11R6/lib/X11/config/host.def rm -f $PKG/usr/X11R6/lib/X11/config/host.def mkdir -p $PKG/etc/X11/xinit cat $CWD/xinit/README.Xmodmap > $PKG/etc/X11/xinit/README.Xmodmap # obsolete #cat $CWD/xinit/.Xmodmap > $PKG/etc/X11/xinit/.Xmodmap # Perms needed for ordinary users to start X: chown root.bin $PKG/usr/X11R6/bin/XFree86 chmod 4711 $PKG/usr/X11R6/bin/XFree86 cp -a $PKG/etc/X11/xdm/Xsession $PKG/etc/X11/xdm/Xsession.orig cp -a $PKG/etc/X11/xdm/Xsetup_0 $PKG/etc/X11/xdm/Xsetup_0.orig cat $CWD/xdm/Xsession > $PKG/etc/X11/xdm/Xsession cat $CWD/xdm/Xsetup_0 > $PKG/etc/X11/xdm/Xsetup_0 ## I don't get this #cat $CWD/xdm/Xsession.orig > $PKG/etc/X11/xdm/Xsession.orig #cat $CWD/xdm/Xsetup_0.orig > $PKG/etc/X11/xdm/Xsetup_0.orig # Treat some of these as config files: mv $PKG/etc/X11/xdm/Xsession $PKG/etc/X11/xdm/Xsession.new mv $PKG/etc/X11/xdm/xdm-config $PKG/etc/X11/xdm/xdm-config.new mv $PKG/etc/X11/xdm/Xservers $PKG/etc/X11/xdm/Xservers.new rm -rf $PKG/install mkdir $PKG/install zcat $CWD/doinst.sh.gz > $PKG/install/doinst.sh if [ "$GLIDE" = "YES" ]; then cat $CWD/README.tdfx > $PKG/usr/X11R6/lib/modules/dri/README.tdfx fi # Cruft. rm -f /usr/X11R6/lib/libz.a rm -f $PKG/usr/X11R6/lib/libz.a # We'll use the encodings on the system, so hopefully they are the right ones... ( cd $PKG/usr/X11R6/lib/X11/fonts/misc mkfontdir -e /usr/X11R6/lib/X11/fonts/encodings -e /usr/X11R6/lib/X11/fonts/encodings/large . ) ## These are now handled properly without our help :-) #( cd $PKG/etc/X11/xdm # rm authdir # ln -sf ../../../var/lib/xdm authdir #) #( cd /etc/X11/xkb # rm compiled # ln -sf ../../../var/lib/xkb compiled #) mv $PKG/etc/X11/xinit/xinitrc $PKG/etc/X11/xinit/xinitrc.twm chmod 755 $PKG/etc/X11/xinit/xinitrc.twm mkdir -p $PKG/var/log/setup cat $CWD/setup.05.fontconfig > $PKG/var/log/setup/setup.05.fontconfig chmod 755 $PKG/var/log/setup/setup.05.fontconfig cat $CWD/xfree86-devel/doinst.sh > $PKG/install/doinst.sh.devel cp $CWD/slack-desc/slack-desc.* $PKG/install cat << EOF >> $PKG/install/doinst.sh.fonts #!/bin/sh # Update the X font indexes: if [ -x /usr/X11R6/bin/fc-cache ]; then /usr/X11R6/bin/fc-cache -f fi # else we'll catch it later with setup.fontconfig :-) # make links: EOF # A tool for configuring S3 Savage cards: cd $BLOC rm -rf s3switch mkdir s3switch cd s3switch unzip $CWD/savage/s3ssrc.zip make cat s3switch > $PKG/usr/X11R6/bin/s3switch chmod 755 $PKG/usr/X11R6/bin/s3switch cat s3switch.1x | gzip -9c > $PKG/usr/X11R6/man/man1/s3switch.1x.gz # Replace freetype2: cd $CWD ./freetype2.build ldconfig DESTDIR=$PKG ./freetype2.build # Replace fontconfig: cd $CWD ./fontconfig.build ldconfig DESTDIR=$PKG ./fontconfig.build # crud removal: rm -rf $PKG/usr/X11R6/share/doc # We don't ship fonts.cache-1 files, we create them later. find $PKG/usr -type f -name fonts.cache-1 -exec rm {} \; # Strip binaries: ( cd $PKG find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs strip --strip-unneeded 2> /dev/null ) # Compress all manpages: find $PKG/usr/X11R6/man -name "*.?" | xargs gzip -9 find $PKG/usr/X11R6/man -name "*.?x" | xargs gzip -9 cat << EOF Slackware X build complete! EOF # Prep the output package: chown -R root.bin $PKG/usr/bin $PKG/usr/X11R6/bin # xfree86-fonts-misc package: PKG2=$BLOC/package-xfree86-fonts-misc mkdir -p $PKG2/usr/X11R6/lib/X11/fonts $PKG2/install mv $PKG/usr/X11R6/lib/X11/fonts/75dpi $PKG2/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/CID $PKG2/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/encodings $PKG2/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/misc $PKG2/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/util $PKG2/usr/X11R6/lib/X11/fonts # Make other directories to avoid fontpath warnings: mkdir -p \ $PKG2/usr/X11R6/lib/X11/fonts/TTF \ $PKG2/usr/X11R6/lib/X11/fonts/Type1 \ $PKG2/usr/X11R6/lib/X11/fonts/local \ $PKG2/usr/X11R6/lib/X11/fonts/Speedo \ $PKG2/usr/X11R6/lib/X11/fonts/100dpi \ $PKG2/usr/X11R6/lib/X11/fonts/cyrillic cp $PKG/install/doinst.sh.fonts $PKG2/install/doinst.sh mv $PKG/install/slack-desc.xfree86-fonts-misc $PKG2/install/slack-desc # xfree86-fonts-100dpi package: PKG3=$BLOC/package-xfree86-fonts-100dpi mkdir -p $PKG3/usr/X11R6/lib/X11/fonts $PKG3/install mv $PKG/usr/X11R6/lib/X11/fonts/100dpi $PKG3/usr/X11R6/lib/X11/fonts cp $PKG/install/doinst.sh.fonts $PKG3/install/doinst.sh mv $PKG/install/slack-desc.xfree86-fonts-100dpi $PKG3/install/slack-desc # xfree86-fonts-cyrillic package: PKG4=$BLOC/package-xfree86-fonts-cyrillic mkdir -p $PKG4/usr/X11R6/lib/X11/fonts $PKG4/install mv $PKG/usr/X11R6/lib/X11/fonts/cyrillic $PKG4/usr/X11R6/lib/X11/fonts cp $PKG/install/doinst.sh.fonts $PKG4/install/doinst.sh mv $PKG/install/slack-desc.xfree86-fonts-cyrillic $PKG4/install/slack-desc # xfree86-fonts-scale package: PKG5=$BLOC/package-xfree86-fonts-scale mkdir -p $PKG5/usr/X11R6/lib/X11/fonts $PKG5/install mv $PKG/usr/X11R6/lib/X11/fonts/TTF $PKG5/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/Type1 $PKG5/usr/X11R6/lib/X11/fonts mv $PKG/usr/X11R6/lib/X11/fonts/Speedo $PKG5/usr/X11R6/lib/X11/fonts cp $PKG/install/doinst.sh.fonts $PKG5/install/doinst.sh mv $PKG/install/slack-desc.xfree86-fonts-scale $PKG5/install/slack-desc # xfree86-docs-html package: PKG6=$BLOC/package-xfree86-docs-html mkdir -p $PKG6/usr/X11R6/lib/X11/doc $PKG6/install mv $PKG/usr/X11R6/lib/X11/doc/html $PKG6/usr/X11R6/lib/X11/doc mv $PKG/install/slack-desc.xfree86-docs-html $PKG6/install/slack-desc # xfree86-docs package: PKG7=$BLOC/package-xfree86-docs mkdir -p $PKG7/usr/X11R6/lib/X11 $PKG7/install mv $PKG/usr/X11R6/lib/X11/doc $PKG7/usr/X11R6/lib/X11 mv $PKG/install/slack-desc.xfree86-docs $PKG7/install/slack-desc # xfree86-xnest package: PKG8=$BLOC/package-xfree86-xnest mkdir -p $PKG8/usr/X11R6/bin $PKG8/install chown root.bin $PKG8/usr/X11R6/bin mv $PKG/usr/X11R6/bin/Xnest $PKG8/usr/X11R6/bin mv $PKG/install/slack-desc.xfree86-xnest $PKG8/install/slack-desc # xfree86-xprt package: PKG9=$BLOC/package-xfree86-xprt mkdir -p $PKG9/usr/X11R6/bin $PKG9/install chown root.bin $PKG9/usr/X11R6/bin mv $PKG/usr/X11R6/bin/Xprt $PKG9/usr/X11R6/bin mv $PKG/install/slack-desc.xfree86-xprt $PKG9/install/slack-desc # xfree86-xvfb package: PKG10=$BLOC/package-xfree86-xvfb mkdir -p $PKG10/usr/X11R6/bin $PKG10/install chown root.bin $PKG10/usr/X11R6/bin mv $PKG/usr/X11R6/bin/Xvfb $PKG10/usr/X11R6/bin mv $PKG/install/slack-desc.xfree86-xvfb $PKG10/install/slack-desc # xfree86-devel package: PKG11=$BLOC/package-xfree86-devel mkdir -p $PKG11/usr/X11R6/lib/X11 $PKG11/usr/lib $PKG11/usr/X11R6/man $PKG11/install mv $PKG/usr/lib/pkgconfig $PKG11/usr/lib # The version in XFree86 doesn't install this, so we do: if [ ! -r $PKG11/usr/lib/pkgconfig/freetype2.pc ]; then cat $CWD/freetype2.pc > $PKG11/usr/lib/pkgconfig/freetype2.pc fi chmod 644 $PKG11/usr/lib/pkgconfig/* mv $PKG/usr/X11R6/lib/pkgconfig $PKG11/usr/X11R6/lib mv $PKG/usr/X11R6/lib/X11/config $PKG11/usr/X11R6/lib/X11 mv $PKG/usr/X11R6/lib/*.a $PKG11/usr/X11R6/lib mv $PKG/usr/lib/*.a $PKG11/usr/lib mv $PKG/usr/X11R6/man/man3 $PKG11/usr/X11R6/man mv $PKG/usr/share $PKG11/usr mv $PKG/usr/include $PKG11/usr mv $PKG/usr/X11R6/src $PKG11/usr/X11R6 mv $PKG/usr/X11R6/include $PKG11/usr/X11R6 # We don't want it all, we just want a little bit. mkdir -p $PKG/usr/X11R6/include/X11 mv $PKG11/usr/X11R6/include/X11/bitmaps $PKG/usr/X11R6/include/X11 mv $PKG11/usr/X11R6/include/X11/pixmaps $PKG/usr/X11R6/include/X11 # Don't ship this: mv $PKG/install/slack-desc.xfree86-devel $PKG11/install/slack-desc mv $PKG/install/doinst.sh.devel $PKG11/install/doinst.sh # Clean up leftover stuff: rm -f $PKG/install/doinst.sh.fonts \ $PKG/install/slack-desc.xfree86-drm # Don't ship anything in here: rm -f $PKG/usr/X11R6/lib/X11/fonts/local/* # Build the packages: cd $PKG mv install/slack-desc.xfree86 install/slack-desc makepkg -l y -c n ../xfree86-$VERSION-$ARCH-$BUILD.tgz cd $PKG2 makepkg -l y -c n ../xfree86-fonts-misc-$VERSION-noarch-$BUILD.tgz cd $PKG3 makepkg -l y -c n ../xfree86-fonts-100dpi-$VERSION-noarch-$BUILD.tgz cd $PKG4 makepkg -l y -c n ../xfree86-fonts-cyrillic-$VERSION-noarch-$BUILD.tgz cd $PKG5 makepkg -l y -c n ../xfree86-fonts-scale-$VERSION-noarch-$BUILD.tgz cd $PKG6 makepkg -l y -c n ../xfree86-docs-html-$VERSION-noarch-$BUILD.tgz cd $PKG7 makepkg -l y -c n ../xfree86-docs-$VERSION-noarch-$BUILD.tgz cd $PKG8 makepkg -l y -c n ../xfree86-xnest-$VERSION-$ARCH-$BUILD.tgz cd $PKG9 makepkg -l y -c n ../xfree86-xprt-$VERSION-$ARCH-$BUILD.tgz cd $PKG10 makepkg -l y -c n ../xfree86-xvfb-$VERSION-$ARCH-$BUILD.tgz cd $PKG11 makepkg -l y -c n ../xfree86-devel-$VERSION-$ARCH-$BUILD.tgz cat << EOF Slackware X .tgz packages build complete! EOF