[Solved] TADS3: Can't find header files adv3.h and en_us.h

I have installed TADS3 from the git repo. It seemed to have successfully installed t3make etc. But when I run t3make, I get this error:

symbol_export /usr/local/share/frobtads/tads3/lib/_main.t -> _main.t3s
symbol_export tads-example.txt -> tads-example.t3s
tads-example.txt(2): error: cannot open include file "adv3.h"
tads-example.txt(3): error: cannot open include file "en_us.h"

(I checked on this forum, but couldn’t find a solution.)

What should I do now to fix this?

1 Like

Okay so you want to check your files to make sure stuff was put in the correct place.

This will be the directory you want to start checking in:

/usr/local/share/frobtads/tads3/lib/

Within this folder, you should find this directory:

./adv3

(If you use adv3Lite, you will be copying the library’s folder into here as well. You might need to look on Eric Eve’s github for the latest version. I think t3make should have all the stuff for adv3, though.)

In that directory, you should find adv3.h, among other files.

It might be possible that the installer put the library files in the wrong spot?

EDIT: If the files are all there, then it might be a permissions problem. You should make sure the adv3 directory (and its contents) match the permissions of the directory that contains it (which should be /usr/local/share/frobtads/tads3/lib/, if my own Ubuntu file system is anything to go by).

EDIT 2: Oh yeah, also that lib directory should contain the total following, just for completeness:

[directories]

adv3       [if you're using adv3]
adv3Lite   [if you're using adv3Lite]
extensions
samples
webuires

[files]

_main.t
dynfunc.t
file.t
gameinfo.t
gramprod.t
multmeth.t
reflect.t
system.tl
tadsnet.t
tok.t
webui.t
webui.tl
1 Like

It sounds like you’re running t3make without -lib system and -lib adv3/adv3.

I usually make TADS makefiles (which are just the CLI flags in a convenient bundle; they work exactly as if you’d typed the contents in the command line), and a basic stub makefile looks something like:

-D LANGUAGE=en_us
-D MESSAGESTYLE=neu
-Fy obj -Fo obj
-o game.t3
-lib system
-lib adv3/adv3
-source sample

This:

  • reads the source from sample.t . This is the effect of the last line
  • puts all the object files generated during compilation in a directory called ./obj (that is, if you’re compiling in /home/tads/ the objects will go in /home/tads/obj/, which must already exist). This is the third line
  • outputs the compiled game to game.t3 in the current directory. This is the fourth line
3 Likes

my stock makefile (skel.t3m) has:

-nopre
-D LANGUAGE=en_us
-D MESSAGESTYLE=neu
-Fy obj -Fo obj
-o skel.t3
-lib system
-lib ../adv3/adv3

##sources below

Notice the relative filepath in my case: I kept the current libraries in the work directory (~if/wrk/tads3 in this case) together with the WIPs directories; this allow quick and safe (as in “use the Root Power very sparely”) library upgrades

Best regards from Italy,
dott. Piergiorgio.

2 Likes

OK, I couldn’t run the cmake install instruction, so I did it with “sudo” and it worked. Then I changed the user and group of all files and directories. Then I ran it with “-lib system -lib adv3/adv3” and the error disappeared, but the next error showed up:

I entered
t3make tads-example.txt -lib system -lib adv3/adv3 -D LANGUAGE=en_us

TADS Compiler 3.1.3  Copyright 1999, 2012 Michael J. Roberts
/usr/local/share/frobtads/tads3/lib/adv3/adv3.tl (37): library requires preprocessor symbol "LANGUAGE" to be defined; use -D LANGUAGE=value to define it (this selects the language the library uses in its messages and parsing, using ISO 639/3166 language/country codes: US English is "en_us")
/usr/local/share/frobtads/tads3/lib/adv3/adv3.tl (38): undefined symbol "LANGUAGE"
/usr/local/share/frobtads/tads3/lib/adv3/adv3.tl (38): undefined symbol "LANGUAGE"
unable to open library file "/.tl"
Error: Invalid option: "-D"

Strange! Any help? Thanks in advance.

Edit-add: If I missed an important compiler flag/commandline option, please say what it does, because I don’t like to stupidly write something I don’t understand.

1 Like

The order of arguments matters. Specifically, the -D LANGUAGE=en_us needs to be set before the -lib lines.

In general, you usually want all your -D options at the start of the option list, because they’re preprocessor flags, and so they generally need to be set before any source files are read in order to have any effect.

Note that you’ll also have to add -D MESSAGESTYLE=neu to your compile flags, or you’ll get an error like error: unable to open source file "/usr/local/share/frobtads/tads3/lib/adv3/en_us/msg_.t".

2 Likes

The compiler is called t3make not only because is making story files, but also because can get parameters, set directories and sources from a file, like (c)make.

I have posted my stock “makefile” (having canonically .t3m extension), and, after adding the source files, compiles (makes…) the story file without an hitch, even recompiling only the changed sources, as (c)make.

I suggest, instead of a long line of parameters, put these parameters into a makefile, caring, as jbg noted, to the order of the arguments.

Best regards from Italy,
dott. Piergiorgio.

1 Like

Thank you very much. Won’t test it this evening I think, but it will help, I’m sure because it,s logical.

Edit-add: I got it up and running now. Thanks.

1 Like