]> de.git.xonotic.org Git - xonotic/netradiant.git/blobdiff - gamepack-manager
library-bundler: rely on gcp instead of cp on macos
[xonotic/netradiant.git] / gamepack-manager
index d7669659a14363c2f3dac24c702a9ee8c2efcdb2..4a3f63afd49da9df459d62117311db89e536abeb 100755 (executable)
@@ -3,8 +3,8 @@
 # get usage help this way:
 # ./gamepack_manager -h
 
-: "${CP:=cp -v}"
-: "${CP_R:=cp -r --preserve=timestamps}"
+: "${CP:=cp -va}"
+: "${CP_R:=cp -Rva}"
 : "${GIT:=git}"
 : "${SVN:=svn}"
 : "${WGET:=wget}"
@@ -55,21 +55,25 @@ cat <<\EOF
 # Usable packs                                        #
 #######################################################
 
+AlienArena      GPL          svn     https://svn.code.sf.net/p/alienarena-cc/code/trunk/tools/netradiant_gamepack/AlienArenaPack
 DarkPlaces      GPL          svn     svn://svn.icculus.org/gtkradiant-gamepacks/DarkPlacesPack/branches/1.5/
 Doom3           proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/Doom3Pack/branches/1.5/
 ET              proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/ETPack/branches/1.5/
 Heretic2        proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/Her2Pack/branches/1.5/
 JediAcademy     proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/JAPack/branches/1.5/
+Kingpin         unknown      zip     http://download.kingpin.info/kingpin/editing/maps/map_editors/NetRadiant/addon/Kingpinpack.zip
 Neverball       proprietary  zip     http://ingar.intranifty.net/files/netradiant/gamepacks/NeverballPack.zip
 Nexuiz          GPL          gitdir  git://git.icculus.org/divverent/nexuiz.git misc/netradiant-NexuizPack master
 OpenArena       GPL          git     https://github.com/NeonKnightOA/oagamepack.git
 Osirion         GPL          zip     http://ingar.intranifty.net/files/netradiant/gamepacks/OsirionPack.zip
 Prey            proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/PreyPack/trunk/
 Q3              proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/Q3Pack/trunk/ 29
+Q3Rally         proprietary  svn     https://svn.code.sf.net/p/q3rallysa/code/tools/radiant-config/radiant15-netradiant/
 Quake2          proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/Q2Pack/branches/1.5/
 Quake4          proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/Q4Pack/branches/1.5/
 Quake           GPL          zip     http://ingar.intranifty.net/files/netradiant/gamepacks/Quake1Pack.zip
 Quetoo          GPL          svn     svn://svn.icculus.org/gtkradiant-gamepacks/QuetooPack/branches/1.5/
+SmokinGuns      unknown      git     https://github.com/smokin-guns/smokinguns-mapeditor-support.git
 Tremulous       proprietary  zip     http://ingar.intranifty.net/files/netradiant/gamepacks/TremulousPack.zip
 TurtleArena     proprietary  git     https://github.com/Turtle-Arena/turtle-arena-radiant-pack.git
 UFOAI           proprietary  svn     svn://svn.icculus.org/gtkradiant-gamepacks/UFOAIPack/branches/1.5/
@@ -80,8 +84,50 @@ Xonotic         GPL          git     https://gitlab.com/xonotic/netradiant-xonot
 EOF
 }
 
+if command -v gsed >/dev/null
+then
+       SED=gsed
+elif sed --help >/dev/null 2>&1
+then
+       SED=sed
+else
+       printf 'ERROR: GNU sed is missing\n' >&2
+       exit 1
+fi
+
+printRealPath ()
+{
+       if command -v grealpath >/dev/null
+       then
+               grealpath "${1}"
+       elif command -v realpath >/dev/null
+       then
+               realpath "${1}"
+       elif command -v greadlink >/dev/null
+       then
+               # test greadlink first as greadlink has the feature on macos
+               # but readlink only has it on linux, note that it's probably
+               # the same on bsd
+               # note: (g)readlink requires the file to be create first
+               greadlink -f "${1}"
+       elif command -v readlink >/dev/null
+       then
+               # --help and -f options are GNU readlink things
+               if readlink --help >/dev/null 2>&1
+               then
+                       readlink -f "${1}"
+               else
+                       if ! python -c "import os; print(os.path.realpath('${1}'))"
+                       then
+                               printf 'ERROR: GNU realpath or other way to compute real path of a file is missing\n' >&2
+                               exit 1
+                       fi
+               fi
+       fi
+}
+
 sanitizeDB () {
-       sed -e 's/#.*//;s/[ \t][ \t][ \t]*/\t/g;s/^[ \t]*//;s/[ \t]*$//' \
+       ${SED} -e 's/#.*//;s/[ \t][ \t][ \t]*/\t/g;s/^[ \t]*//;s/[ \t]*$//' \
        | grep -v '^$'
 }
 
