From 81ffe9a7de1db0b3a318a053b38882d1b7ab304c Mon Sep 17 00:00:00 2001 From: Jason Self Date: Sat, 13 Jul 2019 10:16:55 -0700 Subject: [PATCH] Implement a Makefile for Inform. Move source code into the src directory, dynamically compute the version number. --- .gitattributes | 2 + .gitignore | 16 ++ INSTALL | 369 +++++++++++++++++++++++++++++++++++ Makefile.am | 16 ++ configure.ac | 40 ++++ readme.txt | 6 +- src/Makefile.am | 17 ++ arrays.c => src/arrays.c | 0 asm.c => src/asm.c | 0 bpatch.c => src/bpatch.c | 0 chars.c => src/chars.c | 0 directs.c => src/directs.c | 0 errors.c => src/errors.c | 0 expressc.c => src/expressc.c | 0 expressp.c => src/expressp.c | 0 files.c => src/files.c | 0 header.h => src/header.h | 0 inform.c => src/inform.c | 4 +- lexer.c => src/lexer.c | 0 linker.c => src/linker.c | 0 memory.c => src/memory.c | 0 objects.c => src/objects.c | 0 states.c => src/states.c | 0 symbols.c => src/symbols.c | 0 syntax.c => src/syntax.c | 0 tables.c => src/tables.c | 0 text.c => src/text.c | 0 veneer.c => src/veneer.c | 0 verbs.c => src/verbs.c | 0 version.sh | 17 ++ 30 files changed, 483 insertions(+), 4 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 INSTALL create mode 100644 Makefile.am create mode 100644 configure.ac create mode 100644 src/Makefile.am rename arrays.c => src/arrays.c (100%) rename asm.c => src/asm.c (100%) rename bpatch.c => src/bpatch.c (100%) rename chars.c => src/chars.c (100%) rename directs.c => src/directs.c (100%) rename errors.c => src/errors.c (100%) rename expressc.c => src/expressc.c (100%) rename expressp.c => src/expressp.c (100%) rename files.c => src/files.c (100%) rename header.h => src/header.h (100%) rename inform.c => src/inform.c (99%) rename lexer.c => src/lexer.c (100%) rename linker.c => src/linker.c (100%) rename memory.c => src/memory.c (100%) rename objects.c => src/objects.c (100%) rename states.c => src/states.c (100%) rename symbols.c => src/symbols.c (100%) rename syntax.c => src/syntax.c (100%) rename tables.c => src/tables.c (100%) rename text.c => src/text.c (100%) rename veneer.c => src/veneer.c (100%) rename verbs.c => src/verbs.c (100%) create mode 100755 version.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d7162af --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +.gitattributes export-ignore +.gitignore export-ignore \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..07c7a21 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +/Makefile +/Makefile.in +/aclocal.m4 +/autom4te.cache/ +/compile +/config.log +/config.status +/configure +/depcomp +/install-sh +/missing +/src/*.o +/src/.deps +/src/Makefile +/src/Makefile.in +/src/inform \ No newline at end of file diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..608c201 --- /dev/null +++ b/INSTALL @@ -0,0 +1,369 @@ +Installation Instructions +************************* + + Copyright (C) 1994-1996, 1999-2002, 2004-2016 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, after you have run autoreconf --install, 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.am b/Makefile.am new file mode 100644 index 0000000..b73d721 --- /dev/null +++ b/Makefile.am @@ -0,0 +1,16 @@ +# This file is part of Inform. +# +# Inform is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# theFree Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +# Inform is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Inform. If not, see https://gnu.org/licenses/ + +SUBDIRS = src \ No newline at end of file diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..0868807 --- /dev/null +++ b/configure.ac @@ -0,0 +1,40 @@ +# Process this file with autoconf to produce a configure script. +# +# This file is part of Inform. +# +# Inform is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# theFree Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +# Inform is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Inform. If not, see https://gnu.org/licenses/ + +AC_INIT([inform], m4_esyscmd_s([./version.sh]), [j@jxself.org]) +AM_INIT_AUTOMAKE([foreign]) +AC_OUTPUT(Makefile src/Makefile) + +# Checks for programs. +AC_PROG_CC + +# Checks for libraries. + +# Checks for header files. +AC_CHECK_HEADERS([limits.h stdlib.h string.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_CHECK_HEADER_STDBOOL +AC_TYPE_SIZE_T + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_FUNC_MALLOC +AC_FUNC_REALLOC +AC_CHECK_FUNCS([memmove memset realpath strchr strtol]) + +AC_OUTPUT diff --git a/readme.txt b/readme.txt index 1f24727..63ce6df 100644 --- a/readme.txt +++ b/readme.txt @@ -2,9 +2,11 @@ This is the Inform compiler. It has been modified slightly to work better when the Inform standard library is in a non-standard location. -Compiling Inform is very easy. Install GCC and then: +Compiling Inform is very easy. You'll need a compiler (like GCC), +along with the GNU Autotools and GNU Make. -gcc *.c -o inform +First run autoreconf --install; then see the INSTALL file for +installation information. Inform 6 is published under the original Inform licence (which is proprietary), or under the Artistic License 2.0, at the user's choice. diff --git a/src/Makefile.am b/src/Makefile.am new file mode 100644 index 0000000..975223d --- /dev/null +++ b/src/Makefile.am @@ -0,0 +1,17 @@ +# This file is part of Inform. +# +# Inform is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# theFree Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +# Inform is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Inform. If not, see https://gnu.org/licenses/ + +bin_PROGRAMS = inform +inform_SOURCES = arrays.c asm.c bpatch.c chars.c directs.c errors.c expressc.c expressp.c files.c header.h inform.c lexer.c linker.c memory.c objects.c states.c symbols.c syntax.c tables.c text.c veneer.c verbs.c \ No newline at end of file diff --git a/arrays.c b/src/arrays.c similarity index 100% rename from arrays.c rename to src/arrays.c diff --git a/asm.c b/src/asm.c similarity index 100% rename from asm.c rename to src/asm.c diff --git a/bpatch.c b/src/bpatch.c similarity index 100% rename from bpatch.c rename to src/bpatch.c diff --git a/chars.c b/src/chars.c similarity index 100% rename from chars.c rename to src/chars.c diff --git a/directs.c b/src/directs.c similarity index 100% rename from directs.c rename to src/directs.c diff --git a/errors.c b/src/errors.c similarity index 100% rename from errors.c rename to src/errors.c diff --git a/expressc.c b/src/expressc.c similarity index 100% rename from expressc.c rename to src/expressc.c diff --git a/expressp.c b/src/expressp.c similarity index 100% rename from expressp.c rename to src/expressp.c diff --git a/files.c b/src/files.c similarity index 100% rename from files.c rename to src/files.c diff --git a/header.h b/src/header.h similarity index 100% rename from header.h rename to src/header.h diff --git a/inform.c b/src/inform.c similarity index 99% rename from inform.c rename to src/inform.c index 793d534..8888077 100644 --- a/inform.c +++ b/src/inform.c @@ -1744,8 +1744,8 @@ char banner_line[80]; static void banner(void) { - sprintf(banner_line, "Inform %d.%d%d", - (VNUMBER/100)%10, (VNUMBER/10)%10, VNUMBER%10); + sprintf(banner_line, "Inform %s", + (VERSION)); #ifdef RELEASE_SUFFIX strcat(banner_line, RELEASE_SUFFIX); #endif diff --git a/lexer.c b/src/lexer.c similarity index 100% rename from lexer.c rename to src/lexer.c diff --git a/linker.c b/src/linker.c similarity index 100% rename from linker.c rename to src/linker.c diff --git a/memory.c b/src/memory.c similarity index 100% rename from memory.c rename to src/memory.c diff --git a/objects.c b/src/objects.c similarity index 100% rename from objects.c rename to src/objects.c diff --git a/states.c b/src/states.c similarity index 100% rename from states.c rename to src/states.c diff --git a/symbols.c b/src/symbols.c similarity index 100% rename from symbols.c rename to src/symbols.c diff --git a/syntax.c b/src/syntax.c similarity index 100% rename from syntax.c rename to src/syntax.c diff --git a/tables.c b/src/tables.c similarity index 100% rename from tables.c rename to src/tables.c diff --git a/text.c b/src/text.c similarity index 100% rename from text.c rename to src/text.c diff --git a/veneer.c b/src/veneer.c similarity index 100% rename from veneer.c rename to src/veneer.c diff --git a/verbs.c b/src/verbs.c similarity index 100% rename from verbs.c rename to src/verbs.c diff --git a/version.sh b/version.sh new file mode 100755 index 0000000..9e63166 --- /dev/null +++ b/version.sh @@ -0,0 +1,17 @@ +# This file is part of Inform. +# +# Inform is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# theFree Software Foundation, either version 3 of the License, or +#(at your option) any later version. +# +# Inform is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Inform. If not, see https://gnu.org/licenses/ + +commit_count=$(git rev-list HEAD --count) +echo "6.$commit_count" \ No newline at end of file -- 2.31.1