]> git.xonotic.org Git - xonotic/netradiant.git/commitdiff
Merge branch 'illwieckz/gtkglext' into 'master'
authorThomas Debesse <dev@illwieckz.net>
Tue, 22 Dec 2020 23:27:19 +0000 (23:27 +0000)
committerThomas Debesse <dev@illwieckz.net>
Tue, 22 Dec 2020 23:27:19 +0000 (23:27 +0000)
Make possible to build custom GtkGLExt and build macOS bundle

See merge request xonotic/netradiant!168

25 files changed:
CMakeLists.txt
bundle/CMakeLists.txt
cmake/FindGtkGLExt.cmake
contrib/CMakeLists.txt
easy-builder
library-bundler
libs/gtkutil/xorrectangle.cpp
plugins/CMakeLists.txt
radiant/mainframe.cpp
setup/apple/Contents/Info.plist [new file with mode: 0644]
setup/apple/Contents/Resources/netradiant.icns [new file with mode: 0644]
setup/apple/Makefile [deleted file]
setup/apple/NetRadiant.app/Contents/Info.plist [deleted file]
setup/apple/NetRadiant.app/Contents/MacOS/radiant [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/etc/fonts/fonts.conf [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/etc/gtk-2.0/gtkrc [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/etc/pango/pangorc [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/lib/.turd [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/radiant.icns [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/icons/.turd [deleted file]
setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/themes/.turd [deleted file]
setup/apple/README.md [deleted file]
setup/apple/netradiant [new file with mode: 0755]
tools/quake3/common/vfs.c
tools/unvanquished/daemonmap

index c6cc4464a3dfb724ecb81eaf7a8f43b41535793d..7e083638b63c6099553b74af7d8fd66dcf7591d8 100644 (file)
@@ -1,7 +1,46 @@
-cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
-list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
+cmake_minimum_required(VERSION 3.1 FATAL_ERROR)
+
 project(NetRadiant C CXX)
 
+#-----------------------------------------------------------------------
+# Builtins: configuration
+#-----------------------------------------------------------------------
+
+set(BUILTINS_INSTALL_DIR "${CMAKE_BINARY_DIR}/builtins")
+set(BUILTINS_INCLUDE_DIR "${BUILTINS_INSTALL_DIR}/include")
+set(BUILTINS_LIB_DIR "${BUILTINS_INSTALL_DIR}/lib")
+set(BUILTINS_PKGCONFIG_DIR "${BUILTINS_INSTALL_DIR}/lib/pkgconfig")
+
+option(BUILTIN_GTKGLEXT "Builtin GtkGLExt" OFF)
+
+set(BUILTIN_GTKGLEXT_BUILT OFF CACHE INTERNAL "...")
+if (EXISTS "${BUILTINS_INSTALL_DIR}/lib/pkgconfig/gtkglext-1.0.pc")
+    set(BUILTIN_GTKGLEXT_BUILT ON)
+endif ()
+
+if (EXISTS "${BUILTINS_INCLUDE_DIR}")
+    include_directories("${BUILTINS_INCLUDE_DIR}")
+endif ()
+
+if (EXISTS "${BUILTINS_LIB_DIR}")
+    set(ENV{LD_LIBRARY_PATH} "$ENV{LD_LIBRARY_PATH}:${BUILTINS_LIB_DIR}")
+    link_directories("${BUILTINS_LIB_DIR}")
+endif ()
+
+if (EXISTS "${BUILTINS_PKGCONFIG_DIR}")
+    set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${BUILTINS_PKGCONFIG_DIR}")
+endif ()
+
+#-----------------------------------------------------------------------
+# CMake modules
+#-----------------------------------------------------------------------
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
+
+#-----------------------------------------------------------------------
+# Submodules
+#-----------------------------------------------------------------------
+
 if (EXISTS "${PROJECT_SOURCE_DIR}/libs/crunch/inc/crn_decomp.h")
     set(DEFAULT_BUILD_CRUNCH ON CACHE INTERNAL "...")
 else ()
@@ -14,6 +53,10 @@ else ()
     set(DEFAULT_BUILD_DAEMONMAP OFF CACHE INTERNAL "...")
 endif ()
 
+#-----------------------------------------------------------------------
+# Build options
+#-----------------------------------------------------------------------
+
 option(BUILD_RADIANT "Build the GUI" ON)
 option(BUILD_TOOLS "Build the tools" ON)
 option(BUILD_CRUNCH "Build Crunch image support" ${DEFAULT_BUILD_CRUNCH})
@@ -27,6 +70,26 @@ if (BUILD_RADIANT OR BUILD_TOOLS)
     set(BUILD_BINARIES ON)
 endif ()
 
+if (BUILD_BINARIES)
+    if (WIN32 OR APPLE OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+        set(BUNDLING_SUPPORTED ON)
+    endif()
+
+    if (BUNDLING_SUPPORTED)
+        if(WIN32 AND NOT CMAKE_CROSSCOMPILING)
+            set(BUNDLE_LIBRARIES_DEFAULT ON)
+        else ()
+            set(BUNDLE_LIBRARIES_DEFAULT OFF)
+        endif ()
+
+        option(BUNDLE_LIBRARIES "Bundle libraries" ${BUNDLE_LIBRARIES_DEFAULT})
+    endif ()
+
+    if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
+        set(FHS_INSTALL OFF CACHE PATH "Disabled because of BUNDLE_LIBRARIES" FORCE)
+    endif ()
+endif ()
+
 #-----------------------------------------------------------------------
 # Paths
 #-----------------------------------------------------------------------
@@ -35,19 +98,32 @@ if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
     set(CMAKE_INSTALL_PREFIX "${PROJECT_SOURCE_DIR}/install" CACHE PATH "..." FORCE)
 endif ()
 
+if (APPLE)
+       set(APPLE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/NetRadiant.app)
+       set(FINAL_INSTALL_PREFIX ${APPLE_INSTALL_PREFIX}/Contents/Prefix)
+else ()
+       set(FINAL_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX})
+endif ()
+
 set(RADIANT_NAME "NetRadiant" CACHE INTERNAL "...")
 add_definitions(-DRADIANT_NAME="${RADIANT_NAME}")
 set(RADIANT_BASENAME "netradiant" CACHE INTERNAL "...")
 add_definitions(-DRADIANT_BASENAME="${RADIANT_BASENAME}")
 
-set(RADIANT_LIB_DIR ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "...")
-set(RADIANT_BIN_DIR ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "...")
-set(RADIANT_DATA_DIR ${CMAKE_INSTALL_PREFIX} CACHE INTERNAL "...")
+set(RADIANT_BIN_DIR ${FINAL_INSTALL_PREFIX} CACHE INTERNAL "...")
+set(RADIANT_LIB_DIR ${FINAL_INSTALL_PREFIX}/lib CACHE INTERNAL "...")
+set(RADIANT_ADDONS_DIR ${FINAL_INSTALL_PREFIX} CACHE INTERNAL "...")
+set(RADIANT_ETC_DIR ${FINAL_INSTALL_PREFIX}/etc CACHE INTERNAL "...")
+set(RADIANT_SHARE_DIR ${FINAL_INSTALL_PREFIX}/share CACHE INTERNAL "...")
+set(RADIANT_DATA_DIR ${FINAL_INSTALL_PREFIX} CACHE INTERNAL "...")
 
 if (FHS_INSTALL AND NOT BUNDLE_LIBRARIES)
-    set(RADIANT_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/${RADIANT_BASENAME})
-    set(RADIANT_BIN_DIR ${CMAKE_INSTALL_PREFIX}/bin)
-    set(RADIANT_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/${RADIANT_BASENAME})
+    set(RADIANT_BIN_DIR ${FINAL_INSTALL_PREFIX}/bin)
+    set(RADIANT_LIB_DIR ${FINAL_INSTALL_PREFIX}/lib)
+    set(RADIANT_ADDONS_DIR ${RADIANT_LIB_DIR}/${RADIANT_BASENAME})
+    set(RADIANT_ETC_DIR ${FINAL_INSTALL_PREFIX}/etc)
+    set(RADIANT_SHARE_DIR ${FINAL_INSTALL_PREFIX}/share)
+    set(RADIANT_DATA_DIR ${RADIANT_SHARE_DIR}/${RADIANT_BASENAME})
 endif ()
 
 set(GAMEPACKS_DOWNLOAD_DIR ${PROJECT_BINARY_DIR}/download CACHE PATH "Where to store downloaded game packs")
@@ -159,6 +235,12 @@ if (BUILD_RADIANT)
             add_definitions(-DWORKAROUND_WINDOWS_GTK2_GLWIDGET=1)
         endif ()
     endif ()
+
+    if (APPLE)
+        if (GTK_TARGET EQUAL 2)
+            add_definitions(-DWORKAROUND_MACOS_GTK2_DESTROY=1)
+        endif ()
+    endif ()
 endif ()
 
 #-----------------------------------------------------------------------
@@ -224,26 +306,6 @@ if (BUILD_BINARIES)
     include_directories("${PROJECT_SOURCE_DIR}/include")
     include_directories("${PROJECT_SOURCE_DIR}/libs")
 
-    if (WIN32 OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
-        set(BUNDLING_SUPPORTED ON)
-    endif()
-
-    if (BUNDLING_SUPPORTED)
-        if(WIN32 AND NOT CMAKE_CROSSCOMPILING)
-            set(BUNDLE_LIBRARIES_DEFAULT ON)
-        else ()
-            set(BUNDLE_LIBRARIES_DEFAULT OFF)
-        endif ()
-
-        option(BUNDLE_LIBRARIES "Bundle libraries" ${BUNDLE_LIBRARIES_DEFAULT})
-    endif ()
-
-    if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
-        add_subdirectory(bundle)
-
-        set(FHS_INSTALL OFF CACHE PATH "Disabled because of BUNDLE_LIBRARIES" FORCE)
-    endif ()
-
     macro (copy_dlls target)
         if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
             add_custom_command(TARGET ${target} POST_BUILD
@@ -256,6 +318,67 @@ if (BUILD_BINARIES)
     endmacro ()
 endif ()
 
+#-----------------------------------------------------------------------
+# Bundle
+#-----------------------------------------------------------------------
+
+if (BUILD_BINARIES)
+    if (BUNDLE_LIBRARIES AND BUNDLING_SUPPORTED)
+        add_subdirectory(bundle)
+    endif ()
+endif ()
+
+#-----------------------------------------------------------------------
+# Builtins: targets
+#-----------------------------------------------------------------------
+
+add_custom_target(builtins)
+
+if (BUILTIN_GTKGLEXT)
+    include(${CMAKE_ROOT}/Modules/ExternalProject.cmake)
+
+    execute_process(COMMAND pkg-config --libs gdk-2.0 gtk+-2.0 glib-2.0 gl
+        OUTPUT_VARIABLE GTKGLEXT_LDFLAGS
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+    )
+    set(GTKGLEXT_LDFLAGS "$ENV{LDFLAGS} -lm ${GTKGLEXT_LDFLAGS}")
+
+    if (NOT CMAKE_BUILD_TYPE MATCHES Release)
+               set(GTKGLEXT_CFLAGS "$ENV{CFLAGS} -g")
+       else ()
+               set(GTKGLEXT_CFLAGS "$ENV{CFLAGS}")
+       endif()
+
+    set(CONFIGURE_OPTIONS --disable-gtk-doc --disable-gtk-doc-html --disable-gtk-doc-pdf)
+
+    if (APPLE)
+        set(GTKGLEXT_GIT_TAG macos)
+    else ()
+        set(GTKGLEXT_GIT_TAG fixes)
+    endif ()
+
+    ExternalProject_Add(gtkglext
+        GIT_REPOSITORY https://gitlab.gnome.org/illwieckz/gtkglext.git
+        GIT_TAG ${GTKGLEXT_GIT_TAG}
+        BUILD_IN_SOURCE ON
+        CONFIGURE_COMMAND export LDFLAGS=${GTKGLEXT_LDFLAGS}
+        CONFIGURE_COMMAND && NOCONFIGURE=1 ./autogen.sh
+        CONFIGURE_COMMAND && ./configure --prefix "${BUILTINS_INSTALL_DIR}" ${CONFIGURE_OPTIONS}
+        BUILD_COMMAND $(MAKE) CFLAGS=${GTKGLEXT_CFLAGS} LDFLAGS=${GTKGLEXT_LDFLAGS}
+        INSTALL_COMMAND $(MAKE) install
+    )
+
+    include_directories("${BUILTINS_INSTALL_DIR}/lib/gtkglext-1.0/include")
+    include_directories("${BUILTINS_INSTALL_DIR}/include/gtkglext-1.0")
+
+    add_dependencies(builtins gtkglext)
+    set_target_properties(gtkglext PROPERTIES EXCLUDE_FROM_ALL ON)
+endif ()
+
+if (BUNDLE_LIBRARIES AND EXISTS ${BUILTINS_LIB_DIR})
+    set(CMAKE_SKIP_BUILD_RPATH ON)
+endif()
+
 #-----------------------------------------------------------------------
 # Libraries
 #-----------------------------------------------------------------------
@@ -362,30 +485,35 @@ if (BUILD_BINARIES)
 endif ()
 
 if (DOWNLOAD_GAMEPACKS)
-    if (FHS_INSTALL)
-       set(GAME_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share/netradiant")
-    else ()
-       set(GAME_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}")
-    endif ()
-
     install(DIRECTORY
         ${PROJECT_BINARY_DIR}/gamepacks
         DESTINATION ${RADIANT_DATA_DIR}
     )
 endif ()
 
-if(BUILD_BINARIES AND FHS_INSTALL AND NOT WIN32 AND NOT APPLE)
+if (BUILD_BINARIES AND FHS_INSTALL AND NOT WIN32 AND NOT APPLE)
     install(FILES
-        ${PROJECT_SOURCE_DIR}/icons/netradiant.png
-        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/pixmaps
+        icons/netradiant.png
+        DESTINATION ${RADIANT_SHARE_DIR}/pixmaps
     )
     install(FILES
-        ${PROJECT_SOURCE_DIR}/icons/netradiant.desktop
-        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications
+        icons/netradiant.desktop
+        DESTINATION ${RADIANT_SHARE_DIR}/applications
     )
     install(FILES
-        ${PROJECT_SOURCE_DIR}/icons/mime/map.xml
-        DESTINATION ${CMAKE_INSTALL_PREFIX}/share/mime/model
+        icons/mime/map.xml
+        DESTINATION ${RADIANT_SHARE_DIR}/mime/model
+    )
+endif ()
+
+if (APPLE)
+    install(DIRECTORY
+        setup/apple/Contents
+        DESTINATION ${APPLE_INSTALL_PREFIX}
+    )
+    install(PROGRAMS
+        setup/apple/netradiant
+        DESTINATION ${APPLE_INSTALL_PREFIX}/Contents/MacOS
     )
 endif ()
 
index eb09c24daa56053b2f1713e0bab27b8b87a1e00b..f899cee009ee1308bedc7fcbfcaf47d5a5a52da6 100644 (file)
@@ -1,6 +1,10 @@
 if (WIN32)
     set(BUNDLE_OS_NAME "windows")
-       set(BUNDLE_SHARE ON)
+    set(BUNDLE_SHARE ON)
+elseif (APPLE)
+    set(BUNDLE_OS_NAME "macos")
+    set(BUNDLE_SHARE ON)
+    set(BUNDLE_ETC ON)
 elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
     set(BUNDLE_OS_NAME "linux")
 else ()
@@ -8,7 +12,9 @@ else ()
 endif ()
 
 add_custom_target(bundle ALL
-    COMMAND "${PROJECT_SOURCE_DIR}/library-bundler"
+    COMMAND
+    export LD_LIBRARY_PATH=$ENV{LD_LIBRARY_PATH} &&
+    "${PROJECT_SOURCE_DIR}/library-bundler"
     "${BUNDLE_OS_NAME}" "${PROJECT_BINARY_DIR}"
     VERBATIM
     COMMENT "Bundling libraries"
@@ -16,12 +22,19 @@ add_custom_target(bundle ALL
 
 install(DIRECTORY
     ${PROJECT_BINARY_DIR}/lib
-    DESTINATION ${CMAKE_INSTALL_PREFIX}
+    DESTINATION ${FINAL_INSTALL_PREFIX}
 )
 
 if (BUNDLE_SHARE)
     install(DIRECTORY
         ${PROJECT_BINARY_DIR}/share
-        DESTINATION ${CMAKE_INSTALL_PREFIX}
+        DESTINATION ${FINAL_INSTALL_PREFIX}
+    )
+endif ()
+
+if (BUNDLE_ETC)
+    install(DIRECTORY
+        ${PROJECT_BINARY_DIR}/etc
+        DESTINATION ${FINAL_INSTALL_PREFIX}
     )
 endif ()
index 8fa486e570fdb09b933a5d842d1d2f61a17562e8..fa8ddda9af38d324e0789a37bc6faf7d0c2c8441 100644 (file)
@@ -1,4 +1,5 @@
 find_package(PkgConfig)
+if (NOT BUILTIN_GTKGLEXT OR BUILTIN_GTKGLEXT_BUILT)
 if (PKG_CONFIG_FOUND)
     if (GtkGLExt_FIND_REQUIRED)
         set(_pkgconfig_REQUIRED REQUIRED)
@@ -25,3 +26,4 @@ else ()
     endif ()
 endif ()
 mark_as_advanced(GtkGLExt_INCLUDE_DIRS GtkGLExt_LIBRARIES)
+endif()
index f2515bf8bb235d8f91e7db81b88fa34619d96472..6fbe90a9eabde0782defc700ffd560cfc6590d73 100644 (file)
@@ -8,7 +8,7 @@ macro(radiant_plugin name)
     copy_dlls(${name})
     install(
             TARGETS ${name}
-            LIBRARY DESTINATION ${RADIANT_LIB_DIR}/plugins
+            LIBRARY DESTINATION ${RADIANT_ADDONS_DIR}/plugins
     )
 endmacro()
 
index 82c08d90836a84dc99d4b832d77f780d554bceff..845d2c7ca2e29f5a1e28fcf185fc6a5c923d4c8e 100755 (executable)
@@ -77,6 +77,12 @@ do
        fi
 done
 
+case "$(uname -s)" in
+       'Darwin')
+               cmake_user_opts[${#cmake_user_opts[@]}]='-DBUILTIN_GTKGLEXT=ON'
+               ;;
+esac
+
 set -x
 
 "${fetch_submodules_cmd[@]}"
@@ -91,6 +97,12 @@ cmake \
        "${cmake_user_opts[@]}" \
        "${project_source_dir}"
 
+cmake \
+       --build "${build_dir}" \
+       -- \
+       -j"${job_count}" \
+       'builtins'
+
 cmake \
        --build "${build_dir}" \
        -- \
index d5a439716aa88b950d24cd85b165a7a5e196faf2..62f48f12784bfe025c1bd779ff3861c147d913cf 100755 (executable)
@@ -2,6 +2,31 @@
 
 set -e
 
+export LANG='C.UTF-8'
+export LANGUAGE="${LANG}"
+
+_sed () {
+       case "${system_name}" in
+               'macos')
+                       gsed "${@}"
+                       ;;
+               *)
+                       sed "${@}"
+                       ;;
+       esac
+}
+
+_cpr () {
+       case "${system_name}" in
+               'macos')
+                       cp -R ${@}
+                       ;;
+               *)
+                       cp -R --preserve=timestamps ${@}
+                       ;;
+       esac
+}
+
 Common::noOp () {
        true
 }
@@ -27,20 +52,35 @@ Common::getPath () {
                        printf '%s\n' "${file_path}"
                fi
        fi \
-       | sed -e 's|/*$||'
+       | _sed -e 's|/*$||'
 }
 
 Common::grepLdd () {
-       egrep ' => '
+       case "${system_name}" in
+               'macos')
+                       egrep '^\t/'
+                       ;;
+               *)
+                       egrep ' => '
+                       ;;
+       esac
 }
 
 Common::stripLdd () {
-       sed -e 's/ (0x[0-9a-f]*)$//;s/^.* => //'
+       case "${system_name}" in
+               'macos')
+                       _sed -e 's/^\t\(.*\) (compatibility version .*/\1/'
+                       ;;
+               *)
+                       _sed -e 's/ (0x[0-9a-f]*)$//;s/^.* => //'
+                       ;;
+       esac
 }
 
 Multi::excludeLdd () {
        case "${system_name}" in
                'linux')
+                       # - always bundle built-in libraries
                        # - always rely on up-to-date x11 and gl libraries, bundling them will break on future distros
                        # - gtk is not easily bundlable on linux because it looks for harcoded system path to optional
                        #   shared libraries like image codecs, theme engines, sound notification system, etc.
@@ -49,11 +89,30 @@ Multi::excludeLdd () {
                        #   which is likely to pull gtk itself, x11 and gl dependencies
                        # - old fontconfig does not work correctly if newer fontconfig configuration is installed
                        # - if gtk and fontconfig is installed, pango and freetype are
-                       egrep -v '/libc\.|/libstdc\+\+\.|/libdl\.|/libm\.|/libX|/libxcb|/libGL|/libICE\.|/libSM\.|/libpthread\.' \
-                       | egrep -v '/libatk|/libgdk|/libgtk|/libgio|/libglib|/libgmodule|/libgobject|/libcairo|/libpango|/libfontconfig|/libfreetype'
+                       local ldd_line
+                       while read ldd_line
+                       do
+                               if echo "${ldd_line}" | egrep '/builtins/'
+                               then
+                                       echo "${ldd_line}"
+                               elif echo "${ldd_line}" \
+                                       | egrep -q '/libc\.|/libstdc\+\+\.|/libdl\.|/libm\.|/libX|/libxcb|/libGL|/libICE\.|/libSM\.|/libpthread\.'
+                               then
+                                       Common::noOp
+                               elif echo "${ldd_line}" \
+                                       | egrep -q '/libatk|/libgdk|/libgtk|/libgio|/libglib|/libgmodule|/libgobject|/libcairo|/libpango|/libfontconfig|/libfreetype'
+                               then
+                                       Common::noOp
+                               else
+                                       echo "${ldd_line}"
+                               fi
+                       done
                        ;;
                'windows')
-                       egrep -i '\.dll => [A-Z]:\\msys64\\' \
+                       egrep -i '\.dll => [A-Z]:\\msys64\\'
+                       ;;
+               'macos')
+                       egrep -v '^\t/System/|^\t/usr/lib/'
                        ;;
        esac
 }
@@ -75,6 +134,8 @@ Multi::printLdd () {
                'windows')
                        ntldd --recursive "${exe_file}"
                        ;;
+               'macos')
+                       otool -L "${exe_file}"
        esac
 }
 
