| 1 | Notes on porting Jam - revised 12/31/2000 |
|---|
| 2 | |
|---|
| 3 | 1) Working out system dependencies in the Jam code. |
|---|
| 4 | |
|---|
| 5 | Jam's OS footprint is fairly small. For OS independent work Jam |
|---|
| 6 | liberally uses standard libc functions like stdio, malloc, and |
|---|
| 7 | string. The OS dependent interfaces are: |
|---|
| 8 | |
|---|
| 9 | From filesys.h: |
|---|
| 10 | |
|---|
| 11 | file_parse() - split a file name into dir/base/suffix/member |
|---|
| 12 | file_build() - build a filename given dir/base/suffix/member |
|---|
| 13 | file_dirscan() - scan a directory for files |
|---|
| 14 | file_archscan() - scan an archive for files |
|---|
| 15 | file_time() - get the timestamp of a file, if not already |
|---|
| 16 | done by file_dirscan(). |
|---|
| 17 | |
|---|
| 18 | From execcmd.h: |
|---|
| 19 | |
|---|
| 20 | execcmd() - execute a shell script |
|---|
| 21 | execwait() - wait for any outstanding execcmd()'s. |
|---|
| 22 | |
|---|
| 23 | The current implementations are: |
|---|
| 24 | |
|---|
| 25 | filemac.c - mac MPW |
|---|
| 26 | filent.c - NT |
|---|
| 27 | fileos2.c - OS/2 |
|---|
| 28 | fileunix.c - all UNIX |
|---|
| 29 | filevms.c - VMS |
|---|
| 30 | |
|---|
| 31 | execmac.c - mac MPW |
|---|
| 32 | execunix.c - UNIX, OS/2, NT |
|---|
| 33 | execvms.c - VMS |
|---|
| 34 | |
|---|
| 35 | 2) Defining OSMAJOR, OSMINOR in jam.h |
|---|
| 36 | |
|---|
| 37 | So that the Jambase and Jamfile know their host, Jam defines $(OS) |
|---|
| 38 | to be something useful for each platform. Make sure that there is |
|---|
| 39 | code in jam.h to generate a useful value for $(OS), and key it off |
|---|
| 40 | the platform specific C-preprocessor symbol. If the C-preprocessor |
|---|
| 41 | doesn't itself defines such a symbol, add a define to the Makefile. |
|---|
| 42 | |
|---|
| 43 | In addition to $(OS), you can also set $(OSPLAT) if the OS runs on |
|---|
| 44 | multiple platforms (like Linux or NT). |
|---|
| 45 | |
|---|
| 46 | 3) Working out system dependencies in the Jambase |
|---|
| 47 | |
|---|
| 48 | With the value of $(OS) available, the Jambase can be extended to |
|---|
| 49 | support special variables or rules for new platforms. See the |
|---|
| 50 | current support for VMS, NT, and Mac. |
|---|
| 51 | |
|---|
| 52 | 4) Yacc troubles |
|---|
| 53 | |
|---|
| 54 | The generated files jamgram.h and jamgram.c are distributed for the |
|---|
| 55 | poor souls without yacc. |
|---|
| 56 | |
|---|
| 57 | 5) Known problematic systems: |
|---|
| 58 | |
|---|
| 59 | - Pyramid has no malloc.h, memory.h |
|---|
| 60 | |
|---|
| 61 | - Encore has no stdlib.h |
|---|
| 62 | |
|---|
| 63 | - Bull DPX has sys/file.h problems |
|---|
| 64 | |
|---|
| 65 | 6) Send the results back. |
|---|
| 66 | |
|---|
| 67 | If you do porting work, the result can be integrated into future |
|---|
| 68 | releases if you send it back to the author's address in the README. |
|---|