#!/usr/bin/bash
# Maintainer    : Obarun Packagers <pkg@obarun.org>
# Obarun PkgSrc : https://git.obarun.org/obarun-pkgbuild-extra/xorg-server
#----------------
# Website       : http://xorg.freedesktop.org
#------------------------------------------------------------------------
# DESCRIPTION ]
pkgbase=xorg-server
pkgver=21.1.1
pkgrel=4

pkgname=(
	'xorg-server'
	'xorg-server-xephyr'
	'xorg-server-xvfb'
	'xorg-server-xnest'
	'xorg-server-common'
	'xorg-server-devel')

url="https://xorg.freedesktop.org/releases/individual/xserver"

#source=(${pkgbase}-${pkgver}::git+https://gitlab.freedesktop.org/xorg/xserver.git#commit=27a0ee32ccef8d621aaa758c804fc9a5ceeb5a56
source=($url/${pkgbase}-${pkgver}.tar.xz{,.sig}
	xvfb-run # with updates from FC master
	xvfb-run.1
	Xwrapper.config
	0001_revert_dpi_calculation.patch)

#------------------------
# INSTALL CONFIGURATION ]

arch=('x86_64')
groups=('xorg')

backup=(
    'etc/X11/Xwrapper.config')

#----------------------
# BUILD CONFIGURATION ]

makedepends=(
	'xorgproto'
	'pixman'
	'libx11'
	'mesa'
	'xtrans'
	'libxkbfile'
	'libxfont2'
	'libpciaccess'
	'libxv'
	'libxcvt'
	'libxmu'
	'libxrender'
	'libxi'
	'libxaw'
	'libxtst'
	'libxres'
	'xorg-xkbcomp'
	'xorg-util-macros'
	'xorg-font-util'
	'libepoxy'
	'xcb-util'
	'xcb-util-image'
	'xcb-util-renderutil'
	'xcb-util-wm'
	'xcb-util-keysyms'
	'libxshmfence'
	'libunwind'
	'meson')

#--------------------
# BUILD PREPARATION ]

prepare() {
  cd "${pkgbase}-${pkgver}"
  # revert dpi calculation that leads to unwanted miscalculation results
  # https://gitlab.freedesktop.org/xorg/xserver/-/issues/1241
  # https://bugs.archlinux.org/task/72661
  patch -Rp1 -i ../0001_revert_dpi_calculation.patch

}

#----------------
# BUILD CONTROL ]

build() {
  # Since pacman 5.0.2-2, hardened flags are now enabled in makepkg.conf
  # With them, module fail to load with undefined symbol.
  # See https://bugs.archlinux.org/task/55102 / https://bugs.archlinux.org/task/54845
  export CFLAGS=${CFLAGS/-fno-plt}
  export CXXFLAGS=${CXXFLAGS/-fno-plt}
  export LDFLAGS=${LDFLAGS/,-z,now}

  arch-meson ${pkgbase}-$pkgver build \
    -D xkb_dir=/usr/share/X11/xkb \
    -D xkb_output_dir=/var/lib/xkb \
    -D ipv6=true \
    -D xvfb=true \
    -D xnest=true \
    -D xcsecurity=true \
    -D xorg=true \
    -D xephyr=true \
    -D glamor=true \
    -D udev=true \
    -D dtrace=false \
    -D systemd_logind=false \
    -D suid_wrapper=true \
    -D xkb_dir=/usr/share/X11/xkb \
    -D xkb_output_dir=/var/lib/xkb

  # Print config
  meson configure build
#  ninja -C build
  meson compile -C build

  # fake installation to be seperated into packages
  # DESTDIR="${srcdir}/fakeinstall" ninja -C build install
  meson install -C build --destdir "${srcdir}/fakeinstall"
}

_install() {
  local src f dir
  for src; do
    f="${src#fakeinstall/}"
    dir="${pkgdir}/${f%/*}"
    install -m755 -d "${dir}"
    # use copy so a new file is created and fakeroot can track properties such as setuid
    cp -av "${src}" "${dir}/"
    rm -rf "${src}"
  done
}

package_xorg-server-common() {
  pkgdesc="Xorg server common files"
  depends=(
	xkeyboard-config
	xorg-xkbcomp
	xorg-setxkbmap
	libxcvt)

  _install fakeinstall/usr/lib/xorg/protocol.txt
  _install fakeinstall/usr/share/man/man1/Xserver.1

  install -m644 -Dt "${pkgdir}/var/lib/xkb/" "${pkgbase}-${pkgver}"/xkb/README.compiled
  # license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING
}