@@ -86,6 +147,9 @@ Multi::getGtkThemeName () {
                'windows')
                        echo 'MS-Windows'
                        ;;
+               *)
+                       echo 'Raleigh'
+                       ;;
        esac
 }
 
@@ -97,6 +161,9 @@ Multi::getGtkLibName () {
                'windows')
                        echo 'libgtk-win32-2.0-0.dll'
                        ;;
+               'macos')
+                       echo 'libgtk-quartz-2.0.0.dylib'
+                       ;;
        esac
 }
 
@@ -113,6 +180,8 @@ Multi::getRootPrefix () {
                        | xargs -n1 -P1 which \
                        | cut -f2 -d'/'
                        ;;
+               'macos')
+                       echo 'usr/local'
        esac
 }
 
@@ -127,6 +196,9 @@ Multi::getLibPrefix () {
                'windows')
                        echo 'lib'
                        ;;
+               'macos')
+                       echo 'lib'
+                       ;;
        esac
 }
 
@@ -134,12 +206,27 @@ Multi::getGtkDeps () {
        local lib_prefix="${1}"
        local gtk_theme_name="${2}"
 
-       cat <<-EOF
-       share/themes/${gtk_theme_name}/gtk-2.0
-       share/icons/hicolor
-       ${lib_prefix}/gdk-pixbuf-2.0
-       ${lib_prefix}/gtk-2.0
-       EOF
+       case "${system_name}" in
+               'linux'|'windows')
+                       cat <<-EOF
+                       share/themes/${gtk_theme_name}/gtk-2.0
+                       share/icons/hicolor
+                       ${lib_prefix}/gdk-pixbuf-2.0
+                       ${lib_prefix}/gtk-2.0
+                       EOF
+                       ;;
+               'macos')
+                       cat <<-EOF
+                       etc/fonts
+                       share/themes/${gtk_theme_name}/gtk-2.0
+                       share/fontconfig
+                       share/icons/hicolor
+                       share/locale
+                       ${lib_prefix}/gdk-pixbuf-2.0
+                       ${lib_prefix}/gtk-2.0
+                       EOF
+                       ;;
+       esac
 
        case "${system_name}" in
                'linux')
