diff --git a/.github/workflows/build.sh b/.github/workflows/build.sh index d415b203..0d4afab3 100755 --- a/.github/workflows/build.sh +++ b/.github/workflows/build.sh @@ -2,7 +2,6 @@ set -x -e o pipefail GH_MYMAKE_ARGS="-fPIC" -GH_AUTOTOOLS_CXXFLAGS="-W -Wall -Wextra -Wno-unused-parameter -Wno-maybe-uninitialized" HYPERROGUE_USE_GLEW=$GH_HYP_GLEW export HYPERROGUE_USE_GLEW=${HYPERROGUE_USE_GLEW: -1} @@ -14,20 +13,15 @@ HYPERROGUE_USE_ROGUEVIZ=$GH_HYP_RVIZ export HYPERROGUE_USE_ROGUEVIZ=${HYPERROGUE_USE_ROGUEVIZ: -1} if [[ "$GH_HYP_RVIZ" == "rviz_1" ]]; then GH_MYMAKE_ARGS+=" -std=c++17 -rv" - GH_AUTOTOOLS_CXXFLAGS+=" -std=c++17 -DCAP_ROGUEVIZ=1" fi export CC=$GH_COMPILER export CXX=${CC%cc}++ if [[ "$GH_BUILDSYS" == "makefile" ]]; then - make -f Makefile.simple -elif [[ "$GH_BUILDSYS" == "autotools" ]]; then - autoreconf -vfi - ./configure CXXFLAGS="${GH_AUTOTOOLS_CXXFLAGS}" make elif [[ "$GH_BUILDSYS" == "mymake" ]]; then - make -f Makefile.simple mymake + make mymake ./mymake $GH_MYMAKE_ARGS mv hyper hyperrogue else diff --git a/.github/workflows/github_ci.yml b/.github/workflows/github_ci.yml index 5127f76d..897302a8 100644 --- a/.github/workflows/github_ci.yml +++ b/.github/workflows/github_ci.yml @@ -15,7 +15,7 @@ jobs: matrix: os: [ubuntu-latest, macos-latest] compiler: [gcc, clang] - build_system: [makefile, autotools, mymake] + build_system: [makefile, mymake] hyper_use_rviz: [rviz_1, rviz_0] hyper_use_png: [png_1] hyper_use_glew: [glew_1] @@ -42,7 +42,7 @@ jobs: fail-fast: false matrix: compiler: [gcc] - build_system: [makefile, autotools, mymake] + build_system: [makefile, mymake] hyper_use_rviz: [rviz_1, rviz_0] hyper_use_png: [png_1] hyper_use_glew: [glew_1] @@ -77,7 +77,7 @@ jobs: - uses: actions/checkout@v2 - name: Build run: | - docker run --rm -v $(pwd):/src trzeci/emscripten make -f Makefile.simple emscripten + docker run --rm -v $(pwd):/src trzeci/emscripten make emscripten - name: Do a simple test run: | ls -lAF hyper.html hyper.js hyper.wasm diff --git a/.github/workflows/install_deps.sh b/.github/workflows/install_deps.sh index c2048157..93c45fc5 100755 --- a/.github/workflows/install_deps.sh +++ b/.github/workflows/install_deps.sh @@ -17,12 +17,6 @@ if [[ "$GH_HYP_PNG" == "png_1" ]]; then GH_DEPS_MINGW64+=" libpng:x" fi -if [[ "$GH_BUILDSYS" == "autotools" ]]; then - GH_DEPS_UBUNTU+=" autoconf" - GH_DEPS_MACOS+=" automake" - GH_DEPS_MINGW64+=" automake-wrapper autoconf" -fi - if [[ "$GH_OS" == "ubuntu-latest" ]]; then sudo apt-get -y install $GH_DEPS_UBUNTU elif [[ "$GH_OS" == "macos-latest" ]]; then diff --git a/.gitignore b/.gitignore index 6ad91878..321b2a2a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1 @@ .deps/ -ChangeLog -Makefile.in -aclocal.m4 -autom4te* -config.guess -config.sub -config.log -config.status -configure -depcomp -Makefile -install-sh -missing -compile -NEWS -AUTHORS -README diff --git a/.travis.yml b/.travis.yml index 2f41e33b..95516a05 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,23 +4,6 @@ services: - docker matrix: include: - - os: linux # Linux GCC, autotools - compiler: gcc - env: >- - TRAVIS_OS_NAME=linux - TRAVIS_COMPILER_NAME=gcc - TRAVIS_BUILD_SYSTEM=autotools - HYPERROGUE_USE_GLEW=1 - HYPERROGUE_USE_PNG=1 - - os: osx # OSX, autotools - osx_image: xcode12.2 - compiler: clang - env: >- - TRAVIS_OS_NAME=osx - TRAVIS_COMPILER_NAME=clang - TRAVIS_BUILD_SYSTEM=autotools - HYPERROGUE_USE_GLEW=1 - HYPERROGUE_USE_PNG=1 - os: linux # Linux GCC, make compiler: gcc env: >- @@ -169,35 +152,20 @@ before_install: exit 'Unsupported OS' fi fi -- |- - # Install autotools if asked for - if [[ "$TRAVIS_USE_AUTOTOOLS" == "1" ]]; then - if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then - echo 'autotools is installed by default' - elif [[ "$TRAVIS_OS_NAME" == "osx" ]]; then - brew install automake - else - exit 'Unsupported OS' - fi - fi script: - |- - make -f Makefile.simple clean + make clean if [[ "$(git status --porcelain)" ]]; then git status exit 'A build artifact was committed; git rm it and try again' fi - |- # Build hyperrogue. - if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then - autoreconf -vi - ./configure CXXFLAGS="-W -Wall -Wextra -Werror -Wno-unused-parameter -Wno-maybe-uninitialized -Wno-unknown-warning-option" + if [[ "$TRAVIS_BUILD_SYSTEM" == "Makefile" ]]; then make - elif [[ "$TRAVIS_BUILD_SYSTEM" == "Makefile" ]]; then - make -f Makefile.simple elif [[ "$TRAVIS_BUILD_SYSTEM" == "mymake" ]]; then - make -f Makefile.simple mymake + make mymake if [[ "$HYPERROGUE_USE_ROGUEVIZ" == "1" ]]; then ./mymake -rv else @@ -205,7 +173,7 @@ script: fi mv hyper hyperrogue elif [[ "$TRAVIS_BUILD_SYSTEM" == "emscripten" ]]; then - docker run --rm -v $(pwd):/src trzeci/emscripten make -f Makefile.simple emscripten + docker run --rm -v $(pwd):/src trzeci/emscripten make emscripten else exit 'Unsupported build system' fi @@ -217,18 +185,8 @@ script: ./hyperrogue --help fi - |- - if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then - make clean - else - make -f Makefile.simple clean - fi + make clean if [[ "$(git status --porcelain)" ]]; then git status exit 'make clean did not return the repository to its pre-build state' fi -- |- - # Test "make dist". ("make distcheck" is expected to fail.) - if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then make dist; fi -- |- - # Test "sudo make install". - if [[ "$TRAVIS_BUILD_SYSTEM" == "autotools" ]]; then sudo make install; fi diff --git a/INSTALL b/INSTALL deleted file mode 100644 index 20998407..00000000 --- a/INSTALL +++ /dev/null @@ -1,370 +0,0 @@ -Installation Instructions -************************* - -Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, -Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command `./configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the `README' file for -instructions specific to this package. Some packages provide this -`INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The `configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a `Makefile' in each directory of the package. -It may also create one or more `.h' files containing system-dependent -definitions. Finally, it creates a shell script `config.status' that -you can run in the future to recreate the current configuration, and a -file `config.log' containing compiler output (useful mainly for -debugging `configure'). - - It can also use an optional file (typically called `config.cache' -and enabled with `--cache-file=config.cache' or simply `-C') that saves -the results of its tests to speed up reconfiguring. Caching is -disabled by default to prevent problems with accidental use of stale -cache files. - - If you need to do unusual things to compile the package, please try -to figure out how `configure' could check whether to do them, and mail -diffs or instructions to the address given in the `README' so they can -be considered for the next release. If you are using the cache, and at -some point `config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file `configure.ac' (or `configure.in') is used to create -`configure' by a program called `autoconf'. You need `configure.ac' if -you want to change it or regenerate `configure' using a newer version -of `autoconf'. - - The simplest way to compile this package is: - - 1. `cd' to the directory containing the package's source code and type - `./configure' to configure the package for your system. - - Running `configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type `make' to compile the package. - - 3. Optionally, type `make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type `make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the `make install' phase executed with root - privileges. - - 5. Optionally, type `make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior `make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing `make clean'. To also remove the - files that `configure' created (so you can compile the package for - a different kind of computer), type `make distclean'. There is - also a `make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type `make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide `make - distcheck', which can by used by developers to test that all other - targets like `make install' and `make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the `configure' script does not know about. Run `./configure --help' -for details on some of the pertinent environment variables. - - You can give `configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here -is an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU `make'. `cd' to the -directory where you want the object files and executables to go and run -the `configure' script. `configure' automatically checks for the -source code in the directory that `configure' is in and in `..'. This -is known as a "VPATH" build. - - With a non-GNU `make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use `make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple `-arch' options to the -compiler but only a single `-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the `lipo' tool if you have problems. - -Installation Names -================== - - By default, `make install' installs the package's commands under -`/usr/local/bin', include files under `/usr/local/include', etc. You -can specify an installation prefix other than `/usr/local' by giving -`configure' the option `--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option `--exec-prefix=PREFIX' to `configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like `--bindir=DIR' to specify different values for particular -kinds of files. Run `configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the -default for these options is expressed in terms of `${prefix}', so that -specifying just `--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to `configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -`make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, `make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -`${prefix}'. Any directories that were specified during `configure', -but not in terms of `${prefix}', must each be overridden at install -time for the entire installation to be relocated. The approach of -makefile variable overrides for each directory variable is required by -the GNU Coding Standards, and ideally causes no recompilation. -However, some platforms have known limitations with the semantics of -shared libraries that end up requiring recompilation when using this -method, particularly noticeable in packages that use GNU Libtool. - - The second method involves providing the `DESTDIR' variable. For -example, `make install DESTDIR=/alternate/directory' will prepend -`/alternate/directory' before all installation names. The approach of -`DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of `${prefix}' -at `configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving `configure' the -option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. - - Some packages pay attention to `--enable-FEATURE' options to -`configure', where FEATURE indicates an optional part of the package. -They may also pay attention to `--with-PACKAGE' options, where PACKAGE -is something like `gnu-as' or `x' (for the X Window System). The -`README' should mention any `--enable-' and `--with-' options that the -package recognizes. - - For packages that use the X Window System, `configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the `configure' options `--x-includes=DIR' and -`--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of `make' will be. For these packages, running `./configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with `make V=1'; while running `./configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with `make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU -CC is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX `make' updates targets which have the same time stamps as -their prerequisites, which makes it generally unusable when shipped -generated files such as `configure' are involved. Use GNU `make' -instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its `' header file. The option `-nodtk' can be used as -a workaround. If GNU CC is not installed, it is therefore recommended -to try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put `/usr/ucb' early in your `PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in `/usr/bin'. So, if you need `/usr/ucb' -in your `PATH', put it _after_ `/usr/bin'. - - On Haiku, software installed for all users goes in `/boot/common', -not `/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features `configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, `configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -`--build=TYPE' option. TYPE can either be a short name for the system -type, such as `sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file `config.sub' for the possible values of each field. If -`config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option `--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with `--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for `configure' scripts to share, -you can create a site shell script called `config.site' that gives -default values for variables like `CC', `cache_file', and `prefix'. -`configure' looks for `PREFIX/share/config.site' if it exists, then -`PREFIX/etc/config.site' if it exists. Or, you can set the -`CONFIG_SITE' environment variable to the location of the site script. -A warning: not all `configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to `configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the `configure' command line, using `VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified `gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for `CONFIG_SHELL' due to -an Autoconf limitation. Until the limitation is lifted, you can use -this workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -`configure' Invocation -====================== - - `configure' recognizes the following options to control how it -operates. - -`--help' -`-h' - Print a summary of all of the options to `configure', and exit. - -`--help=short' -`--help=recursive' - Print a summary of the options unique to this package's - `configure', and exit. The `short' variant lists options used - only in the top level, while the `recursive' variant lists options - also present in any nested packages. - -`--version' -`-V' - Print the version of Autoconf used to generate the `configure' - script, and exit. - -`--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally `config.cache'. FILE defaults to `/dev/null' to - disable caching. - -`--config-cache' -`-C' - Alias for `--cache-file=config.cache'. - -`--quiet' -`--silent' -`-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to `/dev/null' (any error - messages will still be shown). - -`--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - `configure' can determine that directory automatically. - -`--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: - for more details, including other options available for fine-tuning - the installation locations. - -`--no-create' -`-n' - Run the configure checks, but stop before creating any output - files. - -`configure' also accepts some other, not widely useful, options. Run -`configure --help' for more details. diff --git a/Makefile.simple b/Makefile similarity index 96% rename from Makefile.simple rename to Makefile index dc5b843c..53829666 100644 --- a/Makefile.simple +++ b/Makefile @@ -5,16 +5,16 @@ # Run "brew install sdl_gfx". # Run "brew install sdl_mixer". # Run "brew install sdl_ttf". -# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue. +# Run "make" to build HyperRogue as ./hyperrogue. # # For MSYS2 and MinGW-w64: # You might need to run commands such as "pacman -S mingw-w64-x86_64-SDL" # to install SDL and other required libraries. -# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue.exe. +# Run "make" to build HyperRogue as ./hyperrogue.exe. # # For Ubuntu Linux: # Run "sudo apt-get install libsdl-dev" to install SDL in /usr/local. -# Run "make -f Makefile.simple" to build HyperRogue as ./hyperrogue. +# Run "make" to build HyperRogue as ./hyperrogue. ifeq ($(OS),Windows_NT) diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index 491782c7..00000000 --- a/Makefile.am +++ /dev/null @@ -1,51 +0,0 @@ -bin_PROGRAMS = hyperrogue -hyperroguedir = $(datadir)/hyperrogue -hyperrogue_SOURCES = hyper.cpp savepng.cpp -hyperrogue_CPPFLAGS = -DFONTDESTDIR=\"$(pkgdatadir)/DejaVuSans-Bold.ttf\" -DMUSICDESTDIR=\"$(pkgdatadir)/hyperrogue-music.txt\" -DSOUNDDESTDIR=\"$(pkgdatadir)/sounds/\" -DRESOURCEDESTDIR=\"$(pkgdatadir)/\" -hyperrogue_CXXFLAGS = -O2 -std=c++11 ${AM_CXXFLAGS} -dist_hyperrogue_DATA = hyperrogue-music.txt DejaVuSans-Bold.ttf solv-geodesics.dat shyp-geodesics.dat ssol-geodesics.dat honeycomb-rules-435.dat honeycomb-rules-534.dat honeycomb-rules-535.dat - -# docdir -dist_doc_DATA = README.md - -# musicdir -musicdir=$(datadir)/hyperrogue/music -dist_music_DATA = music/hr3-caves.ogg music/hr3-desert.ogg music/hr3-hell.ogg music/hr3-jungle.ogg music/hr3-mirror.ogg music/hr3-rlyeh.ogg music/hr3-crossroads.ogg music/hr3-graveyard.ogg music/hr3-icyland.ogg music/hr3-laboratory.ogg music/hr3-motion.ogg music/hr-savino-palace.ogg music/hr-savino-caribbean.ogg music/hr-savino-ocean.ogg music/hr-savino-ivory.ogg - -# soundsdir -soundsdir=$(datadir)/hyperrogue/sounds -dist_sounds_DATA = sounds/* - -noinst_PROGRAMS = langen makeh -langen_SOURCES = langen.cpp -langen_CXXFLAGS = -O0 -std=c++11 ${AM_CXXFLAGS} -makeh_SOURCES = makeh.cpp -BUILT_SOURCES = language-data.cpp autohdr.h -CLEANFILES = language-data.cpp autohdr.h - -language-data.cpp: langen - ./langen > language-data.cpp - -autohdr.h: makeh language-data.cpp *.cpp - ./makeh classes.cpp locations.cpp hyperpoint.cpp geometry.cpp goldberg.cpp init.cpp floorshapes.cpp cell.cpp multi.cpp shmup.cpp pattern2.cpp mapeditor.cpp graph.cpp textures.cpp hprint.cpp language.cpp util.cpp complex.cpp *.cpp > autohdr.h - -############################# -# Platform specific setup -############################# - -if MAC -hyperrogue_LDFLAGS = -lSDLmain -framework AppKit -framework OpenGL -endif MAC - -if MINGW -nodist_hyperrogue_SOURCES = hyper.res -hyperrogue_CPPFLAGS += -march=native -DWINDOWS -windres_prefix = ${host_cpu}-w64-mingw32- -endif MINGW - -############################# -# Arch specific setup -############################# - -hyper.res: hyper.rc hr-icon.ico - ${windres_prefix}windres hyper.rc -O coff -o hyper.res diff --git a/README.md b/README.md index d3e2b12b..753e56e9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,6 @@ # HyperRogue