package_xorg-server() {
  pkgdesc="Xorg X server"
  depends=(
	libepoxy
	libxfont2
	pixman
	xorg-server-common
	libunwind
	dbus
	libgl
	xf86-input-libinput
	nettle
	libpciaccess
	libdrm
	libxshmfence # FS#52949
	libxcvt) 

    ## see xorg-server-*/hw/xfree86/common/xf86Module.h for ABI versions.
    ## we provide major numbers that drivers can depend on
    ## and /usr/lib/pkgconfig/xorg-server.pc in xorg-server-devel pkg
  provides=(
	'X-ABI-VIDEODRV_VERSION=25.2'
	'X-ABI-XINPUT_VERSION=24.4'
	'X-ABI-EXTENSION_VERSION=10.0'
	'x-server')
  conflicts=(
	'nvidia-utils<=331.20'
	'glamor-egl'
	'xf86-video-modesetting')
  replaces=(
	'glamor-egl'
	'xf86-video-modesetting')
  
  _install fakeinstall/usr/bin/{X,Xorg,gtf}
  _install fakeinstall/usr/lib/Xorg{,.wrap}
  _install fakeinstall/usr/lib/xorg/modules/*
  _install fakeinstall/usr/share/X11/xorg.conf.d/10-quirks.conf
  _install fakeinstall/usr/share/man/man1/{Xorg,Xorg.wrap,gtf}.1
  _install fakeinstall/usr/share/man/man4/{exa,fbdevhw,inputtestdrv,modesetting}.4
  _install fakeinstall/usr/share/man/man5/{Xwrapper.config,xorg.conf,xorg.conf.d}.5

  # distro specific files must be installed in /usr/share/X11/xorg.conf.d
  install -m755 -d "${pkgdir}/etc/X11/xorg.conf.d"

    ## Xwrapper.config
    install -Dm0644 Xwrapper.config "${pkgdir}"/etc/X11/Xwrapper.config
  # license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING
}

package_xorg-server-xephyr() {
  pkgdesc="A nested X server that runs as an X application"
	depends=(
	libxfont2
	libgl
	libepoxy
	libunwind
	libxv
	pixman
	xorg-server-common
	xcb-util-image
	xcb-util-renderutil
	xcb-util-wm
	xcb-util-keysyms
	nettle
	libtirpc)

  _install fakeinstall/usr/bin/Xephyr
  _install fakeinstall/usr/share/man/man1/Xephyr.1

  # license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING
}

package_xorg-server-xvfb() {
  pkgdesc="Virtual framebuffer X server"
  depends=(
	libxfont2
	libunwind
	pixman
	xorg-server-common
	xorg-xauth
	libgl
	nettle
	libtirpc)

  _install fakeinstall/usr/bin/Xvfb
  _install fakeinstall/usr/share/man/man1/Xvfb.1

  install -m755 "${srcdir}/xvfb-run" "${pkgdir}/usr/bin/"
  install -m644 "${srcdir}/xvfb-run.1" "${pkgdir}/usr/share/man/man1/" # outda

  # license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING
}

package_xorg-server-xnest() {
  pkgdesc="A nested X server that runs as an X application"
  depends=(
	libxfont2
	libxext 
	pixman 
	xorg-server-common 
	nettle 
	libtirpc)

  _install fakeinstall/usr/bin/Xnest
  _install fakeinstall/usr/share/man/man1/Xnest.1

  ## license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING
}

package_xorg-server-devel() {
  pkgdesc="Development files for the X.Org X server"
  depends=(
	'xorgproto'
	'mesa'
	'libpciaccess'
           # not technically required but almost every Xorg pkg needs it to build
	'xorg-util-macros')

  _install fakeinstall/usr/include/xorg/*
  _install fakeinstall/usr/lib/pkgconfig/xorg-server.pc
  _install fakeinstall/usr/share/aclocal/xorg-server.m4

  # license
  install -m644 -Dt "${pkgdir}/usr/share/licenses/${pkgname}" "${pkgbase}-${pkgver}"/COPYING

  # make sure there are no files left to install
  #  rm fakeinstall/usr/bin/Xwayland  ## no such file
  find fakeinstall -depth -print0 | xargs -0 rmdir
}

#---------------------------
# LICENSE AND VERIFICATION ]

license=('custom')

validpgpkeys=('FD0004A26EADFE43A4C3F249C6F7AE200374452D') # Povilas Kanapickas <povilas@radix.lt>

sha512sums=('8608ed9c1537c95e8a3adea5e3e372a3c5eb841f8e27c84283093f22fb1909e16a800006510da684b13f8f237f33b8a4be3e2537f5f9ab9af4c5ad12770eef0d' #  xorg-server-21.1.1.tar.xz
	'360669d336d26095dc8f46cfb45a2c25c6a50318726719146de4f81d8ea94e3422cb21a394c23eee8de55179f7b3007edc9ec7e1c615ec86033177922c0e6257' #  xorg-server-21.1.1.tar.xz.sig
	'4154dd55702b98083b26077bf70c60aa957b4795dbf831bcc4c78b3cb44efe214f0cf8e3c140729c829b5f24e7466a24615ab8dbcce0ac6ebee3229531091514' #  xvfb-run
	'de5e2cb3c6825e6cf1f07ca0d52423e17f34d70ec7935e9dd24be5fb9883bf1e03b50ff584931bd3b41095c510ab2aa44d2573fd5feaebdcb59363b65607ff22' #  xvfb-run.1
	'97315b682bef7892d3cf641ea9add6e0d22901150763930020302cc73de5fe5bda0f47384b7d405c7169cb5f072d27da306066063d5a8ea116e97ea474caffe8' #  Xwrapper.config
	'28021ef9879d5313096c3e7e79a71a2e15be366652845acf32239d5c011c60aa5938c63c23b04bb0dee56df7b3762b7ca8d51d5925898c67c2ba83ec468fe782') #  0001_revert_dpi_calculation.patch