@@ -153,8 +240,29 @@ Multi::getGtkDeps () {
        esac
 }
 
+Multi::rewriteLoadersCache () {
+       local bundle_component_path="${1}"
+       local cache_file
+
+       find "${bundle_component_path}" \
+               -type f \
+               \( \
+               -name 'loaders.cache' \
+               -o -name 'immodules.cache' \
+               \) \
+       | while read cache_file
+       do
+               _sed \
+                       -e 's|^"/[^"]*/lib/|"lib/|;s| "/[^"]*/share/| "share/|;/^# ModulesPath = /d;/^# Created by /d;/^#$/d' \
+                       -i "${cache_file}"
+       done
+}
+
 Multi::bundleGtkDepsFromFile () {
        local lib_file="${1}"
+       local component_dir
+       local real_component_dir
+       local bundle_component_dir
 
        lib_basename="$(basename "${lib_file}")"
 
@@ -167,14 +275,22 @@ Multi::bundleGtkDepsFromFile () {
 
                for component_dir in $(Multi::getGtkDeps "${lib_prefix}" "${gtk_theme_name}")
                do
-                       bundle_component_dir="$(echo "${component_dir}" | sed -e 's|^'"${lib_prefix}"'|lib|')"
+                       bundle_component_dir="$(echo "${component_dir}" | _sed -e 's|^'"${lib_prefix}"'|lib|')"
                        if ! [ -e "${bundle_dir}/${bundle_component_dir}" ]
                        then
-                               mkdir --parents "${bundle_dir}/$(dirname "${bundle_component_dir}")"
+                               real_component_dir="$(realpath "/${root_prefix}/${component_dir}")"
+
+                               mkdir -p "${bundle_dir}/$(dirname "${bundle_component_dir}")"
+
+                               _cpr -H -L \
+                                       "${real_component_dir}" \
+                                       "${bundle_dir}/${bundle_component_dir}"
 
-                               cp -H -r --preserve=timestamps \
-                                       "/${root_prefix}/${component_dir}" \
+                               touch -r \
+                                       "/${real_component_dir}" \
                                        "${bundle_dir}/${bundle_component_dir}"
+
+                               Multi::rewriteLoadersCache "${bundle_dir}/${bundle_component_dir}"
                        fi
                done
        fi
@@ -182,11 +298,18 @@ Multi::bundleGtkDepsFromFile () {
 
 Multi::bundleLibFromFile () {
        local exe_file="${1}"
+       local lib_file
 
        Multi::printLdd "${exe_file}" \
        | Multi::filterLib \
        | while read lib_file
        do
+               if [ "${lib_file}" = 'not found' ]
+               then
+                       printf 'ERROR: library not found while bundling %s (but link worked)\n' "${exe_file}" >&2
+                       Multi::printLdd "${exe_file}" | grep 'not found'
+                       exit 1
+               fi
                lib_basename="$(basename "${lib_file}")"
 
                if [ -f "${lib_dir}/${lib_basename}" ]
@@ -194,11 +317,21 @@ Multi::bundleLibFromFile () {
                        continue
                fi
 
-               cp --preserve=timestamps \
+               cp -H \
+                       "${lib_file}" \
+                       "${lib_dir}/${lib_basename}"
+
+               touch -r \
                        "${lib_file}" \
                        "${lib_dir}/${lib_basename}"
 
                Multi::bundleGtkDepsFromFile "${lib_file}"
+
+               case "${system_name}" in
+                       'macos')
+                               Multi::bundleLibFromFile "${lib_file}"
+                               ;;
+               esac
        done
 }
 
@@ -206,17 +339,18 @@ Multi::cleanUp () {
        find "${bundle_dir}/lib" \
                -type f \
                -name '*.a' \
-               -exec rm {} \;
+               -exec rm -f {} \;
 
        find "${bundle_dir}/lib" \
                -type f \
                -name '*.h' \
-               -exec rm {} \;
+               -exec rm -f {} \;
 
        find "${bundle_dir}/lib" \
                -depth \
                -type d \
-               -exec rmdir --ignore-fail-on-non-empty {} \;
+               -exec rmdir {} \; \
+       || true
 }
 
 Linux::getRpath () {
@@ -226,7 +360,7 @@ Linux::getRpath () {
        local path_start="$(printf '%s' "${bundle_dir}" | wc -c)"
        path_start="$((${path_start} + 1))"
 
-       local exe_subdir="$(echo "${exe_dir}" | cut -c "${path_start}-" | sed -e 's|//*|/|;s|^/||')"
+       local exe_subdir="$(echo "${exe_dir}" | cut -c "${path_start}-" | _sed -e 's|//*|/|;s|^/||')"
 
        local rpath_origin='$ORIGIN'
 
@@ -271,6 +405,38 @@ Linux::patchLib () {
        done
 }
 
+Darwin::patchExe () {
+       local exe_file="${1}"
+
+       Multi::printLdd "${exe_file}" \
+       | Multi::filterLib \
+       | while read lib_file
+       do
+               new_path="$(echo "${lib_file}" | _sed -e 's|^/.*/lib/|@executable_path/lib/|')"
+               id_name="$(echo "${lib_file}" | _sed -e 's|.*/||g')"
+               chmod u+w,go-w "${exe_file}"
+               install_name_tool -change "${lib_file}" "${new_path}" "${exe_file}"
+               install_name_tool -id "${id_name}" "${exe_file}"
+       done
+}
+
+Darwin::patchLib () {
+       local lib_dir="${1}"
+       local exe_file
+
+       find "${lib_dir}" \
+               -type f \
+               \( \
+               -name '*.dylib' \
+               -o -name '*.so' \
+               \) \
+       | while read exe_file
+       do
+               Darwin::patchExe "${exe_file}"
+               chmod ugo-x "${exe_file}"
+       done
+}
+
 Windows::listLibForManifest () {
        local lib_dir="${1}"
 
@@ -314,7 +480,7 @@ lib_action='Common::noOp'
 
 case "${system_name}" in
        'register')
-               mkdir --parents "${registry_dir}"
+               mkdir -p "${registry_dir}"
                Common::getPath "${exe_file}" > "${registry_dir}/$(uuidgen)"
                exit
                ;;
@@ -325,13 +491,17 @@ case "${system_name}" in
        'windows')
                lib_action='Windows::writeManifest'
                ;;
+       'macos')
+               exe_action='Darwin::patchExe'
+               lib_action='Darwin::patchLib'
+               ;;
        *)
                printf 'ERROR: unsupported system: %s\n' "${system_name}" >&2
                exit 1
                ;;
 esac
 
-mkdir --parents "${lib_dir}"
+mkdir -p "${lib_dir}"
 
 if [ -d "${registry_dir}" ]
 then
index c638e0e21fcaa61ffd01d77da3f7ef32c5942d98..56ae908a2e911c3ab7e65b6220d18dc6eed2e684 100644 (file)
@@ -16,6 +16,7 @@ void XORRectangle::lazy_init()
 
 void XORRectangle::draw() const
 {
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
     const int x = float_to_integer(m_rectangle.x);
     const int y = float_to_integer(m_rectangle.y);
     const int w = float_to_integer(m_rectangle.w);
@@ -26,6 +27,7 @@ void XORRectangle::draw() const
     cairo_set_source_rgb(cr, 1, 1, 1);
     cairo_set_operator(cr, CAIRO_OPERATOR_DIFFERENCE);
     cairo_stroke(cr);
+#endif
 }
 
 XORRectangle::XORRectangle(ui::GLArea widget) : m_widget(widget), cr(0)
@@ -35,7 +37,9 @@ XORRectangle::XORRectangle(ui::GLArea widget) : m_widget(widget), cr(0)
 XORRectangle::~XORRectangle()
 {
     if (initialised()) {
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
         cairo_destroy(cr);
+#endif
     }
 }
 
index b3d2909174cfe8490633cdb2767f04b0f356e528..8db4b7fa212ea1010dea0fea6eb11927da510765 100644 (file)
@@ -8,7 +8,7 @@ macro(radiant_plugin name)
     copy_dlls(${name})
     install(
             TARGETS ${name}
-            LIBRARY DESTINATION ${RADIANT_LIB_DIR}/modules
+            LIBRARY DESTINATION ${RADIANT_ADDONS_DIR}/modules
     )
 endmacro()
 
index 8a7691af94b0d16d92cd740429f47d90e6b2c832..b43a55221f96caf832fabf56974373aba84b1736 100644 (file)
@@ -2775,10 +2775,14 @@ MainFrame::~MainFrame(){
 
        for ( std::vector<ui::Widget>::iterator i = g_floating_windows.begin(); i != g_floating_windows.end(); ++i )
        {
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
                i->destroy();
+#endif
        }
 
+#ifndef WORKAROUND_MACOS_GTK2_DESTROY
        m_window.destroy();
+#endif
 }
 
 void MainFrame::SetActiveXY( XYWnd* p ){
diff --git a/setup/apple/Contents/Info.plist b/setup/apple/Contents/Info.plist
new file mode 100644 (file)
index 0000000..2b34323
--- /dev/null
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+        <key>CFBundleDevelopmentRegion</key>
+        <string>English</string>
+        <key>CFBundleDisplayName</key>
+        <string>NetRadiant</string>
+        <key>CFBundleExecutable</key>
+        <string>netradiant</string>
+        <key>CFBundleIconFile</key>
+        <string>netradiant.icns</string>
+        <key>CFBundleIdentifier</key>
+        <string>org.xonotic.netradiant</string>
+        <key>CFBundleName</key>
+        <string>NetRadiant</string>
+        <key>CFBundlePackageType</key>
+        <string>APPL</string>
+        <key>CFBundleShortVersionString</key>
+        <string>1.5.0</string>
+        <key>CFBundleSignature</key>
+        <string>????</string>
+        <key>CFBundleVersion</key>
+        <string>1.5.0</string>
+        <key>LSMinimumSystemVersion</key>
+        <string>10.7</string>
+</dict>
+</plist>
diff --git a/setup/apple/Contents/Resources/netradiant.icns b/setup/apple/Contents/Resources/netradiant.icns
new file mode 100644 (file)
index 0000000..339e718
Binary files /dev/null and b/setup/apple/Contents/Resources/netradiant.icns differ
diff --git a/setup/apple/Makefile b/setup/apple/Makefile
deleted file mode 100644 (file)
index cf85d97..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Makefile for NetRadiant.app, requires http://macdylibbundler.sourceforge.net/
-
-INSTALL = ../../install
-TARGET = target
-RESOURCES = $(TARGET)/NetRadiant.app/Contents/Resources
-BINDIR = $(RESOURCES)/install
-CONFDIR = $(RESOURCES)/etc
-DATADIR = $(RESOURCES)/share
-LIBDIR = $(RESOURCES)/lib
-VERSION = 1.5.0
-DMG = $(TARGET)/NetRadiant-$(VERSION).dmg
-VOLUME_NAME = "NetRadiant $(VERSION)"
-
-# We must rewrite some Gtk configuration files, which vary from environment to
-# environment depending on where you've installed MacPorts. Fun!
-
-MACPORTS_PREFIX := $(shell which port | sed 's:/bin/port::')
-PREFIX_SED_EXPR = "s:$(MACPORTS_PREFIX):@executable_path/..:g"
-
-all: install bundle
-
--pre-install:
-       install -d $(TARGET)
-       cp -r NetRadiant.app $(TARGET)
-       find $(TARGET) -name .turd -delete
-       
--gtk-runtime-gdk-pixbuf-2.0:
-       cp -r $(MACPORTS_PREFIX)/lib/gdk-pixbuf-2.0 $(LIBDIR)
-       find $(LIBDIR)/gdk-pixbuf-2.0 -type f ! -name "*.so" -delete
-       
-       gdk-pixbuf-query-loaders | sed $(PREFIX_SED_EXPR) > \
-               $(CONFDIR)/gtk-2.0/gdk-pixbuf.loaders
-
--gtk-runtime-pango:
-       cp -r $(MACPORTS_PREFIX)/lib/pango $(LIBDIR)
-       find $(LIBDIR)/pango -type f ! -name "*.so" -delete
-       
-       pango-querymodules | sed $(PREFIX_SED_EXPR) > \
-               $(CONFDIR)/pango/pango.modules
-       
--gtk-runtime: -gtk-runtime-gdk-pixbuf-2.0 -gtk-runtime-pango
-       cp -r $(MACPORTS_PREFIX)/lib/gtk-2.0 $(LIBDIR)
-       find $(LIBDIR)/gtk-2.0 -type f ! -name "*.so" -delete   
-       
-       rm -rf $(LIBDIR)/gtk-2.0/{includes,modules}
-       rm -rf $(LIBDIR)/gtk-2.0/*/printbackends
-       
-       cp -r $(MACPORTS_PREFIX)/share/themes/Default $(RESOURCES)/share
-       
-       gtk-query-immodules-2.0 | sed $(PREFIX_SED_EXPR) > \
-               $(CONFDIR)/gtk-2.0/gtk.immodules
-
-install: -pre-install -gtk-runtime
-       cp -r $(INSTALL) $(RESOURCES)
-       #rm -rf `find $(INSTDIR)/installs -type d -name .svn`
-
-bundle:
-       
-       # The Radiant plugins (modules) are a little funky
-       # Some of them are actually linked against the build directory
-       
-       test -L install || ln -s $(INSTALL)
-       
-       dylibbundler -b \
-               -x $(BINDIR)/radiant \
-               -x $(BINDIR)/q2map \
-               -x $(BINDIR)/q3data \
-               -x $(BINDIR)/q3map2 \
-               -x $(BINDIR)/qdata3 \
-               `find $(BINDIR)/modules -name "*.dylib" | xargs -I {} echo -x {}` \
-               `find $(LIBDIR) -name "*.dylib" | xargs -I {} echo -x {}` \
-       -d $(LIBDIR) -of -p @executable_path/../lib
-       
-       rm -f install
-
-image:
-       find $(TARGET) -name .DS_Store -delete
-       ln -f -s /Applications $(TARGET)/Applications
-       hdiutil create -ov $(DMG) -srcfolder $(TARGET) -volname $(VOLUME_NAME)
-       rm $(TARGET)/Applications
-
-clean:
-       rm -rf $(TARGET)/*
diff --git a/setup/apple/NetRadiant.app/Contents/Info.plist b/setup/apple/NetRadiant.app/Contents/Info.plist
deleted file mode 100644 (file)
index 75796b1..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-        <key>CFBundleDevelopmentRegion</key>
-        <string>English</string>
-        <key>CFBundleDisplayName</key>
-        <string>NetRadiant</string>
-        <key>CFBundleExecutable</key>
-        <string>radiant</string>
-        <key>CFBundleIconFile</key>
-        <string>radiant.icns</string>
-        <key>CFBundleIdentifier</key>
-        <string>org.xonotic.netradiant</string>
-        <key>CFBundleName</key>
-        <string>NetRadiant</string>
-        <key>CFBundlePackageType</key>
-        <string>APPL</string>
-        <key>CFBundleShortVersionString</key>
-        <string>1.5.0</string>
-        <key>CFBundleSignature</key>
-        <string>????</string>
-        <key>CFBundleVersion</key>
-        <string>1.5.0</string>
-        <key>LSMinimumSystemVersion</key>
-        <string>10.7</string>
-</dict>
-</plist>
diff --git a/setup/apple/NetRadiant.app/Contents/MacOS/radiant b/setup/apple/NetRadiant.app/Contents/MacOS/radiant
deleted file mode 100755 (executable)
index 701a7fe..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-
-RADIANT_HOME=$(dirname "$0")
-RADIANT_HOME=${RADIANT_HOME/NetRadiant.app*/NetRadiant.app}
-
-echo
-echo "Starting NetRadiant in ${RADIANT_HOME}"
-echo
-
-set -x
-
-resources="${RADIANT_HOME}/Contents/Resources"
-
-export FONTCONFIG_PATH="${resources}/etc/fonts"
-export FC_DEBUG=1024
-
-export GDK_GL_LIBGL_PATH="${resources}/lib/libGL.1.dylib"
-export GDK_GL_LIBGLU_PATH="${resources}/lib/libGLU.1.dylib"
-
-export GDK_PATH="${resources}"
-export GDK_PIXBUF_MODULE_FILE="${resources}/etc/gtk-2.0/gdk-pixbuf.loaders"
-
-export GOBJECT_PATH="${resources}"
-
-export GTK_DATA_PREFIX="${resources}"
-export GTK_EXE_PREFIX="${resources}"
-export GTK_PATH="${resources}"
-
-export PANGO_SYSCONFDIR="${resources}/etc"
-export PANGO_LIBDIR="${resources}/lib"
-
-cd "${resources}/install"
-./radiant &
-
-set +x
\ No newline at end of file
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/etc/fonts/fonts.conf b/setup/apple/NetRadiant.app/Contents/Resources/etc/fonts/fonts.conf
deleted file mode 100644 (file)
index 7183a4b..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<fontconfig>
-
-<!--
-  Adjusted FontConfig for GtkRadiant.app. Include only paths which Mac users
-  will more than likely have.
--->
-
-<!--
-  Font directory list
--->
-       <dir>/usr/X11/lib/X11/fonts</dir>
-       <dir>/Library/Fonts</dir>
-       <dir>/System/Library/Fonts</dir>
-       <dir prefix="xdg">fonts</dir>
-
-<!--
-  Accept deprecated 'mono' alias, replacing it with 'monospace'
--->
-       <match target="pattern">
-               <test qual="any" name="family">
-                       <string>mono</string>
-               </test>
-               <edit name="family" mode="assign" binding="same">
-                       <string>monospace</string>
-               </edit>
-       </match>
-
-<!--
-  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
--->
-       <match target="pattern">
-               <test qual="any" name="family">
-                       <string>sans serif</string>
-               </test>
-               <edit name="family" mode="assign" binding="same">
-                       <string>sans-serif</string>
-               </edit>
-       </match>
-
-<!--
-  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
--->
-       <match target="pattern">
-               <test qual="any" name="family">
-                       <string>sans</string>
-               </test>
-               <edit name="family" mode="assign" binding="same">
-                       <string>sans-serif</string>
-               </edit>
-       </match>
-
-<!-- Font cache directory list -->
-       <cachedir prefix="xdg">fontconfig</cachedir>
-
-       <config>
-<!--
-  These are the default Unicode chars that are expected to be blank
-  in fonts.  All other blank chars are assumed to be broken and
-  won't appear in the resulting charsets
- -->
-               <blank>
-                       <int>0x0020</int>       <!-- SPACE -->
-                       <int>0x00A0</int>       <!-- NO-BREAK SPACE -->
-                       <int>0x00AD</int>       <!-- SOFT HYPHEN -->
-                       <int>0x034F</int>       <!-- COMBINING GRAPHEME JOINER -->
-                       <int>0x0600</int>       <!-- ARABIC NUMBER SIGN -->
-                       <int>0x0601</int>       <!-- ARABIC SIGN SANAH -->
-                       <int>0x0602</int>       <!-- ARABIC FOOTNOTE MARKER -->
-                       <int>0x0603</int>       <!-- ARABIC SIGN SAFHA -->
-                       <int>0x06DD</int>       <!-- ARABIC END OF AYAH -->
-                       <int>0x070F</int>       <!-- SYRIAC ABBREVIATION MARK -->
-                       <int>0x115F</int>       <!-- HANGUL CHOSEONG FILLER -->
-                       <int>0x1160</int>       <!-- HANGUL JUNGSEONG FILLER -->
-                       <int>0x1680</int>       <!-- OGHAM SPACE MARK -->
-                       <int>0x17B4</int>       <!-- KHMER VOWEL INHERENT AQ -->
-                       <int>0x17B5</int>       <!-- KHMER VOWEL INHERENT AA -->
-                       <int>0x180E</int>       <!-- MONGOLIAN VOWEL SEPARATOR -->
-                       <int>0x2000</int>       <!-- EN QUAD -->
-                       <int>0x2001</int>       <!-- EM QUAD -->
-                       <int>0x2002</int>       <!-- EN SPACE -->
-                       <int>0x2003</int>       <!-- EM SPACE -->
-                       <int>0x2004</int>       <!-- THREE-PER-EM SPACE -->
-                       <int>0x2005</int>       <!-- FOUR-PER-EM SPACE -->
-                       <int>0x2006</int>       <!-- SIX-PER-EM SPACE -->
-                       <int>0x2007</int>       <!-- FIGURE SPACE -->
-                       <int>0x2008</int>       <!-- PUNCTUATION SPACE -->
-                       <int>0x2009</int>       <!-- THIN SPACE -->
-                       <int>0x200A</int>       <!-- HAIR SPACE -->
-                       <int>0x200B</int>       <!-- ZERO WIDTH SPACE -->
-                       <int>0x200C</int>       <!-- ZERO WIDTH NON-JOINER -->
-                       <int>0x200D</int>       <!-- ZERO WIDTH JOINER -->
-                       <int>0x200E</int>       <!-- LEFT-TO-RIGHT MARK -->
-                       <int>0x200F</int>       <!-- RIGHT-TO-LEFT MARK -->
-                       <int>0x2028</int>       <!-- LINE SEPARATOR -->
-                       <int>0x2029</int>       <!-- PARAGRAPH SEPARATOR -->
-                       <int>0x202A</int>       <!-- LEFT-TO-RIGHT EMBEDDING -->
-                       <int>0x202B</int>       <!-- RIGHT-TO-LEFT EMBEDDING -->
-                       <int>0x202C</int>       <!-- POP DIRECTIONAL FORMATTING -->
-                       <int>0x202D</int>       <!-- LEFT-TO-RIGHT OVERRIDE -->
-                       <int>0x202E</int>       <!-- RIGHT-TO-LEFT OVERRIDE -->
-                       <int>0x202F</int>       <!-- NARROW NO-BREAK SPACE -->
-                       <int>0x205F</int>       <!-- MEDIUM MATHEMATICAL SPACE -->
-                       <int>0x2060</int>       <!-- WORD JOINER -->
-                       <int>0x2061</int>       <!-- FUNCTION APPLICATION -->
-                       <int>0x2062</int>       <!-- INVISIBLE TIMES -->
-                       <int>0x2063</int>       <!-- INVISIBLE SEPARATOR -->
-                       <int>0x206A</int>       <!-- INHIBIT SYMMETRIC SWAPPING -->
-                       <int>0x206B</int>       <!-- ACTIVATE SYMMETRIC SWAPPING -->
-                       <int>0x206C</int>       <!-- INHIBIT ARABIC FORM SHAPING -->
-                       <int>0x206D</int>       <!-- ACTIVATE ARABIC FORM SHAPING -->
-                       <int>0x206E</int>       <!-- NATIONAL DIGIT SHAPES -->
-                       <int>0x206F</int>       <!-- NOMINAL DIGIT SHAPES -->
-                       <int>0x2800</int>       <!-- BRAILLE PATTERN BLANK -->
-                       <int>0x3000</int>       <!-- IDEOGRAPHIC SPACE -->
-                       <int>0x3164</int>       <!-- HANGUL FILLER -->
-                       <int>0xFEFF</int>       <!-- ZERO WIDTH NO-BREAK SPACE -->
-                       <int>0xFFA0</int>       <!-- HALFWIDTH HANGUL FILLER -->
-                       <int>0xFFF9</int>       <!-- INTERLINEAR ANNOTATION ANCHOR -->
-                       <int>0xFFFA</int>       <!-- INTERLINEAR ANNOTATION SEPARATOR -->
-                       <int>0xFFFB</int>       <!-- INTERLINEAR ANNOTATION TERMINATOR -->
-               </blank>
-<!--
-  Rescan configuration every 30 seconds when FcFontSetList is called
- -->
-               <rescan>
-                       <int>30</int>
-               </rescan>
-       </config>
-
-</fontconfig>
-
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/etc/gtk-2.0/gtkrc b/setup/apple/NetRadiant.app/Contents/Resources/etc/gtk-2.0/gtkrc
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/etc/pango/pangorc b/setup/apple/NetRadiant.app/Contents/Resources/etc/pango/pangorc
deleted file mode 100644 (file)
index f56d343..0000000
+++ /dev/null
@@ -1 +0,0 @@
-[Pango]
\ No newline at end of file
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/lib/.turd b/setup/apple/NetRadiant.app/Contents/Resources/lib/.turd
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/radiant.icns b/setup/apple/NetRadiant.app/Contents/Resources/radiant.icns
deleted file mode 100644 (file)
index 339e718..0000000
Binary files a/setup/apple/NetRadiant.app/Contents/Resources/radiant.icns and /dev/null differ
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/icons/.turd b/setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/icons/.turd
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/themes/.turd b/setup/apple/NetRadiant.app/Contents/Resources/share/gtk-2.0/themes/.turd
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/setup/apple/README.md b/setup/apple/README.md
deleted file mode 100644 (file)
index 069cf3d..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-NetRadiant for Apple OS X
-========================
-
-This directory provides packaging steps for NetRadiant for OS X. This document describes compiling the application on OSX as well as generating distributable bundles using the framework provided in this directory.
-
-Dependencies & Compilation
---------------------------
-
-Directions for OS X Yosemite 10.10 - your mileage may vary:
-
-- Install [MacPorts](http://macports.org).
-- Install [XQuartz](http://xquartz.macosforge.org/)
-
-- Install dependencies with MacPorts:
-
-```
-sudo port install dylibbundler pkgconfig gtkglext
-```
-
-- Get the NetRadiant code and compile:
-
-```
-git clone https://gitlab.com/xonotic/netradiant.git
-cd netradiant/
-make
-```
-
-- Run the build:
-
-(from the netradiant/ directory)
-```
-./install/radiant
-```
-
-XQuartz note: on my configuration XQuartz doesn't automatically start for some reason. I have to open another terminal, and run the following command: `/Applications/Utilities/XQuartz.app/Contents/MacOS/X11.bin`, then start radiant. 
-    
-Building NetRadiant.app
------------------------
-
-The `Makefile` in the 'setup/apple/' directory will produce a distributable .app bundle for NetRadiant using `dylibbundler`:
-
-```
-make
-make image
-```
-
-Getting help
-------------
-
-IRC: Quakenet #xonotic, or post something on the issue tracker..
diff --git a/setup/apple/netradiant b/setup/apple/netradiant
new file mode 100755 (executable)
index 0000000..9e27101
--- /dev/null
@@ -0,0 +1,38 @@
+#! /usr/bin/env bash
+
+set -o physical
+
+script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
+
+bundle_dir="$(cd "${script_dir}/../Prefix"; pwd)"
+
+echo "Starting NetRadiant in ${bundle_dir}"
+
+set -x
+
+cd "${bundle_dir}"
+
+export FC_DEBUG=1024
+
+# if bundled
+if [ -d "${bundle_dir}/share/icons/hicolor" ]
+then
+       export FONTCONFIG_PATH="${bundle_dir}/etc/fonts"
+
+       # export GDK_GL_LIBGL_PATH="${bundle_dir}/lib/libGL.1.dylib"
+       # export GDK_GL_LIBGLU_PATH="${bundle_dir}/lib/libGLU.1.dylib"
+
+       export GDK_PATH="${bundle_dir}"
+
+       export GDK_PIXBUF_MODULE_FILE="${bundle_dir}/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache"
+
+       export GTK_IM_MODULE_FILE="${bundle_dir}/lib/gtk-2.0/2.10.0/immodules.cache"
+
+       export GOBJECT_PATH="${bundle_dir}"
+
+       export GTK_DATA_PREFIX="${bundle_dir}"
+       export GTK_EXE_PREFIX="${bundle_dir}"
+       export GTK_PATH="${bundle_dir}"
+fi
+
+./netradiant &
index fbeda1a55281ef826a88f12f4d0421bfa2680407..f62be13c9391cfa4b849262097185df912980899 100644 (file)
@@ -50,7 +50,7 @@
 #include "mathlib.h"
 #include "inout.h"
 #include "vfs.h"
-#include <minizip/unzip.h>
+#include <unzip.h>
 #include <glib.h>
 
 typedef struct
index 1ce452e88274fd6214b3d1b23ed6f8b4bf8c7646..e6f3aec0a1b201193cc0e1cc58de98252b476456 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 1ce452e88274fd6214b3d1b23ed6f8b4bf8c7646
+Subproject commit e6f3aec0a1b201193cc0e1cc58de98252b476456