-TravisCI badge TravisCI badge TravisCI badge TravisCI badge @@ -54,26 +53,16 @@ and visualizations (see [RogueViz](http://roguetemple.com/z/hyper/rogueviz.php)) ## Technical information ## -You should be able to compile on Ubuntu (or similar) with something like this (you need SDL, SDL_ttf, and SDL_gfx): +You should be able to compile on Linux, OSX, or MinGW with something like this (you need SDL, SDL_ttf, and SDL_gfx): ``` sudo apt-get install gcc libsdl1.2-dev libsdl-ttf2.0-dev libsdl-gfx1.2-dev git clone https://github.com/zenorogue/hyperrogue.git hyperrogue cd hyperrogue -autoreconf -vi -./configure make ``` -There is also a standalone Makefile for Linux, OSX, and MinGW. - -``` -git clone https://github.com/zenorogue/hyperrogue.git -cd hyperrogue -make -f Makefile.simple -``` - -The `mymake` program builds HyperRogue in parts. It takes longer than the methods listed above, but when you change something, `mymake` will only recompile the changed file. +The `mymake` program builds HyperRogue in parts. It takes longer than the method shown above, but when you change something, `mymake` will only recompile the changed file. Additionally, it can be easily configured, e.g., to produce an optimized build, or to include addons (see `mymake.cpp` for some example invocations, and `devmods` for some example addons). ``` diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 3d75b39a..00000000 --- a/autogen.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -autoreconf -vfi -./configure "$@" -echo "Now, just do \"make install\" " - diff --git a/binary-tiling.cpp b/binary-tiling.cpp index 6f65a72e..f5dd0d13 100644 --- a/binary-tiling.cpp +++ b/binary-tiling.cpp @@ -267,7 +267,7 @@ EX namespace bt { return path(h, d, bd_up_left, {bd_right, bd_down}); } } - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } case gBinary4: { switch(d) { @@ -286,7 +286,7 @@ EX namespace bt { else return path(h, 4, 2, {3, 4, 1}); default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } case gTernary: { @@ -306,7 +306,7 @@ EX namespace bt { else return path(h, 5, 3, {4, 5, 2}); default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } #if MAXMDIM >= 4 @@ -342,7 +342,7 @@ EX namespace bt { else return path(h, 7, 6, {8, 7, parent->c.spin(8) ^ 2}); default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } case gHoroRec: { @@ -370,7 +370,7 @@ EX namespace bt { parent->cmove(6); return path(h, 5, 3, {6, 2, parent->c.spin(6)}); default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } case gHoroTris: { @@ -387,7 +387,7 @@ EX namespace bt { else return path(h, d, d, {7, d, 9-d-s}); } default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } case gHoroHex: { @@ -422,12 +422,12 @@ EX namespace bt { return path(h, 12, (z+1)%3+3, {13, z+6}); } default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } #endif default: - throw hr_wrong_geometry(); + throw hr_exception("wrong geometry"); } } @@ -436,7 +436,7 @@ EX namespace bt { else if(type_of(h) == 6) return bd_down; else if(mapside(h) == 1) return bd_left; else if(mapside(h) == -1) return bd_right; - else throw hr_wrong_dir(); + else throw hr_exception("wrong dir"); } transmatrix relative_matrix(heptagon *h2, heptagon *h1, const hyperpoint& hint) override { diff --git a/configure.ac b/configure.ac deleted file mode 100644 index 09f97a16..00000000 --- a/configure.ac +++ /dev/null @@ -1,36 +0,0 @@ -AC_PREREQ([2.68]) -AC_INIT([hyperrogue], [10.4i]) -AC_LANG([C++]) -AM_INIT_AUTOMAKE([-Wall -Werror foreign]) -AC_CONFIG_SRCDIR([hyperpoint.cpp]) -AC_PROG_CXX -AC_PROG_CC - -AC_CANONICAL_HOST -AM_CONDITIONAL(LINUX, test ["${host_os#*linux}" != "$host_os"]) -AM_CONDITIONAL(MAC, test ["${host_os#*darwin}" != "$host_os"]) -AM_CONDITIONAL(MINGW, test ["${host_os#*mingw}" != "$host_os"]) -AM_COND_IF(LINUX, AC_DEFINE([LINUX], [1])) -AM_COND_IF(MAC, AC_DEFINE([MAC], [1])) -AM_COND_IF(MINGW, AC_DEFINE([WINDOWS], [1])) - -AC_CHECK_HEADERS([GL/gl.h OpenGL/gl.h], break, AC_MSG_RESULT([OpenGL header was not found])) -AC_CHECK_HEADERS([GL/glew.h], [], AC_MSG_RESULT([GLEW header was not found])) -AC_CHECK_HEADERS([png.h], [], AC_MSG_RESULT([png.h header was not found])) -AC_CHECK_HEADERS([SDL/SDL.h], [], AC_MSG_ERROR([SDL/SDL.h header was not found])) -AC_CHECK_HEADERS([SDL/SDL_gfxPrimitives.h], [], AC_MSG_RESULT([SDL/SDL_gfxPrimitives.h header was not found])) -AC_CHECK_HEADERS([SDL/SDL_mixer.h], [], AC_MSG_ERROR([SDL/SDL_mixer.h header was not found])) -AC_CHECK_HEADERS([SDL/SDL_ttf.h], [], AC_MSG_RESULT([SDL/SDL_ttf.h header was not found])) - -AC_SEARCH_LIBS([glBegin], [GL opengl32], [], AC_MSG_RESULT([OpenGL library was not found])) -AC_SEARCH_LIBS([glewInit], [GLEW glew32], [], AC_MSG_RESULT([GLEW library was not found])) -AC_SEARCH_LIBS([png_create_info_struct], [png], [], AC_MSG_RESULT([png library was not found])) -AC_SEARCH_LIBS([SDL_SetVideoMode], [SDL], [], AC_MSG_ERROR([SDL library was not found])) -AC_SEARCH_LIBS([aacircleColor], [SDL_gfx], [], AC_MSG_RESULT([SDL_gfx library was not found])) -AC_SEARCH_LIBS([Mix_LoadMUS], [SDL_mixer], [], AC_MSG_ERROR([SDL_mixer library was not found])) -AC_SEARCH_LIBS([TTF_OpenFont], [SDL_ttf], [], AC_MSG_RESULT([SDL_ttf library was not found])) -AC_SEARCH_LIBS(pthread_create, [pthread], ,AC_MSG_ERROR([pthread library was not found])) -AC_SEARCH_LIBS(deflate, [z], ,AC_MSG_ERROR([zlib was not found])) - -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/dialogs.cpp b/dialogs.cpp index 50bfd9c1..acc02a13 100644 --- a/dialogs.cpp +++ b/dialogs.cpp @@ -786,7 +786,7 @@ EX namespace dialog { #endif if(reaction) reaction(); } - catch(hr_parse_exception&) { + catch(const hr_parse_exception&) { } } diff --git a/history.cpp b/history.cpp index 6efb12c8..4efdc2f5 100644 --- a/history.cpp +++ b/history.cpp @@ -288,7 +288,7 @@ EX namespace history { auto p = build_shortest_path(start, target); path_for_lineanimation = p; } - catch(hr_shortest_path_exception&) { + catch(const hr_shortest_path_exception&) { addMessage("Could not build a path"); return; } diff --git a/hyper.h b/hyper.h index 9bf5acca..6d94c52d 100644 --- a/hyper.h +++ b/hyper.h @@ -98,14 +98,12 @@ using std::asinh; using std::acosh; #endif -struct hr_exception: std::exception { hr_exception() {} }; -struct hr_shortest_path_exception: hr_exception { }; +struct hr_exception : std::runtime_error { + explicit hr_exception() : std::runtime_error("hr_exception") {} + explicit hr_exception(const std::string& s) : std::runtime_error(s.c_str()) {} +}; -struct hr_wrong_dir: hr_exception { }; - -struct hr_wrong_geometry: hr_exception { }; - -struct hr_exception_str: std::exception { string s; hr_exception_str(const string& s) : s(s) {} const char* what() { return s.c_str(); }}; +struct hr_shortest_path_exception { }; // genus (in grammar) #define GEN_M 0 diff --git a/hyperroid/copy.sh b/hyperroid/copy.sh index aaf9b33f..62e8164d 100755 --- a/hyperroid/copy.sh +++ b/hyperroid/copy.sh @@ -12,7 +12,7 @@ mkdir -p app/src/main/res/raw/ if [ ! -f ../autohdr.h ]; then echo "generating autohdr.h..." LAST_PWD=$(pwd); cd .. - make -f Makefile.simple autohdr.h + make autohdr.h cd $LAST_PWD fi diff --git a/mymake.cpp b/mymake.cpp index bfbc78f1..008f7c6f 100644 --- a/mymake.cpp +++ b/mymake.cpp @@ -145,7 +145,7 @@ string setdir = "../"; int main(int argc, char **argv) { set_os(os); int retval = 0; // for storing return values of some function calls - for(string fname: {"Makefile.loc", "Makefile.simple", "Makefile"}) + for(string fname: {"Makefile.loc", "Makefile"}) if(file_exists(fname)) { retval = mysystem("make -f " + fname + " language-data.cpp autohdr.h"); if (retval) { printf("error during preparation!\n"); exit(retval); } diff --git a/nonisotropic.cpp b/nonisotropic.cpp index e5fadf9e..b947275d 100644 --- a/nonisotropic.cpp +++ b/nonisotropic.cpp @@ -427,11 +427,11 @@ EX namespace sn { case 8: return xpush(bw*(4.5-j)) * zpush(-1) * ypush(bw*(i-7)); default: - throw hr_wrong_dir(); + throw hr_exception("wrong dir"); } } - default: throw hr_wrong_geometry(); + default: throw hr_exception("wrong geometry"); } } diff --git a/racing.cpp b/racing.cpp index 74cd1ccf..8976412e 100644 --- a/racing.cpp +++ b/racing.cpp @@ -503,12 +503,12 @@ EX void generate_track() { } else find_track(s, 0, length); } - catch(hr_track_failure&) { + catch(const hr_track_failure&) { race_try++; gamegen_failure = true; return; } - catch(hr_shortest_path_exception&) { + catch(const hr_shortest_path_exception&) { addMessage("error: could not build path"); gamegen_failure = true; racing::on = false; diff --git a/rogueviz/notknot.cpp b/rogueviz/notknot.cpp index 39e720c8..109a481a 100644 --- a/rogueviz/notknot.cpp +++ b/rogueviz/notknot.cpp @@ -402,7 +402,7 @@ struct hrmap_notknot : hrmap { auto d1 = u->where->c.spin(d); auto z = x->zebraval; if(z & 6) { - throw hr_exception_str("zebraval failure!"); + throw hr_exception("zebraval failure!"); exit(3); x->zebraval = 0; } @@ -418,7 +418,7 @@ struct hrmap_notknot : hrmap { void add_to_unify(ucover *a, ucover *b) { if(a->where != b->where) - throw hr_exception_str("unification error"); + throw hr_exception("unification error"); unify.emplace_back(a, b); }; @@ -641,7 +641,7 @@ struct hrmap_notknot : hrmap { if(u->where == all[0]->where) for(auto& lo: to_unloop) if(!make_loop(u, 1, lo)) - throw hr_exception_str("given loop goes through a wall"); + throw hr_exception("given loop goes through a wall"); if(loop_any && u->where == all[0]->where) { auto us = all[0]; @@ -685,7 +685,7 @@ struct hrmap_notknot : hrmap { all[0]->parentdir = -1; if(all[0]->where->zebraval & 1) - throw hr_exception_str("error: starting inside a wall"); + throw hr_exception("error: starting inside a wall"); remove_marked_walls = false; bool first = true; @@ -712,7 +712,7 @@ struct hrmap_notknot : hrmap { uf->state |= 2; uf->merged_into = ut; if(uf->where != ut->where) - throw hr_exception_str("where confusion"); + throw hr_exception("where confusion"); for(int d=0; dwhere->type; d++) { cmov(uf->where, d); auto d1 = uf->where->c.spin(d); @@ -881,9 +881,9 @@ struct hrmap_notknot : hrmap { cmov(u->where, d); auto d1 = u->where->c.spin(d); if(u->ptr[d] && u->ptr[d]->result == nullptr) - throw hr_exception_str(lalign(0, "connection to null in state ", u->ptr[d]->state, " from state ", u->state, " i=", i, " .. ", u->ptr[d]->index)); + throw hr_exception(lalign(0, "connection to null in state ", u->ptr[d]->state, " from state ", u->state, " i=", i, " .. ", u->ptr[d]->index)); if(u->ptr[d] && u->ptr[d]->ptr[d1] != u) - throw hr_exception_str("wrong connection"); + throw hr_exception("wrong connection"); if(u->ptr[d]) u->result->c.connect(d, u->ptr[d]->result, d1, false); else @@ -973,8 +973,8 @@ struct hrmap_notknot : hrmap { ray::volumetric::vmap[c] = 0x00000001; } - } catch(hr_exception_str& s) { - println(hlog, "exception: ", s.s); + } catch(const hr_exception& s) { + println(hlog, "exception: ", s.what()); throw; } } diff --git a/rug.cpp b/rug.cpp index 5ee25645..810e2f8d 100644 --- a/rug.cpp +++ b/rug.cpp @@ -600,7 +600,7 @@ EX void buildRug() { else if(v > w && v > w2) addTriangle(v, w, w2); } - catch(out_of_range&) {} + catch(const std::out_of_range&) {} } println(hlog, "vertices = ", isize(points), " triangles= ", isize(triangles)); @@ -1218,7 +1218,7 @@ EX void init_model() { "Use a different projection to fix this." ); } - catch(rug_exception) { + catch(const rug_exception&) { close(); clear_model(); } @@ -1353,7 +1353,7 @@ EX void actDraw() { perform_finger(); #endif } - catch(rug_exception) { + catch(const rug_exception&) { rug::close(); } }