@@ -99,7 +145,7 @@ printList () {
 dedupeList () {
        printList "${1}" \
        | tr '\n' ' ' \
-       | sed -e 's/ $//'
+       | ${SED} -e 's/ $//'
 }
 
 printGamePackDB () {
@@ -224,18 +270,14 @@ getValue () {
 
 downloadExtraUrls ()
 {
-       local dir
-
-       dir="${1}"
-
-       if [ -f "${dir}/extra-urls.txt" ]
+       if [ -f 'extra-urls.txt' ]
        then
-               while IFS='     ' read -r FILE URL
+               while IFS='     ' read -r extra_file extra_url
                do
                        (
-                               ${WGET} -O "${dir}/${FILE}" "${URL}"
+                               ${WGET} -O "${extra_file}" "${extra_url}"
                        ) </dev/null
-               done < "${dir}/extra-urls.txt"
+               done < 'extra-urls.txt'
        fi
 }
 
@@ -311,7 +353,12 @@ downloadPack () {
                                )
                                ${RM_R} "${pack}"
                                ${MKDIR} "${pack}"
-                               ${MV} 'zipdownload/'*'/'* "${pack}/"
+                               if [ -d 'zipdownload/games' ]
+                               then
+                                       ${MV} 'zipdownload/'* "${pack}/"
+                               else
+                                       ${MV} 'zipdownload/'*'/'* "${pack}/"
+                               fi
                                ${RM_R} 'zipdownload'
                                ;;
                        'gitdir')
@@ -334,11 +381,11 @@ downloadPack () {
                                ;;
                esac
 
-               if [ -d "${download_dir}/${pack}" ]
+               if [ -d "${pack}" ]
                then
                        (
-                               cd "${download_dir}/${pack}"
-                               downloadExtraUrls "${pack}"
+                               cd "${pack}"
+                               downloadExtraUrls
                        )
                fi
 
@@ -448,7 +495,7 @@ printHelp () {
        local prog_name
 
        tab="$(printf '\t')"
-       prog_name="$(basename "$(readlink -f "${0}")")"
+       prog_name='gamepack-manager'
 
        cat <<-EOF
        Usage: ${prog_name} [OPTION] [SELECTION <ARGUMENTS>] [ACTION]
@@ -465,13 +512,13 @@ printHelp () {
        ${tab}${tab}select games by name (default: none)
        ${tab}${tab}special keyword: all, none
        ${tab}${tab}available games:
-       $(printNameList | sed -e 's/^/\t\t\t/')
+       $(printNameList | ${SED} -e 's/^/\t\t\t/')
 
        ${tab}-l, --license LICENSES…
        ${tab}${tab}select games by license (default: none)
        ${tab}${tab}special keyword: free, all, none
        ${tab}${tab}available licenses:
-       $(printLicenseList | sed -e 's/^/\t\t\t/')
+       $(printLicenseList | ${SED} -e 's/^/\t\t\t/')
 
        ACTIONS:
        ${tab}-ln, --list-names
@@ -624,12 +671,24 @@ done
 # compatibility with legacy Makefile
 if [ "${DOWNLOAD_GAMEPACKS}" = 'yes' ]
 then
-       ! [ -z "${DOWNLOADDIR}" ] && download_dir="${DOWNLOADDIR}"
-       ! [ -z "${INSTALLDIR}" ] && install_dir="${INSTALDIR}"
+       if ! [ -z "${DOWNLOADDIR}" ]
+       then
+               download_dir="${DOWNLOADDIR}"
+       fi
+
+       if ! [ -z "${INSTALLDIR}" ]
+       then
+               install_dir="${INSTALLDIR}"
+       fi
+
        license_list='free'
        by_license='true'
+
        download_packs='true'
+       mkdir_download='true'
+
        install_packs='true'
+       mkdir_install='true'
 fi
 
 if [ -z "${download_dir}" ]
@@ -657,13 +716,13 @@ selected_list="$(dedupeList "${selected_list}")"
 if "${mkdir_download}"
 then
        ${MKDIR_P} "${download_dir}"
-       real_download_dir="$(readlink -f "${download_dir}")"
+       real_download_dir="$(printRealPath "${download_dir}")"
 fi
 
 if "${mkdir_install}"
 then
        ${MKDIR_P} "${install_dir}"
-       real_install_dir="$(readlink -f "${install_dir}")"
+       real_install_dir="$(printRealPath "${install_dir}")"
 fi
 
 if "${list_licenses}"