From cb7dbfc219073249b98d5e3778741d3c9a51c85c Mon Sep 17 00:00:00 2001 From: Mitchell Stokes Date: Sun, 19 May 2019 20:20:35 -0700 Subject: [PATCH] Remove unused files there were referencing ToonTown Closes #659 --- .../src/level_editor/donaldsDockColors.txt | 108 - .../src/level_editor/donaldsDockStyles.txt | 64 - .../src/level_editor/donalds_dock_layout.flt | Bin 10752 -> 0 bytes .../level_editor/minniesMelodyLandColors.txt | 61 - .../level_editor/minniesMelodyLandStyles.txt | 79 - .../minnies_melody_land_layout.flt | Bin 10752 -> 0 bytes dmodels/src/level_editor/theBurrrghColors.txt | 65 - dmodels/src/level_editor/theBurrrghStyles.txt | 90 - .../src/level_editor/the_burrrgh_layout.flt | Bin 10752 -> 0 bytes .../level_editor/toontownCentralColors.txt | 106 - .../level_editor/toontownCentralStyles.txt | 84 - .../level_editor/toontown_central_layout.flt | Bin 10752 -> 0 bytes dtool/src/dtoolbase/dllbase.txt | 47 - pandatool/src/scripts/.cshrc | 122 -- pandatool/src/scripts/basedlls.pl | 111 - pandatool/src/scripts/binreplace.pl | 42 - pandatool/src/scripts/builder.cshrc | 207 -- pandatool/src/scripts/builder.pl | 761 ------- pandatool/src/scripts/cvlog.pl | 1849 ----------------- pandatool/src/scripts/lastchng.pl | 42 - pandatool/src/scripts/wlastchng.pl | 45 - 21 files changed, 3883 deletions(-) delete mode 100644 dmodels/src/level_editor/donaldsDockColors.txt delete mode 100644 dmodels/src/level_editor/donaldsDockStyles.txt delete mode 100644 dmodels/src/level_editor/donalds_dock_layout.flt delete mode 100644 dmodels/src/level_editor/minniesMelodyLandColors.txt delete mode 100644 dmodels/src/level_editor/minniesMelodyLandStyles.txt delete mode 100644 dmodels/src/level_editor/minnies_melody_land_layout.flt delete mode 100644 dmodels/src/level_editor/theBurrrghColors.txt delete mode 100644 dmodels/src/level_editor/theBurrrghStyles.txt delete mode 100644 dmodels/src/level_editor/the_burrrgh_layout.flt delete mode 100644 dmodels/src/level_editor/toontownCentralColors.txt delete mode 100644 dmodels/src/level_editor/toontownCentralStyles.txt delete mode 100644 dmodels/src/level_editor/toontown_central_layout.flt delete mode 100644 dtool/src/dtoolbase/dllbase.txt delete mode 100644 pandatool/src/scripts/.cshrc delete mode 100755 pandatool/src/scripts/basedlls.pl delete mode 100755 pandatool/src/scripts/binreplace.pl delete mode 100644 pandatool/src/scripts/builder.cshrc delete mode 100755 pandatool/src/scripts/builder.pl delete mode 100755 pandatool/src/scripts/cvlog.pl delete mode 100755 pandatool/src/scripts/lastchng.pl delete mode 100755 pandatool/src/scripts/wlastchng.pl diff --git a/dmodels/src/level_editor/donaldsDockColors.txt b/dmodels/src/level_editor/donaldsDockColors.txt deleted file mode 100644 index d5c1c9c8f7..0000000000 --- a/dmodels/src/level_editor/donaldsDockColors.txt +++ /dev/null @@ -1,108 +0,0 @@ -corniceColor: Vec4(0.11, 0.80, 0.22, 1.0) -corniceColor: Vec4(0.21, 0.73, 0.31, 1.0) -corniceColor: Vec4(0.22, 0.96, 0.27, 1.0) -corniceColor: Vec4(0.57, 0.39, 0.34, 1.0) -corniceColor: Vec4(0.59, 1.00, 0.92, 1.0) -corniceColor: Vec4(0.66, 1.00, 0.86, 1.0) -corniceColor: Vec4(0.73, 0.51, 0.51, 1.0) -corniceColor: Vec4(0.75, 0.45, 0.45, 1.0) -corniceColor: Vec4(0.76, 0.57, 0.29, 1.0) -corniceColor: Vec4(0.76, 0.73, 0.64, 1.0) -corniceColor: Vec4(0.82, 0.91, 0.44, 1.0) -corniceColor: Vec4(0.90, 0.56, 0.34, 1.0) -corniceColor: Vec4(0.91, 0.54, 0.44, 1.0) -corniceColor: Vec4(0.91, 0.63, 0.44, 1.0) -corniceColor: Vec4(0.94, 0.35, 0.35, 1.0) -corniceColor: Vec4(0.94, 0.72, 0.66, 1.0) -corniceColor: Vec4(1.00, 0.42, 0.27, 1.0) -corniceColor: Vec4(1.00, 0.50, 0.38, 1.0) -corniceColor: Vec4(1.00, 0.69, 0.49, 1.0) -corniceColor: Vec4(1.00, 0.71, 0.27, 1.0) -corniceColor: Vec4(1.00, 0.84, 0.59, 1.0) -corniceColor: Vec4(1.00, 0.88, 0.80, 1.0) -corniceColor: Vec4(1.00, 0.92, 0.59, 1.0) -corniceColor: Vec4(1.00, 1.00, 0.59, 1.0) - -doorColor: Vec4(0.45, 0.53, 0.45, 1.0) -doorColor: Vec4(0.52, 0.61, 0.52, 1.0) -doorColor: Vec4(0.60, 0.67, 0.54, 1.0) -doorColor: Vec4(0.63, 0.48, 0.34, 1.0) -doorColor: Vec4(0.79, 0.47, 0.47, 1.0) -doorColor: Vec4(0.86, 0.48, 0.23, 1.0) -doorColor: Vec4(0.88, 0.43, 0.43, 1.0) -doorColor: Vec4(0.91, 0.34, 0.34, 1.0) -doorColor: Vec4(0.94, 0.70, 0.49, 1.0) -doorColor: Vec4(0.97, 0.55, 0.40, 1.0) -doorColor: Vec4(1.00, 0.59, 0.59, 1.0) - -wallColor: Vec4(0.17, 0.44, 0.28, 1.0) -wallColor: Vec4(0.17, 0.45, 0.23, 1.0) -wallColor: Vec4(0.36, 0.45, 0.22, 1.0) -wallColor: Vec4(0.38, 0.31, 0.19, 1.0) -wallColor: Vec4(0.38, 0.68, 0.46, 1.0) -wallColor: Vec4(0.42, 0.16, 0.16, 1.0) -wallColor: Vec4(0.42, 0.25, 0.25, 1.0) -wallColor: Vec4(0.44, 0.67, 0.45, 1.0) -wallColor: Vec4(0.45, 0.31, 0.17, 1.0) -wallColor: Vec4(0.48, 0.93, 0.74, 1.0) -wallColor: Vec4(0.52, 0.96, 0.79, 1.0) -wallColor: Vec4(0.57, 0.70, 0.35, 1.0) -wallColor: Vec4(0.63, 0.47, 0.24, 1.0) -wallColor: Vec4(0.63, 0.60, 0.40, 1.0) -wallColor: Vec4(0.64, 0.24, 0.32, 1.0) -wallColor: Vec4(0.71, 0.49, 0.35, 1.0) -wallColor: Vec4(0.75, 0.45, 0.45, 1.0) -wallColor: Vec4(0.81, 0.48, 0.48, 1.0) -wallColor: Vec4(0.87, 0.61, 0.61, 1.0) -wallColor: Vec4(0.87, 0.69, 0.42, 1.0) -wallColor: Vec4(0.91, 0.54, 0.54, 1.0) -wallColor: Vec4(0.92, 0.63, 0.42, 1.0) -wallColor: Vec4(0.93, 0.15, 0.15, 1.0) -wallColor: Vec4(1.00, 0.00, 0.00, 1.0) - -windowColor: Vec4(0.00, 0.53, 0.32, 1.0) -windowColor: Vec4(0.00, 0.61, 0.36, 1.0) -windowColor: Vec4(0.07, 0.47, 0.31, 1.0) -windowColor: Vec4(0.08, 0.47, 0.31, 1.0) -windowColor: Vec4(0.17, 0.64, 0.45, 1.0) -windowColor: Vec4(0.50, 0.38, 0.22, 1.0) -windowColor: Vec4(0.64, 0.93, 0.45, 1.0) -windowColor: Vec4(0.69, 0.44, 0.15, 1.0) -windowColor: Vec4(0.73, 0.46, 0.37, 1.0) -windowColor: Vec4(0.73, 0.63, 0.37, 1.0) -windowColor: Vec4(0.73, 0.63, 0.45, 1.0) -windowColor: Vec4(0.74, 0.55, 0.32, 1.0) -windowColor: Vec4(0.78, 0.49, 0.29, 1.0) -windowColor: Vec4(0.79, 0.47, 0.47, 1.0) -windowColor: Vec4(0.82, 0.82, 0.40, 1.0) -windowColor: Vec4(0.87, 0.55, 0.33, 1.0) -windowColor: Vec4(0.87, 0.65, 0.33, 1.0) -windowColor: Vec4(0.88, 0.43, 0.43, 1.0) -windowColor: Vec4(0.91, 0.34, 0.45, 1.0) -windowColor: Vec4(1.00, 0.50, 0.38, 1.0) -windowColor: Vec4(1.00, 0.63, 0.38, 1.0) - -propColor: Vec4(0.17, 0.44, 0.28, 1.0) -propColor: Vec4(0.17, 0.45, 0.23, 1.0) -propColor: Vec4(0.36, 0.45, 0.22, 1.0) -propColor: Vec4(0.38, 0.31, 0.19, 1.0) -propColor: Vec4(0.38, 0.68, 0.46, 1.0) -propColor: Vec4(0.42, 0.16, 0.16, 1.0) -propColor: Vec4(0.42, 0.25, 0.25, 1.0) -propColor: Vec4(0.44, 0.67, 0.45, 1.0) -propColor: Vec4(0.45, 0.31, 0.17, 1.0) -propColor: Vec4(0.48, 0.93, 0.74, 1.0) -propColor: Vec4(0.52, 0.96, 0.79, 1.0) -propColor: Vec4(0.57, 0.70, 0.35, 1.0) -propColor: Vec4(0.63, 0.47, 0.24, 1.0) -propColor: Vec4(0.63, 0.60, 0.40, 1.0) -propColor: Vec4(0.64, 0.24, 0.32, 1.0) -propColor: Vec4(0.71, 0.49, 0.35, 1.0) -propColor: Vec4(0.75, 0.45, 0.45, 1.0) -propColor: Vec4(0.81, 0.48, 0.48, 1.0) -propColor: Vec4(0.87, 0.61, 0.61, 1.0) -propColor: Vec4(0.87, 0.69, 0.42, 1.0) -propColor: Vec4(0.91, 0.54, 0.54, 1.0) -propColor: Vec4(0.92, 0.63, 0.42, 1.0) -propColor: Vec4(0.93, 0.15, 0.15, 1.0) -propColor: Vec4(1.00, 0.00, 0.00, 1.0) diff --git a/dmodels/src/level_editor/donaldsDockStyles.txt b/dmodels/src/level_editor/donaldsDockStyles.txt deleted file mode 100644 index 8e2d7a49b3..0000000000 --- a/dmodels/src/level_editor/donaldsDockStyles.txt +++ /dev/null @@ -1,64 +0,0 @@ -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.417323, 0.15711, 0.15711, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.874016, 0.654655, 0.329041, 1.0) -corniceTexture: cornice_marble_ur -corniceColor: Vec4(0.76378, 0.572086, 0.287541, 1.0) - -wallTexture: wall_sm_wood_ur -wallColor: Vec4(0.874016, 0.610097, 0.610097, 1.0) -windowTexture: window_sm_shuttered_ur -windowColor: Vec4(0.874016, 0.548402, 0.329041, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_sm_wood_ur -wallColor: Vec4(0.913386, 0.540868, 0.540868, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.0778138, 0.472441, 0.314961, 1.0) -corniceTexture: cornice_horizontal_ur -corniceColor: Vec4(1.0, 0.501961, 0.376471, 1.0) - -wallTexture: wall_sm_wood_ur -wallColor: Vec4(0.913386, 0.540868, 0.540868, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.0778138, 0.472441, 0.314961, 1.0) -corniceTexture: cornice_shingles_ur -corniceColor: Vec4(0.732283, 0.511163, 0.511163, 1.0) - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.384314, 0.305635, 0.187618, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.779528, 0.489115, 0.293469, 1.0) -corniceTexture: cornice_dental_ur -corniceColor: Vec4(0.574803, 0.38771, 0.340374, 1.0) - -wallTexture: wall_bricks_dr -wallColor: Vec4(0.629921, 0.471823, 0.237147, 1.0) -windowTexture: window_sm_shuttered_ur -windowColor: Vec4(1.0, 0.627451, 0.376471, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_board_ur -wallColor: Vec4(0.929134, 0.153034, 0.153034, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.0, 0.532747, 0.317894, 1.0) -corniceTexture: cornice_shingles_ur -corniceColor: Vec4(0.944882, 0.715146, 0.659565, 1.0) - -wallTexture: wall_lg_brick_ur -wallColor: Vec4(0.166003, 0.440945, 0.276671, 1.0) -windowTexture: window_md_curtains_ur -windowColor: Vec4(0.17258, 0.637795, 0.450208, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_board_ur -wallColor: Vec4(0.929134, 0.153034, 0.153034, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.0, 0.532747, 0.317894, 1.0) -corniceTexture: None -corniceColor: None - - diff --git a/dmodels/src/level_editor/donalds_dock_layout.flt b/dmodels/src/level_editor/donalds_dock_layout.flt deleted file mode 100644 index 88ff832b95876034d4abd94680c00e6d755dc2a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 bjD_4QGoR7Mu_eb}&hxKP-qG%3zp4Be-N@KF diff --git a/dmodels/src/level_editor/minniesMelodyLandColors.txt b/dmodels/src/level_editor/minniesMelodyLandColors.txt deleted file mode 100644 index a949502b4d..0000000000 --- a/dmodels/src/level_editor/minniesMelodyLandColors.txt +++ /dev/null @@ -1,61 +0,0 @@ -corniceColor: Vec4(0.43, 0.32, 0.85, 1.0) -corniceColor: Vec4(0.67, 0.40, 0.99, 1.0) -corniceColor: Vec4(0.68, 0.22, 0.80, 1.0) -corniceColor: Vec4(0.80, 0.22, 0.68, 1.0) -corniceColor: Vec4(0.81, 0.30, 0.51, 1.0) -corniceColor: Vec4(1.00, 1.00, 0.58, 1.0) - -doorColor: Vec4(0.42, 0.42, 0.85, 1.0) -doorColor: Vec4(0.45, 0.22, 0.60, 1.0) -doorColor: Vec4(0.49, 0.79, 1.00, 1.0) -doorColor: Vec4(0.56, 0.80, 0.65, 1.0) -doorColor: Vec4(0.59, 0.49, 1.00, 1.0) -doorColor: Vec4(0.64, 0.45, 0.92, 1.0) -doorColor: Vec4(0.65, 0.40, 0.82, 1.0) -doorColor: Vec4(0.69, 0.33, 0.69, 1.0) -doorColor: Vec4(0.80, 0.56, 0.65, 1.0) -doorColor: Vec4(0.87, 0.80, 0.47, 1.0) -doorColor: Vec4(0.97, 0.87, 0.47, 1.0) -doorColor: Vec4(1.00, 0.42, 0.85, 1.0) -doorColor: Vec4(1.00, 0.79, 0.49, 1.0) - -wallColor: Vec4(0.49, 0.69, 1.00, 1.0) -wallColor: Vec4(0.59, 0.75, 1.00, 1.0) -wallColor: Vec4(0.70, 0.76, 1.00, 1.0) -wallColor: Vec4(0.80, 0.47, 0.80, 1.0) -wallColor: Vec4(0.80, 0.80, 0.47, 1.0) -wallColor: Vec4(0.91, 0.91, 0.54, 1.0) -wallColor: Vec4(0.96, 0.96, 0.47, 1.0) -wallColor: Vec4(0.96, 0.96, 0.73, 1.0) -wallColor: Vec4(0.97, 0.36, 0.36, 1.0) -wallColor: Vec4(0.97, 0.47, 0.67, 1.0) -wallColor: Vec4(1.00, 0.70, 0.70, 1.0) -wallColor: Vec4(1.00, 1.00, 1.00, 1.0) - -windowColor: Vec4(0.42, 0.42, 0.85, 1.0) -windowColor: Vec4(0.45, 0.22, 0.60, 1.0) -windowColor: Vec4(0.49, 0.79, 1.00, 1.0) -windowColor: Vec4(0.56, 0.80, 0.65, 1.0) -windowColor: Vec4(0.59, 0.49, 1.00, 1.0) -windowColor: Vec4(0.64, 0.45, 0.92, 1.0) -windowColor: Vec4(0.65, 0.40, 0.82, 1.0) -windowColor: Vec4(0.69, 0.33, 0.69, 1.0) -windowColor: Vec4(0.80, 0.45, 0.71, 1.0) -windowColor: Vec4(0.80, 0.56, 0.65, 1.0) -windowColor: Vec4(0.97, 0.87, 0.47, 1.0) -windowColor: Vec4(1.00, 0.79, 0.49, 1.0) - -propColor: Vec4(0.49, 0.69, 1.00, 1.0) -propColor: Vec4(0.59, 0.75, 1.00, 1.0) -propColor: Vec4(0.70, 0.76, 1.00, 1.0) -propColor: Vec4(0.80, 0.47, 0.80, 1.0) -propColor: Vec4(0.80, 0.80, 0.47, 1.0) -propColor: Vec4(0.91, 0.91, 0.54, 1.0) -propColor: Vec4(0.96, 0.96, 0.47, 1.0) -propColor: Vec4(0.96, 0.96, 0.73, 1.0) -propColor: Vec4(0.97, 0.36, 0.36, 1.0) -propColor: Vec4(0.97, 0.47, 0.67, 1.0) -propColor: Vec4(1.00, 0.70, 0.70, 1.0) -propColor: Vec4(1.00, 1.00, 1.00, 1.0) -propColor: Vec4(0.92, 0.92, 0.92, 1.0) -wallColor: Vec4(0.97, 0.58, 0.55, 1.0) diff --git a/dmodels/src/level_editor/minniesMelodyLandStyles.txt b/dmodels/src/level_editor/minniesMelodyLandStyles.txt deleted file mode 100644 index 4786a8de56..0000000000 --- a/dmodels/src/level_editor/minniesMelodyLandStyles.txt +++ /dev/null @@ -1,79 +0,0 @@ -wallTexture: wall_md_bricks_ur -wallColor: Vec4(0.59, 0.75, 1.00, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.45, 0.22, 0.60, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.91, 0.91, 0.54, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.65, 0.40, 0.82, 1.0) -corniceTexture: cornice_curved_ur -corniceColor: Vec4(0.68, 0.22, 0.80, 1.0) - -wallTexture: wall_sm_brick_pink_ur -wallColor: Vec4(1.00, 1.00, 1.00, 1.0) -windowTexture: window_sm_curved_ur -windowColor: Vec4(0.49, 0.79, 1.00, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_lg_rock_ur -wallColor: Vec4(0.80, 0.47, 0.80, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.80, 0.56, 0.65, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_lg_rock_ur -wallColor: Vec4(0.80, 0.80, 0.47, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.56, 0.80, 0.65, 1.0) -corniceTexture: cornice_marble_ur -corniceColor: Vec4(0.80, 0.22, 0.68, 1.0) - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.49, 0.69, 1.00, 1.0) -windowTexture: window_sm_curved_ur -windowColor: Vec4(0.59, 0.49, 1.00, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_bricks_ur -wallColor: Vec4(1.00, 0.70, 0.70, 1.0) -windowTexture: window_md_curved_ur -windowColor: Vec4(1.00, 0.79, 0.49, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.96, 0.96, 0.47, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.69, 0.33, 0.69, 1.0) -corniceTexture: cornice_brick_ur -corniceColor: Vec4(0.81, 0.30, 0.51, 1.0) - -wallTexture: wall_md_bricks_ur -wallColor: Vec4(0.70, 0.76, 1.00, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.42, 0.42, 0.85, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_lg_brick_ur -wallColor: Vec4(0.97, 0.47, 0.67, 1.0) -windowTexture: window_md_curtains_ur -windowColor: Vec4(0.64, 0.45, 0.92, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.97, 0.36, 0.36, 1.0) -windowTexture: window_sm_curved_ur -windowColor: Vec4(0.97, 0.87, 0.47, 1.0) -corniceTexture: cornice_curved_ur -corniceColor: Vec4(0.43, 0.32, 0.85, 1.0) - - - diff --git a/dmodels/src/level_editor/minnies_melody_land_layout.flt b/dmodels/src/level_editor/minnies_melody_land_layout.flt deleted file mode 100644 index 4859de3db633a247510d0ba5c449013674d73a75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 diff --git a/dmodels/src/level_editor/theBurrrghColors.txt b/dmodels/src/level_editor/theBurrrghColors.txt deleted file mode 100644 index bb3e20c21e..0000000000 --- a/dmodels/src/level_editor/theBurrrghColors.txt +++ /dev/null @@ -1,65 +0,0 @@ -corniceColor: Vec4(0.00, 0.34, 0.58, 1.0) -corniceColor: Vec4(0.34, 0.90, 0.87, 1.0) -corniceColor: Vec4(0.41, 0.58, 0.85, 1.0) -corniceColor: Vec4(0.42, 0.98, 0.74, 1.0) -corniceColor: Vec4(1.00, 1.00, 1.00, 1.0) - -doorColor: Vec4(0.00, 0.87, 0.69, 1.0) -doorColor: Vec4(0.22, 0.83, 0.83, 1.0) -doorColor: Vec4(0.23, 0.71, 0.84, 1.0) -doorColor: Vec4(0.23, 0.85, 0.60, 1.0) -doorColor: Vec4(0.24, 0.76, 0.89, 1.0) -doorColor: Vec4(0.27, 1.00, 0.85, 1.0) -doorColor: Vec4(0.38, 0.63, 1.00, 1.0) -doorColor: Vec4(0.49, 0.69, 1.00, 1.0) -doorColor: Vec4(0.49, 0.89, 1.00, 1.0) -doorColor: Vec4(0.50, 0.64, 0.85, 1.0) -doorColor: Vec4(0.59, 1.00, 0.92, 1.0) -doorColor: Vec4(1.00, 1.00, 1.00, 1.0) - -wallColor: Vec4(0.00, 0.87, 0.69, 1.0) -wallColor: Vec4(0.22, 0.83, 0.83, 1.0) -wallColor: Vec4(0.23, 0.85, 0.60, 1.0) -wallColor: Vec4(0.24, 0.76, 0.89, 1.0) -wallColor: Vec4(0.25, 0.64, 0.91, 1.0) -wallColor: Vec4(0.27, 1.00, 0.85, 1.0) -wallColor: Vec4(0.38, 0.63, 1.00, 1.0) -wallColor: Vec4(0.49, 0.69, 1.00, 1.0) -wallColor: Vec4(0.49, 0.89, 1.00, 1.0) -wallColor: Vec4(0.50, 0.64, 0.85, 1.0) -wallColor: Vec4(0.59, 1.00, 0.92, 1.0) -wallColor: Vec4(1.00, 1.00, 1.00, 1.0) - -windowColor: Vec4(0.00, 0.69, 0.69, 1.0) -windowColor: Vec4(0.00, 0.87, 0.69, 1.0) -windowColor: Vec4(0.14, 0.42, 0.85, 1.0) -windowColor: Vec4(0.16, 0.67, 1.00, 1.0) -windowColor: Vec4(0.20, 0.53, 0.46, 1.0) -windowColor: Vec4(0.22, 0.83, 0.83, 1.0) -windowColor: Vec4(0.23, 0.71, 0.84, 1.0) -windowColor: Vec4(0.23, 0.85, 0.60, 1.0) -windowColor: Vec4(0.24, 0.76, 0.89, 1.0) -windowColor: Vec4(0.27, 1.00, 0.85, 1.0) -windowColor: Vec4(0.38, 0.63, 1.00, 1.0) -windowColor: Vec4(0.38, 0.87, 1.00, 1.0) -windowColor: Vec4(0.49, 0.69, 1.00, 1.0) -windowColor: Vec4(0.49, 0.89, 1.00, 1.0) -windowColor: Vec4(0.49, 1.00, 1.00, 1.0) -windowColor: Vec4(0.50, 0.64, 0.85, 1.0) -windowColor: Vec4(0.59, 0.85, 0.69, 1.0) -windowColor: Vec4(0.59, 0.92, 0.61, 1.0) -windowColor: Vec4(0.59, 1.00, 0.92, 1.0) -windowColor: Vec4(1.00, 1.00, 1.00, 1.0) - -propColor: Vec4(0.00, 0.87, 0.69, 1.0) -propColor: Vec4(0.22, 0.83, 0.83, 1.0) -propColor: Vec4(0.23, 0.85, 0.60, 1.0) -propColor: Vec4(0.24, 0.76, 0.89, 1.0) -propColor: Vec4(0.25, 0.64, 0.91, 1.0) -propColor: Vec4(0.27, 1.00, 0.85, 1.0) -propColor: Vec4(0.38, 0.63, 1.00, 1.0) -propColor: Vec4(0.49, 0.69, 1.00, 1.0) -propColor: Vec4(0.49, 0.89, 1.00, 1.0) -propColor: Vec4(0.50, 0.64, 0.85, 1.0) -propColor: Vec4(0.59, 1.00, 0.92, 1.0) -propColor: Vec4(1.00, 1.00, 1.00, 1.0) diff --git a/dmodels/src/level_editor/theBurrrghStyles.txt b/dmodels/src/level_editor/theBurrrghStyles.txt deleted file mode 100644 index f4cff44b35..0000000000 --- a/dmodels/src/level_editor/theBurrrghStyles.txt +++ /dev/null @@ -1,90 +0,0 @@ -wallTexture: wall_lg_brick_ur -wallColor: Vec4(0.25, 0.64, 0.91, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.23, 0.71, 0.84, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.00, 0.87, 0.69, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.23, 0.71, 0.84, 1.0) -corniceTexture: cornice_curved_ur -corniceColor: Vec4(0.00, 0.34, 0.58, 1.0) - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.49, 0.69, 1.00, 1.0) -windowTexture: window_sm_curved_ur -windowColor: Vec4(0.20, 0.53, 0.46, 1.0) -corniceTexture: cornice_ice_ur -corniceColor: Vec4(1.00, 1.00, 1.00, 1.0) - -wallTexture: wall_sm_brick_blue_ur -wallColor: Vec4(1.00, 1.00, 1.00, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.49, 1.00, 1.00, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.27, 1.00, 0.85, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.49, 1.00, 1.00, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.49, 0.89, 1.00, 1.0) -windowTexture: window_sm_pointed_ur -windowColor: Vec4(0.00, 0.69, 0.69, 1.0) -corniceTexture: cornice_ice_ur -corniceColor: Vec4(1.00, 1.00, 1.00, 1.0) - -wallTexture: wall_md_bricks_ur -wallColor: Vec4(0.50, 0.64, 0.85, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.14, 0.42, 0.85, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.38, 0.63, 1.00, 1.0) -windowTexture: window_porthole_ur -windowColor: Vec4(0.14, 0.42, 0.85, 1.0) -corniceTexture: cornice_dental_ur -corniceColor: Vec4(0.41, 0.58, 0.85, 1.0) - -wallTexture: wall_bricks_ur -wallColor: Vec4(0.23, 0.85, 0.60, 1.0) -windowTexture: window_sm_square_ur -windowColor: Vec4(0.59, 0.85, 0.69, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_bricks_ur -wallColor: Vec4(0.59, 1.00, 0.92, 1.0) -windowTexture: window_md_curved_ur -windowColor: Vec4(0.16, 0.67, 1.00, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_md_blank_ur -wallColor: Vec4(0.22, 0.83, 0.83, 1.0) -windowTexture: window_sm_curved_ur -windowColor: Vec4(0.38, 0.87, 1.00, 1.0) -corniceTexture: cornice_ice_ur -corniceColor: Vec4(1.00, 1.00, 1.00, 1.0) - -wallTexture: wall_sm_cement_blue_ur -wallColor: Vec4(1.00, 1.00, 1.00, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.59, 0.92, 0.61, 1.0) -corniceTexture: None -corniceColor: None - -wallTexture: wall_bricks_ur -wallColor: Vec4(0.24, 0.76, 0.89, 1.0) -windowTexture: window_sm_round_ur -windowColor: Vec4(0.59, 0.92, 0.61, 1.0) -corniceTexture: None -corniceColor: None diff --git a/dmodels/src/level_editor/the_burrrgh_layout.flt b/dmodels/src/level_editor/the_burrrgh_layout.flt deleted file mode 100644 index f2aaabf6018986d72db9adf72da811771185d165..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10752 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 junk; windiff junk \!* &' -#only works if cur ver differs from checked in version -#alias newdiff 'cvs diff -r`log -h \!* | grep head | sed -e "s/head: //"` \!*' -# turns out all you need is this -alias newdiff 'cvs diff -r HEAD -w \!*' -# need version that picks out last 2 revs and does the diff -alias cvsclean "find \!* -path '*CVS*' -prune -or -not -name 'bldlog*' -and -not -type d -print | xargs --no-run-if-empty -n 40 rm" - diff --git a/pandatool/src/scripts/basedlls.pl b/pandatool/src/scripts/basedlls.pl deleted file mode 100755 index 05d01cca30..0000000000 --- a/pandatool/src/scripts/basedlls.pl +++ /dev/null @@ -1,111 +0,0 @@ -#!perl - -# generate address base file for panda dlls -# to simplify things, do it for Opt1 and reuse that for Opt2, -# and do it for Opt3 and use that for Opt4, since they will both be bigger than counterparts -# to run, in any directory, do 'perl basedlls.pl' and it will generate dllbase.txt and dllbase_d.txt in 'tmp' dir under current -# make sure Opt1 and Opt3 are current so current sizes are used in map - -$archive_root="\\\\dimbo\\panda\\win\\"; -#edit this to where rebase.exe is on your machine, must be cygwin-style path for cygwin perl -$rebase_path="/msvc7/Common7/Tools/bin"; -$ENV{'PATH'}=$rebase_path.":".$ENV{'PATH'}; - -# note: this is the order dlls will be laid out in memory -@dll_names=("libpanda","libwindisplay","libpandadx8","libpandadx7","libpandagl","libpandaexpress","libpandaphysics","libpandafx","libdtool","libdtoolconfig","libpystub","libdirect","libtoontown","libmiles_audio","libpandaegg","libframework"); - -# old audio dlls -# "libaudio_load_midi","libaudio_load_mp3","libaudio_load_st","libaudio_load_wav", - -@headerstrs=( -"This file is used by the MSVC linker to specify DLL base addresses to", -"prevent runtime relocation of DLLs by the windows loader. This speeds", -"loading. This file was generated using \$PANDATOOL/src/scripts/basedlls.pl", -"which uses rebase.exe from the MS platform SDK. It may additionally be", -"hand-hacked to simplify addresses for popular dlls to aid debugging.", -); - -$headerstr=""; -for($i=0;$i<=$#headerstrs;$i++) { - $headerstr.="; ".$headerstrs[$i]."\n"; -} - -@modules=("dtool","panda","direct","toontown"); - -$dll_names_nodbg=""; -$dll_names_dbg=""; - -foreach my $nm (@dll_names) { - $dll_names_nodbg.=" ".$nm.".dll"; - $dll_names_dbg.=" ".$nm."_d.dll"; -} - -# 0x60000000 is the recommended base address for user dll addr space -$baseaddr="0x60000000"; -$dllbasefile="dllbase.txt"; -$basedlllogfilename="log.txt"; - -# rebase will modify input dlls, so make tmp copies of them -if(!(-d "tmp")) { - system("mkdir tmp"); -} -chdir("tmp"); -unlink($basedlllogfilename); - -############################ -### do release - -$archivepath=$archive_root."release"; - -# need to remove existing files or rebase will just append to them -open(OUTFILE, ">$dllbasefile") || die "Couldn't open $dllbasefile!\n"; -print OUTFILE $headerstr; -print OUTFILE "\n; release dlls\n\n"; -close(OUTFILE); - -foreach my $dir1 (@modules) { - my @args=("cmd.exe","/c","copy ".$archivepath."\\$dir1\\lib\\*.dll ."); - system(@args); -} - -$argstr="-v -b $baseaddr -c $dllbasefile -l $basedlllogfilename $dll_names_nodbg"; - -#@args=("cmd.exe","/C","rebase.exe $argstr"); -#print $args[0]." ".$args[1]." ".$args[2]."\n"; -@args=("rebase.exe $argstr"); -print $args[0]."\n"; -system(@args); - -############################ -### do debug - -open(OUTFILE, ">>$dllbasefile") || die "Couldn't open $dllbasefile!\n"; -print OUTFILE "\n; debug dlls\n\n"; -close(OUTFILE); - -$archivepath=$archive_root."debug"; -foreach my $dir1 (@modules) { - my @args=("cmd.exe","/c","copy ".$archivepath."\\$dir1\\lib\\*.dll ."); - system(@args); -} - -$argstr="-v -b $baseaddr -c $dllbasefile -l $basedlllogfilename $dll_names_dbg"; -#@args=("cmd.exe","/C","rebase.exe $argstr"); -#print $args[0]." ".$args[1]." ".$args[2]."\n"; -@args=("rebase.exe $argstr"); -print $args[0]."\n"; -system(@args); - -#cygwin d2u seems to not work rite -$d2u_path=$ENV{'HOME'}."/player/wintools/bin"; -$ENV{'PATH'}=$d2u_path.":".$ENV{'PATH'}; -print $ENV{'PATH'},"\n"; -@args=("dos2unix",$dllbasefile); -print $args[0]." ".$args[1]." ".$args[2]."\n"; -system(@args); - -print "do cp tmp/dllbase.txt ~/player/dtool/src/dtoolbase\n"; - -exit(0); - - diff --git a/pandatool/src/scripts/binreplace.pl b/pandatool/src/scripts/binreplace.pl deleted file mode 100755 index 8bae8935c5..0000000000 --- a/pandatool/src/scripts/binreplace.pl +++ /dev/null @@ -1,42 +0,0 @@ -#!perl -if($#ARGV<2) { - print "Usage: perl binreplace.pl [-i] [findstr] [replacestr] [filename]\n"; - exit(1); -} - -$argnum=0; -$case_insensitive = 0; -if($ARGV[0] eq "-i") { - $argnum=1; - $case_insensitive = 1; -} -$findstr = $ARGV[$argnum]; $argnum++; -$replacestr = $ARGV[$argnum]; $argnum++; -$filename = $ARGV[$argnum]; $argnum++; - -$filenamebak = $filename.".bak"; -$retval = rename($filename,$filenamebak); -if(! $retval) { - die "rename(".$filename.",".$filenamebak.") failed!\n"; -} - -print "replacing '".$findstr."' with '".$replacestr."' in ".$filename."\n"; - -# for some reason, you need to double the $findstr \'s but not the replacestr ones - -$findstr =~ s/\\/\\\\/g; -#$replacestr =~ s/\\/\\\\/g; - -open IN, $filenamebak or die "can't read ".$filenamebak." $!"; -open OUT, ">$filename" or die "can't create ".$filename.": $!"; -binmode IN; -binmode OUT; - -if($case_insensitive) { - s/$findstr/$replacestr/gi, print OUT while ; -} else { - s/$findstr/$replacestr/g, print OUT while ; -} -close OUT; -close IN; -unlink($filenamebak); diff --git a/pandatool/src/scripts/builder.cshrc b/pandatool/src/scripts/builder.cshrc deleted file mode 100644 index e79489ad78..0000000000 --- a/pandatool/src/scripts/builder.cshrc +++ /dev/null @@ -1,207 +0,0 @@ -set prompt='%m:%B%~%b> ' -alias ls 'ls -C -F' -alias dir ls -C -F -l -alias vi vim -alias fd ftp dumbo -alias tz tar zxvf -alias spo1 setenv PANDA_OPTIMIZE 1 -alias spo2 setenv PANDA_OPTIMIZE 2 -alias spo3 setenv PANDA_OPTIMIZE 3 -alias spo4 setenv PANDA_OPTIMIZE 4 -alias snoi setenv NO_INTERROGATE 1 -alias usnoi unsetenv NO_INTERROGATE -alias set_intel setenv USE_COMPILER INTEL -alias set_msvc setenv USE_COMPILER MSVC - -alias cpd 'cd $PANDA/src' -#alias emacs xemacs -#alias em xemacs -alias mi make install -alias ni nmake install -alias dh demo /install/models/herc-6000.egg /install/models/HB_1_HE1.egg -set nobeep=1 - -if(! $?TCSH_NO_CHANGEPATH) then -# have to manually put '\' in front of spaces for this to work -# this is completely reset at file end -set oldpath=($path) -set path=(./ /bin /usr/local/bin /mscommon/Tools/WinNT /mscommon/MSDev98/Bin /mscommon/Tools /msvc98/Bin /mspsdk/Bin /mspsdk/Bin/WinNT /c/WINNT/System32/Wbem /c/PROGRA~1/TCL/bin /c/Program\ Files/Resource\ Pro\ Kit/ /c/Program\ Files/Resource\ Kit/ /c/WINNT/system32 /c/WINNT /c/bin /c/xemacs/bin/i686-pc-cygwin /emacs-20.7/bin) -endif - -# my defaults for panda build -if (! $?PANDA_OPTIMIZE ) then -setenv PANDA_OPTIMIZE 2 -endif - -setenv CL_MAKE_BROWSE_INFO 0 -alias setbrowseinfo1 setenv CL_MAKE_BROWSE_INFO 1 -alias setbrowseinfo0 setenv CL_MAKE_BROWSE_INFO 0 - -setenv HAVE_GL yes -setenv HAVE_DX9 yes -setenv USE_NSPR t - -if (! $?USER ) then -setenv USER georges -endif - -if (! $?CYGWIN_ROOT) then -# may cause tcsh hang -setenv CYGWIN_ROOT `cygpath -w /` -endif - -setenv PENV_COMPILER WIN32_VC -setenv PENV WIN32 -setenv PANDA_ROOT C:/Cygwin - -setenv CVSROOT :pserver:cxgeorge@dimbo:/fit/cvs -#setenv CVS_PASSFILE ~/.cvspass - -# check out files read-only -# setenv CVSREAD 1 - -if (! $?PANDA_BUILD_TYPE) then -setenv PANDA_BUILD_TYPE gmsvc -endif - -if (! $?PPREMAKE_CONFIG) then -#setenv PPREMAKE_CONFIG /usr/local/etc/Config.pp -#WINTOOLS may not be set, so do this instead -setenv PPREMAKE_CONFIG $HOME/player/wintools/panda/etc/Config.pp -endif - -# for ppremake -#set path=($path /usr/local/panda/bin) -# /usr/local/panda/bin for ppremake -if(! $?TCSH_NO_CHANGEPATH) then -# set path=(/bin /contrib/bin $path ~/scripts $path /usr/local/panda/bin) - -# builder.pl doesnt want initial path changed, except to add these things -set path=(~/scripts $path) -endif - - - -if (! $?TCSH_NO_PANDA_ATTACH ) then -# builder scripts don't attach (attach scripts too buggy on cygwin 1.0) -# they set paths manually -# setenv TOOL /install/tool -setenv MYTOOL ~/player/dtool -setenv MYTOOL_CSHRC $MYTOOL/src/attach/dtool.cshrc -#echo " checking for dtool.cshrc" - -if(-e $MYTOOL_CSHRC) then -setenv DTOOL $MYTOOL -#setenv CTATTACH_DEBUG 1 -#echo " found my dtool.cshrc" -source $DTOOL/etc/dtool.cshrc personal -cta wintools personal -cta panda personal -cta direct personal -cta toontown personal -cd ~/player/panda -# else -# echo "WARNING: $TOOL_CSHRC doesnt exist, panda env setup failed!" -# cd /install -else - -setenv DTOOL /g/player/install/win2k/dtool -source $DTOOL/src/attach/dtool.cshrc install -endif - -alias ctp "cta panda personal;cta wintools personal" -alias ctt "cta direct personal;cta toontown personal" -cta wintools personal -cta panda personal -cta direct personal -cta toontown personal - -if(! $?TCSH_NO_CSHRC_CHDIR ) then -cd $HOME/player/panda -endif - -else - if(! $?TCSH_NO_CHANGEPATH) then - set path=($oldpath $path) - endif -endif - -# this version of emacs ignores cygwin root, cant give it cygwin paths -#set path=(/cygdrive/c/progra~1/XEmacs/XEmacs-21.1.9/i386-pc-win32 /bin /contrib/bin $path) -#set path=( /bin /contrib/bin /cygdrive/c/python16 $path ) -#set path=( /bin /contrib/bin $path ~/scripts /usr/local/winpandatools/win98) -set path=( /bin /contrib/bin $path ~/scripts) -set path=(/intel/compiler60/ia32/bin /intel/iselect/bin /intel/edb $path) - -#set path=($path /cygdrive/c/progra~1/micros~1/common/msdev98/bin /cygdrive/c/progra~1/micros~1/common/tools/winnt /cygdrive/c/progra~1/micros~1/common/tools /cygdrive/c/progra~1/micros~1/vc98/bin /cygdrive/c/winnt /cygdrive/c/winnt/system32 /cygdrive/c/bin) -#set lib = (/cygdrive/c/progra~1/micros~1/vc98/lib /cygdrive/c/progra~1/micros~1/vc98/mfc/lib) -# note: have to set vc envvars in sys env vars -#cd $HOME -unset owd - - -alias md mkdir -alias pp ppremake -alias ppr ppremake -alias wlastchng ~/scripts/wlastchng.pl -alias ni nmake install -alias listincs-all '(grep -h include `(echo *cxx | sed -e "s/test_[^ ]*//g")` | sort | uniq ) | (grep -v \");(echo ""); (grep -h include `(echo *cxx | sed -e "s/test_[^ ]*//g")` | sort | uniq ) | (grep \");' -alias listincs-rep '(grep -h include `(echo *cxx | sed -e "s/test_[^ ]*//g")` | sort | uniq -d) | (grep -v \");(echo ""); (grep -h include `(echo *cxx | sed -e "s/test_[^ ]*//g")` | sort | uniq -d) | (grep \");' -alias listincs-sing '(grep include `(echo *cxx | sed -e "s/test_[^ \t]*//g")` | /bin/sort +1 | uniq -u -f 1 | /bin/sort);' -alias listincs-old '(grep -h include *cxx | sort | uniq ) | (grep -v \");echo ""; (grep -h include *cxx | sort | uniq ) | (grep \");' -alias listincs '(grep -h include *cxx | sort | uniq ) | (grep -v \"); (grep -h include *cxx | sort | uniq ) | (grep \");' -alias prproc 'echo $NUMBER_OF_PROCESSORS' -alias setproc1 setenv NUMBER_OF_PROCESSORS 1 -alias setproc2 setenv NUMBER_OF_PROCESSORS 2 -alias setproc4 setenv NUMBER_OF_PROCESSORS 4 -alias setgenass setenv GEN_ASSEMBLY 1 -alias usetgenass unsetenv GEN_ASSEMBLY -alias mroe more - -alias ctp "cta panda personal;cta wintools personal" -alias mktool 'cd $DTOOL/src/build;./initialize make;cd $DTOOL;make install' -#alias cpdll 'cp -p $PANDA/src/all/pandadx/*dll $PANDA/src/all/panda/*dll $PANDA/src/all/pandaegg/*dll $PANDA/lib;cp -p $PANDA/src/all/pandadx/lib*pdb $PANDA/src/all/panda/lib*pdb $PANDA/src/all/pandaegg/lib*pdb $PANDA/lib' -alias mkdx 'cd ~/player/panda/src/dxgsg; make install; cd ../wdxdisplay; make install; cd ../../metalibs/pandadx; make install; cd ~/player/panda/src/dxgsg' -alias mkdemo 'cd ~/player/panda/src/framework; make install; cd ../testbed; rm Opt*/demo.exe; make install; cd ~/player/panda/src/framework' -alias mkpp 'cd ~/player/panda/src/physics; make install; cd ../particlesystem; make install; cd ../../metalibs/pandaphysics; make install; cd ~/player/panda/src/dxgsg' -# alias mkdemo 'cd ~/player/panda/src/framework; make install; cd ../testbed; make clean; make install; cd ~/player/panda/src/framework' -alias mkdemo 'cd ~/player/panda/src/framework; make install; cd ../testbed; rm Opt*/*.exe; make install; cd ~/player/panda/src/framework' -alias mkgl 'cd ~/player/panda/src/glgsg; make install; cd ../wgldisplay; make install; cd ../../metalibs/pandagl; make install; cd ../../src/panda/wgldisplay' -alias mkegg 'cd ~/player/panda/src/egg; make install; cd ../builder; make install; cd ../egg2sg; make install; cd ../../metalibs/pandaegg; make install; cd ~/player/panda/src/dxgsg' -alias cpdxbak 'chmod a+w $PANDA/dx-bak/*;cp $PANDA/src/dxgsg/*.? $PANDA/src/wdxdisplay/*.? $PANDA/dx-bak' -alias tlinit 'cd $DTOOL/src/build; ./initialize make; cd $DTOOL' -alias setctdbg 'setenv CTATTACH_DEBUG 1' -alias update cvs update -alias cvhist cvs history -a -alias log cvs log -alias updn 'cvs -n update -R -d \!* |& egrep -v "Updating|^\?"' -alias cvdiff cvs diff -alias cvlog ~/scripts/cvlog.pl -alias updr 'cvs update -R -d \!* |& egrep -v "Updating|^\?"' -alias upd 'cvs update -d \!* |& egrep -v "Updating|^\?"' -alias chm 'chmod a+w *' -alias lastchng ~/scripts/lastchng.pl -alias wnewdiff 'cvs update -p -r HEAD \!* > junk ; windiff junk \!* &' -#only works if cur ver differs from checked in version -#alias newdiff 'cvs diff -r`log -h \!* | grep head | sed -e "s/head: //"` \!*' -# turns out all you need is this -alias newdiff 'cvs diff -r HEAD -w \!*' -# need version that picks out last 2 revs and does the diff -alias cvsclean "find \!* -path '*CVS*' -prune -or -not -name 'bldlog*' -and -not -type d -print | xargs --no-run-if-empty -n 40 rm" - -alias genpy4 '~/player/direct/bin/genPyCode win-publish' -alias genpy1 '~/player/direct/bin/genPyCode win-debug' -alias genpy2 '~/player/direct/bin/genPyCode win-debug' -alias genpy3 '~/player/direct/bin/genPyCode win-release' -alias nd newdiff - -# setenv LOCAL_PPREMAKE_CONFIG ~/player/MyConfig.pp - -alias ppy1 'ppython -d `cygpath -w $DIRECT/bin/generatePythonCode` -v -d `cygpath -w $DIRECT/lib/py` -e `cygpath -w $DIRECT/src/extensions` -i libdtoolconfig libpandaexpress libpanda libpandaphysics libdirect libtoontown' -setenv ZPAN /z/cygwin/home/builder/player/panda -setenv XPAN /x/cygwin/home/georges/player/panda -unalias emacs - -alias setcfgdbg setenv CONFIG_CONFIG ':configdbg=1:configpath=CFG_PATH:configpath=ETC_PATH' -alias usetcfgdbg setenv CONFIG_CONFIG 'configpath=CFG_PATH:configpath=ETC_PATH' -alias s source diff --git a/pandatool/src/scripts/builder.pl b/pandatool/src/scripts/builder.pl deleted file mode 100755 index 93338548b5..0000000000 --- a/pandatool/src/scripts/builder.pl +++ /dev/null @@ -1,761 +0,0 @@ -#!perl - -#NOTE: this script assumes you are running the Cygwin perl, which uses the -# Cygwin file paths (i.e. '/' corresponds to 'C:\cygwin') - -my $WIN_INSTALLDIR="\\\\dimbo\\panda\\win"; -my $scriptpath = "C:\\cygwin\\home\\builder\\scripts"; - -# $ENV{'USE_COMPILER'} = "INTEL"; # experiment - -# my $WIN_INSTALLDIR="\\\\cxgeorge-d01\\c\\win"; - -### DEBUG SETTINGS -# my $DEBUG_TREECOPY = 1; -# my $DEBUG_GENERATE_PYTHON_CODE_ONLY = 1; -# my $DEBUG_MAKEBSC_ONLY=1; - -if ($ENV{'DEBUG_GENERATE_PYTHON_CODE_ONLY'} ne '') { - $DEBUG_GENERATE_PYTHON_CODE_ONLY = 1; -} -# my $DO_ARCHIVE_AND_COPY_ONLY = 1; -my $DONT_ARCHIVE_OLD_BUILDS = 0; -my $BLD_DTOOL_ONLY=0; - -my $DIRPATH_SEPARATOR=':'; # set to ';' for non-cygwin NT perl - -my @inst_dirnames=("archive","debug","install","release","publish"); -my $ARCHIVENUM=0; -my $DEBUGNUM=1; -my $INSTALLNUM=2; -my $RELEASENUM=3; -my $PUBLISHNUM=4; -my @inst_dirs; -for(my $i=0;$i<=$#inst_dirnames;$i++) { - $inst_dirs[$i]=$WIN_INSTALLDIR."\\".$inst_dirnames[$i]; -} - -my $VC7_BINDIRS="/msvc7/Vc7/bin".$DIRPATH_SEPARATOR."/msvc7/Common7/Tools/Bin".$DIRPATH_SEPARATOR."/msvc7/Common7/Tools".$DIRPATH_SEPARATOR."/msvc7/Common7/IDE"; - -#if(! $DEBUG_GENERATE_PYTHON_CODE_ONLY) { -# $ENV{'PANDA_OPTIMIZE'}='4'; # var has meaning to my special Config.pp -#} - -$ENV{'WINTOOLS'} = '/home/builder/player/wintools'; -#$ENV{'PPREMAKE_CONFIG'} = '/usr/local/etc/Config.pp'; old location -$ENV{'PPREMAKE_CONFIG'} = $ENV{'WINTOOLS'}.'/panda/etc/Config.pp'; -$ENV{'PPREMAKE_PLATFORM'} = 'Win32'; # generate OptX-Win32 dirs instead of OptX-Cygwin -$ENV{'TCSH_NO_CSHRC_CHDIR'}='1'; -$ENV{'ENABLE_PROFILING'}='1'; # generate .map files - -# needed to add this to fix version.rc path in ppremake? -$ENV{'DTOOL'} = '/home/builder/player/dtool'; - -$ENV{'HOME'}="/home/builder"; -$ENV{'USER'}="builder"; -$ENV{'USERNAME'}=$ENV{'USER'}; - -my $DONT_ARCHIVE_OLD_BUILDS = (($ENV{'DONT_ARCHIVE_OLD_BUILDS'} ne "") || $DONT_ARCHIVE_OLD_BUILDS); - -sub logmsg() { - my $msg = shift; - print $msg."\n"; - open(LOGFILE,">>".$fulllogfilename) || die "can't open log file '$fulllogfilename'\n"; - print LOGFILE $msg."\n"; - close(LOGFILE); -} - -#could change this to use eval, but it would require doubling the '\''s again in filename -sub mychdir() { - my $newdir = shift; - my $retval = chdir($newdir); - &logmsg("chdir(".$newdir.")"); - if(! $retval) { - &logmsg("chdir(".$newdir.") failed!!"); - exit(1); - } -} - -sub mymkdir() { - my $newdir=shift; - if(!(-e $newdir)) { - if(!mkdir($newdir,0xfff)) { - &logmsg("cant create new dir '".$newdir."' !!"); - exit(1); - } - } -} - -sub myrename() { - my $n1 = shift; - my $n2 = shift; - my $retval; - - &logmsg("rename(".$n1.",".$n2.")"); - - if(-e $n2) { - - # find name we can move old target to - my $newnum=1; - while(-e $n2.".old.".$newnum) { - $newnum++; - } - - $newconflicttargetname=$n2.".old.".$newnum; - &logmsg("avoiding rename conflict, renaming old ".$n2." to ".$newconflicttargetname); - $retval = rename($n2,$newconflicttargetname); - if(! $retval) { - &logmsg("rename failing, giving up (check if files or dirs are open in other apps)"); - exit(1); - } - } - - $retval = rename($n1,$n2); - if(! $retval) { - &logmsg("rename(".$n1.",".$n2.") failed!!! (check if files or dirs are open in other apps)"); - exit(1); - } -} - -sub myexecstr() { - my $cmdstr = shift; - my $errstr = shift; - my $dologstr = shift; - my $exec_cshrc_type = shift; - - if($dologstr eq "DO_LOG") { - if($exec_cshrc_type eq "NT cmd") { - $cmdstr.=" >> ".$fulllogfilename_win." 2>&1"; # 2>&1 tells nt cmd.exe to redirect stderr to stdout - } else { - $cmdstr.=" >>& ".$fulllogfilename; # for tcsh - } - - &logmsg($cmdstr); - } - - my $savedhome = $ENV{'HOME'}; - - if( $exec_cshrc_type eq "NO_CSHRC") { - # change $HOME so .cshrc doesn't get sources by tcsh - $ENV{'HOME'}="/"; - } elsif( $exec_cshrc_type eq "NO_PANDA_ATTACH") { - $ENV{'TCSH_NO_PANDA_ATTACH'}="1"; - } - - if($exec_cshrc_type eq "NT cmd") { - my @args = ("cmd.exe", "/c", "$cmdstr"); - $retval = system(@args); - } else { - my @args = ("tcsh.exe", "-c", "$cmdstr"); - $retval = system(@args); - } - - if($retval!=0) { - if(($retval>=256) || ($retval<=-256)) { - $retval= $retval/256; # actual retval - } - if($errstr eq "") { - &logmsg($cmdstr." failed!!!!! continuing anyway...\nError return value=".$retval); - } elsif($errstr ne "nomsg") { - &logmsg($errstr."\nError return value=".$retval); - exit($retval); - } - } - - if($exec_cshrc_type eq "NO_CSHRC") { - $ENV{'HOME'}=$savedhome; - } elsif( $exec_cshrc_type eq "NO_PANDA_ATTACH") { - delete $ENV{'TCSH_NO_PANDA_ATTACH'}; - } -} - -sub gettimestr() { - my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); - $mon++; - return $mon."/".$mday." ".$hour.":".($min<10 ? "0":"").$min; -} - -sub appendpath() { -# note cygwin perl.exe requires ':' instead of ';' as path dir separator - foreach $dir1 (@_) { - $ENV{'PATH'}.=$DIRPATH_SEPARATOR.$CYGBLDROOT.$dir1; - } -} - -sub make_bsc_file() { - &logmsg("*** Generating panda.bsc at ".&gettimestr()." ***"); - -# &mychdir($CYGBLDROOT."/debug"); -# $outputdir=$WINBLDROOT."\\debug"; - - &mychdir($CYGBLDROOT); - $outputdir=$WINBLDROOT; - - $outputname="panda.bsc"; - $outputfilepath=$outputdir."\\".$outputname; - $cmdfilepath=$outputdir."\\makebsc.txt"; - - #open(FILES, "where -r . *.sbr |") || die "Couldn't run 'where'!\n"; - #requires unix/cygwin style find.exe - - open(FILES, "find ".$dirstodostr." -name \"*.sbr\" -print |") || die "Couldn't run 'find'!\n"; - - open(OUTFILE, ">".$cmdfilepath) || die "Couldn't open ".$cmdfilepath."!\n"; - - $filename = ; #skip initial line - $filestr=""; - - $duline = ; - chop $duline; - $filestr=$duline; - - while ($duline = ) - { - chop $duline; # Remove the newline from the end of the filename - $filestr=$filestr."\n".$duline; - } - - print OUTFILE "/n /o ".$outputfilepath." \n"; - print OUTFILE "$filestr","\n"; - close(OUTFILE); - close(FILES); - - # vc7 dirs are not in path env-var by default - $ENV{'PATH'}=$VC7_BINDIRS.$DIRPATH_SEPARATOR.$ENV{'PATH'}; - print $ENV{'PATH'}, "\n"; - - $bscmake_str="bscmake /o ".$outputfilepath." @".$cmdfilepath."\n"; - &myexecstr($bscmake_str,"bscmake failed!!!","DO_LOG","NT cmd"); - - # edit binary so it looks for src on mountable Z drive, so src browsing - # works with Z:\ pointed to \\dragon - - $binreplace_str="perl ".$scriptpath."\\binreplace.pl -i C:\\cygwin Z:\\cygwin ".$outputfilepath."\n"; - &myexecstr($binreplace_str,"binreplace failed!!!","DO_LOG","NT cmd"); - - &myexecstr("copy ".$outputfilepath." ".$inst_dirs[$DEBUGNUM], "copy of ".$outputfilepath." failed!!", "DO_LOG","NT cmd"); - unlink($cmdfilepath); - &mychdir($CYGBLDROOT); - &logmsg("*** Finished generating panda.bsc at ".&gettimestr()." ***"); -} - -sub addpathsfromfile() { - my $dirname = shift; - my $envvarname = shift; - - my $pathfile=$WINBLDROOT."\\".$dirname."\\src\\configfiles\\".$dirname.".pth"; - if(!open(PTHFILE, $pathfile)) { - &logmsg("Couldn't open ".$pathfile."!"); - exit(1); - } - - my @filestrs=; - close(PTHFILE); - foreach my $i (@filestrs) { - chop($i); - $i =~ s/\//\\/g; # switch fwdslash to backslsh -# print $i,"\n"; - $ENV{$envvarname}.=";".$WINBLDROOT."\\".$dirname."\\".$i; - } - -} - -sub AddPckgPath() { - my $pckg = shift; - $ENV{'PATH'}.=":".$ENV{$pckg}."/bin:".$ENV{$pckg}."/lib"; -} - -sub gen_python_code() { - - &logmsg("*** GenPythonCode Start for ".$inst_dirnames[$treenum]." at ".&gettimestr()." ***"); - - &mychdir($CYGBLDROOT."/direct/bin"); - - # ETC_PATH required by generatePythonCode? - $ENV{'ETC_PATH'}='/home/builder/player/panda/etc /home/builder/player/direct/etc /home/builder/player/dtool/etc /home/builder/player/toontown/etc /home/builder/player/pandatool/etc'; - - my $origpath=$ENV{'PATH'}; # save now, restore path after done - - # start new path just for this fn - $ENV{'PATH'}="/bin"; - - &AddPckgPath('WINTOOLS'); - &AddPckgPath('DTOOL'); - &AddPckgPath('PANDATOOL'); - &AddPckgPath('PANDA'); - &AddPckgPath('DIRECT'); - &AddPckgPath('TOONTOWN'); - -# $ENV{'PATH'}=$ENV{'WINTOOLS'}."/bin:".$ENV{'WINTOOLS'}."/lib:/bin:/contrib/bin:/mscommon/Tools/WinNT:/mscommon/MSDev98/Bin:/mscommon/Tools:/msvc98/bin:/home/builder/player/dtool/bin:/home/builder/player/dtool/lib:/home/builder/player/direct/bin:/home/builder/player/direct/lib::/home/builder/player/toontown/bin:/home/builder/player/toontown/lib:/home/builder/player/panda/lib:/home/builder/player/panda/bin:/usr/local/bin:.:/c/WINNT/system32:/c/WINNT:/c/WINNT/System32/Wbem:/c/bin:/mspsdk/Bin/:/mspsdk/Bin/WinNT:/mscommon/Tools/WinNT:/mscommon/MSDev98/Bin:/mscommon/Tools:/msvc98/bin:/home/builder/scripts:/home/builder/player/pandatool/bin:/home/builder/player/pandatool/lib"; - $ENV{'PATH'}.=":/mscommon/Tools/WinNT:/mscommon/MSDev98/Bin:/mscommon/Tools:/msvc98/bin:/usr/local/bin:.:/c/WINNT/system32:/c/WINNT:/c/bin:/mspsdk/Bin/:/mspsdk/Bin/WinNT:/mscommon/Tools/WinNT:/mscommon/Tools:/home/builder/scripts:"; - $ENV{'PATH'}.=$ENV{'WINTOOLS'}."/sdk/python/Tcl/bin:".$ENV{'WINTOOLS'}."/sdk/python/Tcl/lib"; - - $ENV{'PYTHONPATH'}= $WINBLDROOT."\\direct\\src\\showbase;".$WINBLDROOT."\\panda\\lib;".$WINBLDROOT."\\dtool\\lib;".$WINBLDROOT."\\wintools\\bin;".$WINBLDROOT."\\wintools\\lib;"; - $ENV{'PYTHONPATH'}.= $WINBLDROOT."\\wintools\\sdk\\python\\Python-2.2\\Lib;".$WINBLDROOT."\\wintools\\sdk\\python\\Python-2.2\\DLLs;"; - # direct/src/showbase/sitecustomize.py will add paths based on CTPROJS - $ENV{'CTPROJS'}="TOONTOWN:personal DIRECT:personal PANDA:personal WINTOOLS:personal DTOOL:personal"; - -# my $directsrcroot=$WINBLDROOT."\\direct\\src"; - -# this should be unnecessary if sitecustomize.py sees CTPROJS -# # add stuff from etc/[dir].pth -# &addpathsfromfile("direct","PYTHONPATH"); -# &addpathsfromfile("toontown","PYTHONPATH"); - - $ENV{'TCSH_NO_CHANGEPATH'}='1'; - -# old way that tried to do genPyCode directly -# $outputdir = $WINBLDROOT."\\direct\\lib\\py"; -# &mymkdir($outputdir); -# $outputdir.= "\\Opt".$ENV{'PANDA_OPTIMIZE'}."-Win32"; -# &mymkdir($outputdir); -# now back to 1 build-type per tree -# -# my $genpyth_str; -# my $genargstr="-v -d"; -# -# if(($ENV{'PANDA_OPTIMIZE'} eq '1') || ($ENV{'PANDA_OPTIMIZE'} eq '2')) { -# $genpyth_str="python_d -v -OO "; -# $genargstr="-O ".$genargstr; -# } else { -# $genpyth_str="python -v -O "; -# $genargstr="-O ".$genargstr; -# } -# $genpyth_str.="generatePythonCode ".$genargstr." '".$outputdir."' -e '".$WINBLDROOT."\\direct\\src\\extensions' -i libdtoolconfig libpandaexpress libpanda libpandaphysics libdirect libtoontown"; -# &myexecstr($genpyth_str,"generate python code failed!!!","DO_LOG","NO_PANDA_ATTACH"); - - $genpy_args{'1'} = 'win-debug'; - $genpy_args{'2'} = 'win-debug'; - $genpy_args{'3'} = 'win-release'; - $genpy_args{'4'} = 'win-publish'; - - $genpy_arg1 = "-t ".$genpy_args{$ENV{'PANDA_OPTIMIZE'}}; - &myexecstr("genPyCode ".$genpy_arg1,"genPyCode failed","DO_LOG","NO_PANDA_ATTACH"); - - $ENV{'PATH'}=$origpath; - delete $ENV{'TCSH_NO_CHANGEPATH'}; - &mychdir($CYGBLDROOT); - &logmsg("*** GenPythonCode Finished for ".$inst_dirnames[$treenum]." at ".&gettimestr()." ***"); -} - -my $newdayarchivedirname; - -sub archivetree() { - $treenum=shift; - - if(!(-e $inst_dirs[$treenum])) { - return; - } - - if($newdayarchivename eq "") { - - ($devicenum,$inodenum,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) - = stat($inst_dirs[$treenum]."\\dtool\\Sources.pp"); - ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) - = localtime($mtime); - $mon++; - - $newdayarchivedirname=$inst_dirs[$ARCHIVENUM]."\\".($mon<10 ? "0":"").$mon."-".($mday<10 ? "0":"").$mday; - &mymkdir($newdayarchivedirname); - } - - &logmsg("*** Archiving ".$inst_dirnames[$treenum]." build on install server at ".&gettimestr()." ***"); - - my $archdirname=$newdayarchivedirname."\\".$inst_dirnames[$treenum]; - - &myrename($inst_dirs[$treenum],$archdirname); - - foreach my $dir1 (@dirstodolist) { - # copy DLL .pdb/.map up to lib dir so we can blow away metalibs subdir - # could do this is the makefiles instead - &myexecstr("( for /R ".$archdirname."\\".$dir1."\\metalibs %i in (lib*.pdb lib*.map) do copy %i ".$archdirname."\\".$dir1."\\lib )","nomsg","DO_LOG","NT cmd"); - - if($dir1 eq "panda") { - # dll/exe not under metalibs - &myexecstr("( for /R ".$archdirname."\\".$dir1."\\src\\audiotraits %i in (lib*.pdb lib*.map) do copy %i ".$archdirname."\\".$dir1."\\lib )","nomsg","DO_LOG","NT cmd"); - &myexecstr("( for /R ".$archdirname."\\".$dir1."\\src\\shader %i in (lib*.pdb lib*.map) do copy %i ".$archdirname."\\".$dir1."\\lib )","nomsg","DO_LOG","NT cmd"); - &myexecstr("( for /R ".$archdirname."\\".$dir1."\\src\\testbed %i in (*.pdb *.map) do copy %i ".$archdirname."\\".$dir1."\\bin )","nomsg","DO_LOG","NT cmd"); - } - - # NT cmd 'for' always returns 144 for some reason, impossible to detect error cond, so just don't check retval - # delete old objs/pdbs/etc out of archived trees (just blow away the Opt[Win32] dir) - # &myexecstr("( for /D /R ".$archdirname."\\".$dir1."\\src %i in (Opt*Win32) do rd /s /q %i )","nomsg","DO_LOG","NT cmd"); - - # instead blow away src,CVS,include,metalibs dirs completely - # doing every rd twice since windows-samba-RAID link seems to screw up and cause some files to not be deleted the 1st time - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\src","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\CVS","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\include","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\metalibs","nomsg","DO_LOG","NT cmd"); - - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\src","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\CVS","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\include","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\".$dir1."\\metalibs","nomsg","DO_LOG","NT cmd"); - - # del xtra files at root of subdirs - &myexecstr("del /Q /F ".$archdirname."\\".$dir1."\\*","nomsg","DO_LOG","NT cmd"); - } - - # delete old browse files - &myexecstr("del /q ".$archdirname."\\*.bsc","nomsg","DO_LOG","NT cmd"); - - # delete wintools, right now its too big to archive - &myexecstr("rd /s /q ".$archdirname."\\wintools","nomsg","DO_LOG","NT cmd"); - &myexecstr("rd /s /q ".$archdirname."\\wintools","nomsg","DO_LOG","NT cmd"); - - # could also move .pdb from metalibs to lib, then del metalibs, include, src dirs -} - -sub checkoutfiles { - my $existing_module_str=""; - my $nonexisting_module_str=""; - - &mychdir($CYGBLDROOT); - - foreach my $dir1 (@dirstodolist) { - if(-e $dir1) { - $existing_module_str.=$dir1." "; - } else { - $nonexisting_module_str.=$dir1." "; - } - } - - if($existing_module_str ne "") { - # flaw: will bomb if any CVS subdirs are missing - - &myexecstr("( for /D /R . %i in (Opt*Win32) do rd /s /q %i )","nomsg","DO_LOG","NT cmd"); - - &logmsg("*** REMOVING ALL FILES IN OLD SRC TREES ***"); - # use cvs update to grab new copy - # note: instead of blowing these away, may want to rename and save them - # also, I could just blow everything away and check out again - # cant blow away if people are sitting in those dirs, so we do this instead - $rmcmd="find ".$existing_module_str." -path '*CVS*' -prune -or -not -name 'bldlog*' -and -not -type d -print | xargs --no-run-if-empty -n 40 rm"; - #&myexecstr($rmcmd,"Removal of old files failed!","DO_LOG","NO_CSHRC"); - &myexecstr($rmcmd,"Removal of old files failed!","DO_LOG","NO_PANDA_ATTACH"); - - &myexecstr("cvs update -d -R ".$existing_module_str." |& egrep -v 'Updating|^\\?'", - "cvs update failed!","DO_LOG","NO_PANDA_ATTACH"); - } - - if($nonexisting_module_str ne "") { - &myexecstr("cvs checkout -R ".$nonexisting_module_str." |& egrep -v 'Updating|^\\?'", - "cvs checkout failed!","DO_LOG","NO_PANDA_ATTACH"); - } -} - -sub buildall() { - $treenum=shift; - - # DTOOL ppremake may have already run by DTOOL 'initialize make' - - if($DO_ARCHIVE_AND_COPY_ONLY) { - goto 'ARCHIVE_AND_COPY'; - } - - &logmsg("*** Starting ".uc($inst_dirnames[$treenum])." Build (Opt=".$ENV{'PANDA_OPTIMIZE'}.") at ".&gettimestr()." ***"); - - &checkoutfiles(); - - # cant do attachment, since that often hangs on NT - # must use non-attachment build system (BUILD_TYPE 'gmsvc', not 'stopgap', in $PPREMAKE_CONFIG) - - # hacks to fix multiproc build issue (cp file to dir occurs before dir creation, need to adjust makefiles to fix this) - foreach my $dir1 (@dirstodolist) { - &mymkdir($CYGBLDROOT."/".$dir1."/etc"); - &mymkdir($CYGBLDROOT."/".$dir1."/bin"); - &mymkdir($CYGBLDROOT."/".$dir1."/lib"); - &mymkdir($CYGBLDROOT."/".$dir1."/include"); - } - &mymkdir($CYGBLDROOT."/dtool/include/parser-inc"); # hack to fix makefile multiproc issue - &mymkdir($CYGBLDROOT."/pandatool/shared"); # hack to fix makefile multiproc issue - - foreach my $dir1 (@dirstodolist) { - my $dir1_upcase = uc($dir1); - - &logmsg("*** PPREMAKE ".$dir1_upcase." (BUILDTYPE=".$ENV{'PANDA_BUILD_TYPE'}.") ***"); - &mychdir($CYGBLDROOT."/".$dir1); - &myexecstr("ppremake",$dir1_upcase." ppremake failed!","DO_LOG","NO_PANDA_ATTACH"); - } - - # debug stuff - # &mychdir($CYGBLDROOT); - # &myexecstr("dir dtool","dir failed","DO_LOG","NT cmd"); - - $makecmd="make"; - $shellarg="NO_PANDA_ATTACH"; - - if($ENV{'PANDA_BUILD_TYPE'} eq 'msvc') { - $makecmd="nmake"; - $shellarg="NT cmd"; - } - - foreach my $dir1 (@dirstodolist) { - my $dir1_upcase = uc($dir1); - &logmsg("*** BUILDING ".$dir1_upcase." at ".&gettimestr()." ***"); - &mychdir($CYGBLDROOT."/".$dir1); - &myexecstr($makecmd." install",$dir1_upcase." ".$makecmd." install failed!","DO_LOG",$shellarg); - } - - &mychdir($CYGBLDROOT); # get out of src dirs to allow them to be moved/renamed - unlink($CYGBLDROOT."/dtool/dtool_config.h"); # fix freakish NTFS bug, this file is regenerated by ppremake anyway - - if($#dirstodolist>1) { - &gen_python_code(); # must run AFTER toontown bld - } - - ARCHIVE_AND_COPY: - - &mychdir($CYGBLDROOT); # get out of src dirs to allow them to be moved/renamed - - # archive old current srvr build & copy build to server, if its accessible - if(!(-e $WIN_INSTALLDIR)) { - &logmsg("ERROR: Cant access install directory!! (Is Server down??) ".$WIN_INSTALLDIR); - &logmsg("Skipping archive and copy-build-to-server steps for ".$inst_dirnames[$treenum]." build"); - return; - } - - if($DONT_ARCHIVE_OLD_BUILDS) { - &myexecstr("rd /s /q ".$inst_dirs[$treenum],"DO_LOG","NT cmd"); # don't bother checking errors here, probably just some shell has the dir cd'd to - } else { - &archivetree($treenum); - } - - &logmsg("*** Copying ".$inst_dirnames[$treenum]." build to install server at ".&gettimestr()." ***"); - &mymkdir($inst_dirs[$treenum]); - - my $xcopy_opt_str="/E /K /C /R /Y /H /I "; - - if($DEBUG_TREECOPY) { - $xcopy_opt_str.="/T "; #debug only - } - - if($treenum == $DEBUGNUM) { - # get rid of .sbr files before copying - &myexecstr("echo .sbr > C:\\junk","echo .sbr failed!!", "DO_LOG","NT cmd"); - $xcopy_opt_str.=" /EXCLUDE:C:\\junk"; - } - - # hopefully there are no extra dirs underneath - - # add wintools to dir copy list - # don't want to add wintools to global dirstodo, treat it separately - unshift(dirstodolist,"wintools"); - - foreach my $dir1 (@dirstodolist) { - &mymkdir($inst_dirs[$treenum]."\\".$dir1); - &myexecstr("\\WINNT\\system32\\xcopy ".$xcopy_opt_str." ".$WINBLDROOT."\\".$dir1."\\* ".$inst_dirs[$treenum]."\\".$dir1, - "xcopy of ".$inst_dirnames[$treenum]." tree failed!!", "DO_LOG","NT cmd"); - } - shift(dirstodolist); -} - -# assumes environment already attached to TOOL/PANDA/DIRECT/TOONTOWN -# assumes cygwin env, BLDROOT must use fwd slashes -if($ENV{'BLDROOT'} eq "") { - $ENV{'BLDROOT'} = "/home/builder/player"; -} - -if($ENV{'CYGWIN_ROOT'} eq "") { - $ENV{'CYGWIN_ROOT'} = "C:\\Cygwin"; -} - -$CYGROOT= $ENV{'CYGWIN_ROOT'}; -$CYGROOT =~ s/(.*)\\$/$1/; # get rid of trailing '\' -#$CYGROOT =~ s/\\/\//g; # switch backslash to fwdslash (setting up for cygwin) - -$CYGBLDROOT = $ENV{'BLDROOT'}; -print "\$CYGBLDROOT='",$CYGBLDROOT,"'\n"; - -if(($CYGBLDROOT eq "")||(!(-e $CYGBLDROOT))) { - die "Bad \$CYGBLDROOT !!\n"; -} - -$WINBLDROOT=$CYGROOT.$CYGBLDROOT; -$WINBLDROOT =~ s/\//\\/g; # switch fwdslash to backslash -print "\$WINBLDROOT='",$WINBLDROOT,"'\n"; - -my ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); -$mon++; -$logfilenamebase="bldlog-".($mon<10 ? "0":"").$mon."-".($mday<10 ? "0":"").$mday.".txt"; -$fulllogfilename = $CYGBLDROOT."/".$logfilenamebase; -$fulllogfilename_win = $WINBLDROOT."\\".$logfilenamebase; - -# recreate the log to blow away any old one -open(LOGFILE,">".$fulllogfilename) || die "can't open log file '$fulllogfilename'\n"; -close(LOGFILE); - -&logmsg("*** Panda Build Log Started at ".&gettimestr()." ***"); - -my @do_install_dir; -my @dir_build_type; - -for($ii=0;$ii<=$#PUBLISHNUM;$ii++) { - if($#ARGV<0) { - $do_install_dir=1; - } else { - $do_install_dir=0; - } - $dir_build_type=0; -} - -my $g_last_dirnum=0; - -for($ii=0;$ii<=$#ARGV;$ii++) { - if(uc($ARGV[$ii]) eq uc($inst_dirnames[$INSTALLNUM])) { - $g_last_dirnum=$INSTALLNUM; - } elsif(uc($ARGV[$ii]) eq uc($inst_dirnames[$DEBUGNUM])) { - $g_last_dirnum=$DEBUGNUM; - } elsif(uc($ARGV[$ii]) eq uc($inst_dirnames[$RELEASENUM])) { - $g_last_dirnum=$RELEASENUM; - } elsif(uc($ARGV[$ii]) eq uc($inst_dirnames[$PUBLISHNUM])) { - $g_last_dirnum=$PUBLISHNUM; - } elsif(uc($ARGV[$ii]) eq "NMAKE") { - $dir_build_type[$g_last_dirnum]=1; - next; - } else { - &logmsg("invalid argument '".$ARGV[0]."' to builder.pl. arg must be 'install','debug', or 'release', or 'publish'\n"); - exit(1); - } - $do_install_dir[$g_last_dirnum]=1; -} - -if(!(-e $WIN_INSTALLDIR)) { - &logmsg("ERROR: Cant access install directory!! ".$WIN_INSTALLDIR); - exit(1); -} - -&mychdir($CYGBLDROOT); - -if($BLD_DTOOL_ONLY) { - @dirstodolist=("dtool"); -} else { - @dirstodolist=("dtool","panda","pandatool","direct","toontown"); -} -$dirstodostr=""; -foreach my $dir1 (@dirstodolist) { - $dirstodostr.=$dir1." "; -} - -# makes ppremake build headers, libs in module dirs (panda/lib,dtool/bin,etc), not /usr/local/panda/inc... -foreach my $dir1 (@dirstodolist) { - my $dir1_upcase = uc($dir1); - $ENV{$dir1_upcase}=$CYGBLDROOT."/".$dir1; - - # need this since we are building in src dirs, not install dir - # so 'interrogate' needs to find its dlls when building panda, etc - &appendpath("/".$dir1."/bin","/".$dir1."/lib"); -} - -# pick up cygwin utils -$ENV{'PATH'}=$ENV{'WINTOOLS'}."/bin".$DIRPATH_SEPARATOR.$ENV{'WINTOOLS'}."/lib".$DIRPATH_SEPARATOR."/bin".$DIRPATH_SEPARATOR.$ENV{'PATH'}."/c/WINNT/system32".$DIRPATH_SEPARATOR."/c/WINNT"; - -# want build to pick up python dll's from /usr/lib before /c/python16 -# $ENV{'PATH'}="/usr/lib".$DIRPATH_SEPARATOR.$ENV{'PATH'}; not needed - -if($DEBUG_MAKEBSC_ONLY) { - &make_bsc_file(); - exit(0); -} - -if(! $DEBUG_GENERATE_PYTHON_CODE_ONLY) { - # update wintools - unlink("wintools\\bin\\dos2unix.exe"); # rm a file so egrep doesnt find 0 non-Updating/?? lines and return failure - &myexecstr("cvs update -d -R wintools |& egrep -v 'Updating|^\\?'", "cvs update failed!","DO_LOG","NO_PANDA_ATTACH"); -} - -if($DEBUG_TREECOPY) { - goto 'DBGTREECOPY'; -} - -# goto 'SKIP_REMOVE'; - -SKIP_REMOVE: - -# this doesnt work unless you can completely remove the dirs, since cvs checkout -# bombs if dirs exist but CVS dirs do not. - -if($do_install_dir[$INSTALLNUM]) { - if($dir_build_type[$INSTALLNUM]) { - $ENV{'PANDA_BUILD_TYPE'} = 'msvc'; - } else { - $ENV{'PANDA_BUILD_TYPE'} = 'gmsvc'; - } - - $ENV{'PANDA_OPTIMIZE'}='2'; - - if($DEBUG_GENERATE_PYTHON_CODE_ONLY) { - &gen_python_code(); - exit(0); - } - - &buildall($INSTALLNUM); -} - -if($do_install_dir[$RELEASENUM]) { - if($dir_build_type[$RELEASENUM]) { - $ENV{'PANDA_BUILD_TYPE'} = 'msvc'; - } else { - $ENV{'PANDA_BUILD_TYPE'} = 'gmsvc'; - } - $ENV{'PANDA_OPTIMIZE'}='3'; - - if($DEBUG_GENERATE_PYTHON_CODE_ONLY) { - &gen_python_code(); - exit(0); - } - - &buildall($RELEASENUM); -} - -BEFORE_DBGBUILD: - -if($do_install_dir[$DEBUGNUM]) { - if($dir_build_type[$DEBUGNUM]) { - $ENV{'PANDA_BUILD_TYPE'} = 'msvc'; - } else { - $ENV{'PANDA_BUILD_TYPE'} = 'gmsvc'; - } - $ENV{'USE_BROWSEINFO'}='1'; # make .sbr files - if(! $DEBUG_GENERATE_PYTHON_CODE_ONLY) { - $ENV{'PANDA_OPTIMIZE'}='1'; - } - - if($DEBUG_GENERATE_PYTHON_CODE_ONLY) { - &gen_python_code(); - exit(0); - } - - &buildall($DEBUGNUM); - &make_bsc_file(); - delete $ENV{'USE_BROWSEINFO'}; - - &myexecstr("del /s *.sbr","nomsg","DO_LOG","NT cmd"); -} - -AFTER_DBGBUILD: - -if($do_install_dir[$PUBLISHNUM]) { - if($dir_build_type[$PUBLISHNUM]) { - $ENV{'PANDA_BUILD_TYPE'} = 'msvc'; - } else { - $ENV{'PANDA_BUILD_TYPE'} = 'gmsvc'; - } - $ENV{'PANDA_OPTIMIZE'}='4'; - &buildall($PUBLISHNUM); -} - - -&logmsg("*** Panda Build Log Finished at ".&gettimestr()." ***"); - -# store log in 'debug' dir -&myexecstr("copy ".$fulllogfilename_win." ".$inst_dirs[$g_last_dirnum], "copy of ".$fulllogfilename_win." failed!!", "","NT cmd"); - -exit(0); - -# TODO: -# compress old archived blds? -# build DLLs with version stamp set by this script -# implement build-specific opttype mode - diff --git a/pandatool/src/scripts/cvlog.pl b/pandatool/src/scripts/cvlog.pl deleted file mode 100755 index 72f3315a19..0000000000 --- a/pandatool/src/scripts/cvlog.pl +++ /dev/null @@ -1,1849 +0,0 @@ -#!/bin/sh -exec perl -w -x $0 ${1+"$@"} # -*- mode: perl; perl-indent-level: 2; -*- -#!perl -w - -############################################################## -### ### -### cvs2cl.pl: produce ChangeLog(s) from `cvs log` output. ### -### ### -############################################################## - -## $Revision$ -## $Date$ -## $Author$ -## -## (C) 1999 Karl Fogel , under the GNU GPL. -## -## (Extensively hacked on by Melissa O'Neill .) -## -## cvs2cl.pl is free software; you can redistribute it and/or modify -## it under the terms of the GNU General Public License as published by -## the Free Software Foundation; either version 2, or (at your option) -## any later version. -## -## cvs2cl.pl 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 may have received a copy of the GNU General Public License -## along with cvs2cl.pl; see the file COPYING. If not, write to the -## Free Software Foundation, Inc., 59 Temple Place - Suite 330, -## Boston, MA 02111-1307, USA. - - - -use strict; -use Text::Wrap; -use Time::Local; -use File::Basename; - - -# The Plan: -# -# Read in the logs for multiple files, spit out a nice ChangeLog that -# mirrors the information entered during `cvs commit'. -# -# The problem presents some challenges. In an ideal world, we could -# detect files with the same author, log message, and checkin time -- -# each would be a changelog entry. -# We'd sort them; and spit them out. Unfortunately, CVS is *not atomic* -# so checkins can span a range of times. Also, the directory structure -# could be hierarchical. -# -# Another question is whether we really want to have the ChangeLog -# exactly reflect commits. An author could issue two related commits, -# with different log entries, reflecting a single logical change to the -# source. GNU style ChangeLogs group these under a single author/date. -# We try to do the same. -# -# So, we parse the output of `cvs log', storing log messages in a -# multilevel hash that stores the mapping: -# directory => author => time => message => filelist -# As we go, we notice "nearby" commit times and store them together -# (i.e., under the same timestamp), so they appear in the same log -# entry. -# -# When we've read all the logs, we twist this mapping into -# a time => author => message => filelist mapping for each directory. -# -# If we're not using the `--distributed' flag, the directory is always -# considered to be `./', even as descend into subdirectories. - - -############### Globals ################ - - -# What we run to generate it: -my $Log_Source_Command = "cvs log"; - -# In case we have to print it out: -my $VERSION = '$Revision$'; -$VERSION =~ s/\S+\s+(\S+)\s+\S+/$1/; - -## Vars set by options: - -# Print debugging messages? -my $Debug = 0; - -# Just show version and exit? -my $Print_Version = 0; - -# Just print usage message and exit? -my $Print_Usage = 0; - -# Single top-level ChangeLog, or one per subdirectory? -my $Distributed = 0; - -# What file should we generate (defaults to "ChangeLog")? -my $Log_File_Name = "ChangeLog"; - -# Expand usernames to email addresses based on a map file? -my $User_Map_File = ""; - -# Only list this many file changes per dir -my $Max_Fileline_Count = 15; - -# Only list changes with the last $Prev_Day_Count days -my $Prev_Day_Count = 30; - -# Output to a file or to stdout? -my $Output_To_Stdout = 1; - -# Eliminate empty log messages? -my $Prune_Empty_Msgs = 0; - -# Don't call Text::Wrap on the body of the message -my $No_Wrap = 1; - -# Separates header from log message. Code assumes it is either " " or -# "\n\n", so if there's ever an option to set it to something else, -# make sure to go through all conditionals that use this var. -my $After_Header = " "; - -# Format more for programs than for humans. -my $XML_Output = 0; - -# Do some special tweaks for log data that was written in FSF -# ChangeLog style. -my $FSF_Style = 0; - -# Show times in UTC instead of local time -my $UTC_Times = 0; - -# Show day of week in output? -my $Show_Day_Of_Week = 1; - -# Show revision numbers in output? -my $Show_Revisions = 1; - -# Show tags (symbolic names) in output? -my $Show_Tags = 0; - -# Show branches by symbolic name in output? -my $Show_Branches = 0; - -# Show only revisions on these branches or their ancestors. -my @Follow_Branches; - -# Don't bother with files matching this regexp. -my @Ignore_Files; - -# How exactly we match entries. We definitely want "o", -# and user might add "i" by using --case-insensitive option. -my $Case_Insensitive = 0; - -# Maybe only show log messages matching a certain regular expression. -my $Regexp_Gate = ""; - -# Pass this global option string along to cvs, to the left of `log': -my $Global_Opts = ""; - -# Pass this option string along to the cvs log subcommand: -my $Command_Opts = ""; - -# Read log output from stdin instead of invoking cvs log? -my $Input_From_Stdin = 0; - -# Don't show filenames in output. -my $Hide_Filenames = 0; - -# Max checkin duration. CVS checkin is not atomic, so we may have checkin -# times that span a range of time. We assume that checkins will last no -# longer than $Max_Checkin_Duration seconds, and that similarly, no -# checkins will happen from the same users with the same message less -# than $Max_Checkin_Duration seconds apart. -my $Max_Checkin_Duration = 300; - -# What to put at the front of [each] ChangeLog. -my $ChangeLog_Header = ""; - -## end vars set by options. - -# In 'cvs log' output, one long unbroken line of equal signs separates -# files: -my $file_separator = "=======================================" - . "======================================"; - -# In 'cvs log' output, a shorter line of dashes separates log messages -# within a file: -my $logmsg_separator = "----------------------------"; - -my @monthlengtharr=(31,28,31,30,31,30,31,31,30,31,30,31); - -############### End globals ############ - - -&parse_options (); -&derive_change_log (); - - -### Everything below is subroutine definitions. ### - -# Fills up a ChangeLog structure in the current directory. -sub derive_change_log () -{ - # See "The Plan" above for a full explanation. - - my %grand_poobah; - - my $file_full_path; - my $time; - my $revision; - my $author; - my $msg_txt; - my $detected_file_separator; - - # We might be expanding usernames - my %usermap; - - # In general, it's probably not very maintainable to use state - # variables like this to tell the loop what it's doing at any given - # moment, but this is only the first one, and if we never have more - # than a few of these, it's okay. - my $collecting_symbolic_names = 0; - my %symbolic_names; # Where tag names get stored. - my %branch_names; # We'll grab branch names while we're at it. - my %branch_numbers; # Save some revisions for @Follow_Branches - my @branch_roots; # For showing which files are branch ancestors. - - # Bleargh. Compensate for a deficiency of custom wrapping. - if (($After_Header ne " ") and $FSF_Style) - { - $After_Header .= "\t"; - } - - my ($ign1,$ign2,$ign3,$dayofmonth,$month,$year_,$ign4) = $UTC_Times ? gmtime(time()) : localtime(time()); - - my $logdayofmonth; - my $logmonth; - my $logyear; - - my $datestr= &FindPrevDayStr($Prev_Day_Count,$dayofmonth,$month,$year_); - $Log_Source_Command =~ s/(cvs log)/cvs log -d \">$datestr\"/; - - if (! $Input_From_Stdin) { - open (LOG_SOURCE, "$Log_Source_Command |") - or die "unable to run \"${Log_Source_Command}\""; - } - else { - open (LOG_SOURCE, "-") or die "unable to open stdin for reading"; - } - - %usermap = &maybe_read_user_map_file (); - - while () - { - # If on a new file and don't see filename, skip until we find it, and - # when we find it, grab it. - if ((! (defined $file_full_path)) and /^Working file: (.*)/) - { - $file_full_path = $1; - if (@Ignore_Files) - { - my $base; - ($base, undef, undef) = fileparse ($file_full_path); - # Ouch, I wish trailing operators in regexps could be - # evaluated on the fly! - if ($Case_Insensitive) { - if (grep ($file_full_path =~ m|$_|i, @Ignore_Files)) { - undef $file_full_path; - } - } - elsif (grep ($file_full_path =~ m|$_|, @Ignore_Files)) { - undef $file_full_path; - } - } - next; - } - - # Just spin wheels if no file defined yet. - next if (! $file_full_path); - - # Collect tag names in case we're asked to print them in the output. - if (/^symbolic names:$/) { - $collecting_symbolic_names = 1; - next; # There's no more info on this line, so skip to next - } - if ($collecting_symbolic_names) - { - # All tag names are listed with whitespace in front in cvs log - # output; so if see non-whitespace, then we're done collecting. - if (/^\S/) { - $collecting_symbolic_names = 0; - } - else # we're looking at a tag name, so parse & store it - { - # According to the Cederqvist manual, in node "Tags", tag - # names must start with an uppercase or lowercase letter and - # can contain uppercase and lowercase letters, digits, `-', - # and `_'. However, it's not our place to enforce that, so - # we'll allow anything CVS hands us to be a tag: - /^\s+([^:]+): ([\d.]+)$/; - my $tag_name = $1; - my $tag_rev = $2; - - # A branch number either has an odd number of digit sections - # (and hence an even number of dots), or has ".0." as the - # second-to-last digit section. Test for these conditions. - my $real_branch_rev = ""; - if (($tag_rev =~ /^(\d+\.\d+\.)+\d+$/) # Even number of dots... - and (! ($tag_rev =~ /^(1\.)+1$/))) # ...but not "1.[1.]1" - { - $real_branch_rev = $tag_rev; - } - elsif ($tag_rev =~ /(\d+\.(\d+\.)+)0.(\d+)/) # Has ".0." - { - $real_branch_rev = $1 . $3; - } - # If we got a branch, record its number. - if ($real_branch_rev) - { - $branch_names{$real_branch_rev} = $tag_name; - if (@Follow_Branches) { - if (grep ($_ eq $tag_name, @Follow_Branches)) { - $branch_numbers{$tag_name} = $real_branch_rev; - } - } - } - else { - # Else it's just a regular (non-branch) tag. - push (@{$symbolic_names{$tag_rev}}, $tag_name); - } - } - } - # End of code for collecting tag names. - - # If have file name, but not revision, and see revision, then grab - # it. (We collect unconditionally, even though we may or may not - # ever use it.) - if ((! (defined $revision)) and (/^revision (\d+\.[\d.]+)/)) - { - $revision = $1; - - if (@Follow_Branches) - { - foreach my $branch (@Follow_Branches) - { - # Special case for following trunk revisions - if (($branch =~ /^trunk$/i) and ($revision =~ /^[0-9]+\.[0-9]+$/)) - { - goto dengo; - } - - my $branch_number = $branch_numbers{$branch}; - if ($branch_number) - { - # Are we on one of the follow branches or an ancestor of - # same? - # - # If this revision is a prefix of the branch number, or - # possibly is less in the minormost number, OR if this - # branch number is a prefix of the revision, then yes. - # Otherwise, no. - # - # So below, we determine if any of those conditions are - # met. - - # Trivial case: is this revision on the branch? - # (Compare this way to avoid regexps that screw up Emacs - # indentation, argh.) - if ((substr ($revision, 0, ((length ($branch_number)) + 1))) - eq ($branch_number . ".")) - { - goto dengo; - } - # Non-trivial case: check if rev is ancestral to branch - elsif ((length ($branch_number)) > (length ($revision))) - { - $revision =~ /^((?:\d+\.)+)(\d+)$/; - my $r_left = $1; # still has the trailing "." - my $r_end = $2; - - $branch_number =~ /^((?:\d+\.)+)(\d+)\.\d+$/; - my $b_left = $1; # still has trailing "." - my $b_mid = $2; # has no trailing "." - - if (($r_left eq $b_left) - && ($r_end <= $b_mid)) - { - goto dengo; - } - } - } - } - } - else # (! @Follow_Branches) - { - next; - } - - # Else we are following branches, but this revision isn't on the - # path. So skip it. - undef $revision; - dengo: - next; - } - - # If we don't have a revision right now, we couldn't possibly - # be looking at anything useful. - if (! (defined ($revision))) { - $detected_file_separator = /^$file_separator$/o; - if ($detected_file_separator) { - # No revisions for this file; can happen, e.g. "cvs log -d DATE" - goto CLEAR; - } - else { - next; - } - } - - # If have file name but not date and author, and see date or - # author, then grab them: - unless (defined $time) - { - if (/^date: .*/) - { - ($time, $author) = &parse_date_and_author ($_); - if (defined ($usermap{$author}) and $usermap{$author}) { - $author = $usermap{$author}; - } - } - else { - $detected_file_separator = /^$file_separator$/o; - if ($detected_file_separator) { - # No revisions for this file; can happen, e.g. "cvs log -d DATE" - goto CLEAR; - } - } - # If the date/time/author hasn't been found yet, we couldn't - # possibly care about anything we see. So skip: - next; - } - - # A "branches: ..." line here indicates that one or more branches - # are rooted at this revision. If we're showing branches, then we - # want to show that fact as well, so we collect all the branches - # that this is the latest ancestor of and store them in - # @branch_roots. Just for reference, the format of the line we're - # seeing at this point is: - # - # branches: 1.5.2; 1.5.4; ...; - # - # Okay, here goes: - - if (/^branches:\s+(.*);$/) - { - if ($Show_Branches) - { - my $lst = $1; - $lst =~ s/(1\.)+1;|(1\.)+1$//; # ignore the trivial branch 1.1.1 - if ($lst) { - @branch_roots = split (/;\s+/, $lst); - } - else { - undef @branch_roots; - } - next; - } - else - { - # Ugh. This really bothers me. Suppose we see a log entry - # like this: - # - # ---------------------------- - # revision 1.1 - # date: 1999/10/17 03:07:38; author: jrandom; state: Exp; - # branches: 1.1.2; - # Intended first line of log message begins here. - # ---------------------------- - # - # The question is, how we can tell the difference between that - # log message and a *two*-line log message whose first line is - # - # "branches: 1.1.2;" - # - # See the problem? The output of "cvs log" is inherently - # ambiguous. - # - # For now, we punt: we liberally assume that people don't - # write log messages like that, and just toss a "branches:" - # line if we see it but are not showing branches. I hope no - # one ever loses real log data because of this. - next; - } - } - - # If have file name, time, and author, then we're just grabbing - # log message texts: - $detected_file_separator = /^$file_separator$/o; - if ($detected_file_separator && ! (defined $revision)) { - # No revisions for this file; can happen, e.g. "cvs log -d DATE" - goto CLEAR; - } - unless ($detected_file_separator || /^$logmsg_separator$/o) - { - $msg_txt .= $_; # Normally, just accumulate the message... - next; - } - # ... until a msg separator is encountered: - # Ensure the message contains something: - if ((! $msg_txt) - || ($msg_txt =~ /^\s*\.\s*$|^\s*$/) - || ($msg_txt =~ /\*\*\* empty log message \*\*\*/)) - { - if ($Prune_Empty_Msgs) { - goto CLEAR; - } - # else - $msg_txt = "[no log message]\n"; - } - - ### Store it all in the Grand Poobah: - { - my $dir_key; # key into %grand_poobah - my %qunk; # complicated little jobbie, see below - - # Each revision of a file has a little data structure (a `qunk') - # associated with it. That data structure holds not only the - # file's name, but any additional information about the file - # that might be needed in the output, such as the revision - # number, tags, branches, etc. The reason to have these things - # arranged in a data structure, instead of just appending them - # textually to the file's name, is that we may want to do a - # little rearranging later as we write the output. For example, - # all the files on a given tag/branch will go together, followed - # by the tag in parentheses (so trunk or otherwise non-tagged - # files would go at the end of the file list for a given log - # message). This rearrangement is a lot easier to do if we - # don't have to reparse the text. - # - # A qunk looks like this: - # - # { - # filename => "hello.c", - # revision => "1.4.3.2", - # time => a timegm() return value (moment of commit) - # tags => [ "tag1", "tag2", ... ], - # branch => "branchname" # There should be only one, right? - # branchroots => [ "branchtag1", "branchtag2", ... ] - # } - - if ($Distributed) { - # Just the basename, don't include the path. - ($qunk{'filename'}, $dir_key, undef) = fileparse ($file_full_path); - } - else { - $dir_key = "./"; - $qunk{'filename'} = $file_full_path; - } - - # This may someday be used in a more sophisticated calculation - # of what other files are involved in this commit. For now, we - # don't use it, because the common-commit-detection algorithm is - # hypothesized to be "good enough" as it stands. - $qunk{'time'} = $time; - - # We might be including revision numbers and/or tags and/or - # branch names in the output. Most of the code from here to - # loop-end deals with organizing these in qunk. - - $qunk{'revision'} = $revision; - - # Grab the branch, even though we may or may not need it: - $qunk{'revision'} =~ /((?:\d+\.)+)\d+/; - my $branch_prefix = $1; - $branch_prefix =~ s/\.$//; # strip off final dot - if ($branch_names{$branch_prefix}) { - $qunk{'branch'} = $branch_names{$branch_prefix}; - } - - # If there's anything in the @branch_roots array, then this - # revision is the root of at least one branch. We'll display - # them as branch names instead of revision numbers, the - # substitution for which is done directly in the array: - if (@branch_roots) { - my @roots = map { $branch_names{$_} } @branch_roots; - $qunk{'branchroots'} = \@roots; - } - - # Save tags too. - if (defined ($symbolic_names{$revision})) { - $qunk{'tags'} = $symbolic_names{$revision}; - delete $symbolic_names{$revision}; - } - - # Add this file to the list - # (We use many spoonfuls of autovivication magic. Hashes and arrays - # will spring into existence if they aren't there already.) - - &debug ("(pushing log msg for ${dir_key}$qunk{'filename'})\n"); - - # Store with the files in this commit. Later we'll loop through - # again, making sure that revisions with the same log message - # and nearby commit times are grouped together as one commit. - push (@{$grand_poobah{$dir_key}{$author}{$time}{$msg_txt}}, \%qunk); - } - - CLEAR: - # Make way for the next message - undef $msg_txt; - undef $time; - undef $revision; - undef $author; - undef @branch_roots; - - # Maybe even make way for the next file: - if ($detected_file_separator) { - undef $file_full_path; - undef %branch_names; - undef %branch_numbers; - } - } - - close (LOG_SOURCE); - - ### Process each ChangeLog - - while (my ($dir,$authorhash) = each %grand_poobah) - { - &debug ("DOING DIR: $dir\n"); - - # Here we twist our hash around, from being - # author => time => message => filelist - # in %$authorhash to - # time => author => message => filelist - # in %changelog. - # - # This is also where we merge entries. The algorithm proceeds - # through the timeline of the changelog with a sliding window of - # $Max_Checkin_Duration seconds; within that window, entries that - # have the same log message are merged. - # - # (To save space, we zap %$authorhash after we've copied - # everything out of it.) - - my %changelog; - while (my ($author,$timehash) = each %$authorhash) - { - my $lasttime; - my %stamptime; - foreach my $time (sort {$main::a <=> $main::b} (keys %$timehash)) - { - my $msghash = $timehash->{$time}; - while (my ($msg,$qunklist) = each %$msghash) - { - my $stamptime = $stamptime{$msg}; - if ((defined $stamptime) - and (($time - $stamptime) < $Max_Checkin_Duration) - and (defined $changelog{$stamptime}{$author}{$msg})) - { - push(@{$changelog{$stamptime}{$author}{$msg}}, @$qunklist); - } - else { - $changelog{$time}{$author}{$msg} = $qunklist; - $stamptime{$msg} = $time; - } - } - } - } - undef (%$authorhash); - - ### Now we can write out the ChangeLog! - - my ($logfile_here, $logfile_bak, $tmpfile); - - if (! $Output_To_Stdout) { - $logfile_here = $dir . $Log_File_Name; - $logfile_here =~ s/^\.\/\//\//; # fix any leading ".//" problem - $tmpfile = "${logfile_here}.cvs2cl$$.tmp"; - $logfile_bak = "${logfile_here}.bak"; - - open (LOG_OUT, ">$tmpfile") or die "Unable to open \"$tmpfile\""; - } - else { - open (LOG_OUT, ">-") or die "Unable to open stdout for writing"; - } - - print LOG_OUT $ChangeLog_Header; - - if ($XML_Output) { - print LOG_OUT "\n\n" - . "\n\n"; - } - - -# my $printed_fileline_count_left = 4; -# my $breakoutofloop = 0; - - foreach my $time (sort {$main::b <=> $main::a} (keys %changelog)) - { - my $printed_fileline_count_left = $Max_Fileline_Count; -# if($breakoutofloop) { -# last; -# } - my $authorhash = $changelog{$time}; - while (my ($author,$mesghash) = each %$authorhash) - { - # If XML, escape in outer loop to avoid compound quoting: - if ($XML_Output) { - $author = &xml_escape ($author); - } - - while (my ($msg,$qunklist) = each %$mesghash) - { - my $files = &pretty_file_list ($qunklist); - my $header_line; # date and author - my $body; # see below - my $wholething; # $header_line + $body - - # Set up the date/author line. - # kff todo: do some more XML munging here, on the header - # part of the entry: - my ($ignore,$min,$hour,$mday,$mon,$year,$wday) - = $UTC_Times ? gmtime($time) : localtime($time); - - # XML output includes everything else, we might as well make - # it always include Day Of Week too, for consistency. - if ($Show_Day_Of_Week or $XML_Output) { - $wday = ("Sunday", "Monday", "Tuesday", "Wednesday", - "Thursday", "Friday", "Saturday")[$wday]; - $wday = ($XML_Output) ? "${wday}\n" : " $wday"; - } - else { - $wday = ""; - } - - if ($XML_Output) { - $header_line = - sprintf ("%4u-%02u-%02u\n" - . "${wday}" - . "\n" - . "%s\n", - $year+1900, $mon+1, $mday, $hour, $min, $author); - } - else { - $header_line = - sprintf ("%4u-%02u-%02u${wday} %02u:%02u %s\n", - $year+1900, $mon+1, $mday, $hour, $min, $author); - } - - # Reshape the body according to user preferences. - if ($XML_Output) - { - $msg = &preprocess_msg_text ($msg); - $body = $files . $msg; - } - elsif ($No_Wrap) - { - $msg = &preprocess_msg_text ($msg); -### $files = wrap ("\t", " ", "$files"); - - my $dirprepended = ($files =~ /:,/); - - if($dirprepended) { - $printed_fileline_count_left++; - } - # truncate to max fileline count - my @filearr = split(", ",$files,$printed_fileline_count_left+1); - $printed_fileline_count_left -= ($#filearr+1); - - if($printed_fileline_count_left<0) { - $filearr[$#filearr] = ""; - } - -# $breakoutofloop = ($printed_fileline_count_left<=0); - - $files = join(", ",@filearr); - - if($dirprepended) { - $files =~ s/, /,\n\t /g; - $files =~ s/:,/:/; - } else { - $files =~ s/, /,\n\t /g; - } - $files = "\t".$files; # I like this better (Georges) - $msg =~ s/\n(.*)/\n\t$1/g; - unless ($After_Header eq " ") { - $msg =~ s/^(.*)/\t$1/g; - } - $body = $files . $After_Header . $msg; - } - else # do wrapping, either FSF-style or regular - { - if ($FSF_Style) - { - $files = wrap ("\t", " ", "$files"); - - my $files_last_line_len = 0; - if ($After_Header eq " ") - { - $files_last_line_len = &last_line_len ($files); - $files_last_line_len += 1; # for $After_Header - } - - $msg = &wrap_log_entry - ($msg, "\t", 69 - $files_last_line_len, 69); - $body = $files . $After_Header . $msg; - } - else # not FSF-style - { - $msg = &preprocess_msg_text ($msg); - $body = $files . $After_Header . $msg; - $body = wrap ("\t", " ", "$body"); - } - } - - $wholething = $header_line . $body; - - if ($XML_Output) { - $wholething = "\n${wholething}\n"; - } - - # One last check: make sure it passes the regexp test, if the - # user asked for that. We have to do it here, so that the - # test can match against information in the header as well - # as in the text of the log message. - - # How annoying to duplicate so much code just because I - # can't figure out a way to evaluate scalars on the trailing - # operator portion of a regular expression. Grrr. - if ($Case_Insensitive) { - unless ($Regexp_Gate && ($wholething !~ /$Regexp_Gate/oi)) { - print LOG_OUT "${wholething}\n"; - } - } - else { - unless ($Regexp_Gate && ($wholething !~ /$Regexp_Gate/o)) { - print LOG_OUT "${wholething}\n"; - } - } - } - } - } - - if ($XML_Output) { - print LOG_OUT "\n"; - } - - close (LOG_OUT); - - if (! $Output_To_Stdout) - { - if (-f $logfile_here) { - rename ($logfile_here, $logfile_bak); - } - rename ($tmpfile, $logfile_here); - } - } -} - - -sub parse_date_and_author () -{ - # Parses the date/time and author out of a line like: - # - # date: 1999/02/19 23:29:05; author: apharris; state: Exp; - - my $line = shift; - - my ($year, $mon, $mday, $hours, $min, $secs, $author) = $line =~ - m#(\d+)/(\d+)/(\d+)\s+(\d+):(\d+):(\d+);\s+author:\s+([^;]+);# - or die "Couldn't parse date ``$line''"; - die "Bad date or Y2K issues" unless ($year > 1969 and $year < 2258); - # Kinda arbitrary, but useful as a sanity check - my $time = timegm($secs,$min,$hours,$mday,$mon-1,$year-1900); - - return ($time, $author); -} - - -# Here we take a bunch of qunks and convert them into printed -# summary that will include all the information the user asked for. -sub pretty_file_list () -{ - if ($Hide_Filenames and (! $XML_Output)) { - return ""; - } - - my $qunksref = shift; - my @qunkrefs = @$qunksref; - my @filenames; - my $beauty = ""; # The accumulating header string for this entry. - my %non_unanimous_tags; # Tags found in a proper subset of qunks - my %unanimous_tags; # Tags found in all qunks - my %all_branches; # Branches found in any qunk - my $common_dir = undef; # Dir prefix common to all files ("" if none) - my $fbegun = 0; # Did we begin printing filenames yet? - - # First, loop over the qunks gathering all the tag/branch names. - # We'll put them all in non_unanimous_tags, and take out the - # unanimous ones later. - foreach my $qunkref (@qunkrefs) - { - # Keep track of whether all the files in this commit were in the - # same directory, and memorize it if so. We can make the output a - # little more compact by mentioning the directory only once. - if ((scalar (@qunkrefs)) > 1) - { - if (! (defined ($common_dir))) - { - my ($base, $dir); - ($base, $dir, undef) = fileparse ($$qunkref{'filename'}); - - if ((! (defined ($dir))) # this first case is sheer paranoia - or ($dir eq "") - or ($dir eq "./") - or ($dir eq ".\\")) - { - $common_dir = ""; - } - else - { - $common_dir = $dir; - } - } - elsif ($common_dir ne "") - { - # Already have a common dir prefix, so how much of it can we preserve? - $common_dir = &common_path_prefix ($$qunkref{'filename'}, $common_dir); - } - } - else # only one file in this entry anyway, so common dir not an issue - { - $common_dir = ""; - } - - if (defined ($$qunkref{'branch'})) { - $all_branches{$$qunkref{'branch'}} = 1; - } - if (defined ($$qunkref{'tags'})) { - foreach my $tag (@{$$qunkref{'tags'}}) { - $non_unanimous_tags{$tag} = 1; - } - } - } - - # Any tag held by all qunks will be printed specially... but only if - # there are multiple qunks in the first place! - if ((scalar (@qunkrefs)) > 1) { - foreach my $tag (keys (%non_unanimous_tags)) { - my $everyone_has_this_tag = 1; - foreach my $qunkref (@qunkrefs) { - if ((! (defined ($$qunkref{'tags'}))) - or (! (grep ($_ eq $tag, @{$$qunkref{'tags'}})))) { - $everyone_has_this_tag = 0; - } - } - if ($everyone_has_this_tag) { - $unanimous_tags{$tag} = 1; - delete $non_unanimous_tags{$tag}; - } - } - } - - if ($XML_Output) - { - # If outputting XML, then our task is pretty simple, because we - # don't have to detect common dir, common tags, branch prefixing, - # etc. We just output exactly what we have, and don't worry about - # redundancy or readability. - - foreach my $qunkref (@qunkrefs) - { - my $filename = $$qunkref{'filename'}; - my $revision = $$qunkref{'revision'}; - my $tags = $$qunkref{'tags'}; - my $branch = $$qunkref{'branch'}; - my $branchroots = $$qunkref{'branchroots'}; - - $filename = &xml_escape ($filename); # probably paranoia - $revision = &xml_escape ($revision); # definitely paranoia - - $beauty .= "\n"; - $beauty .= "${filename}\n"; - $beauty .= "${revision}\n"; - if ($branch) { - $branch = &xml_escape ($branch); # more paranoia - $beauty .= "${branch}\n"; - } - foreach my $tag (@$tags) { - $tag = &xml_escape ($tag); # by now you're used to the paranoia - $beauty .= "${tag}\n"; - } - foreach my $root (@$branchroots) { - $root = &xml_escape ($root); # which is good, because it will continue - $beauty .= "${root}\n"; - } - $beauty .= "\n"; - } - - # Theoretically, we could go home now. But as long as we're here, - # let's print out the common_dir and utags, as a convenience to - # the receiver (after all, earlier code calculated that stuff - # anyway, so we might as well take advantage of it). - - if ((scalar (keys (%unanimous_tags))) > 1) { - foreach my $utag ((keys (%unanimous_tags))) { - $utag = &xml_escape ($utag); # the usual paranoia - $beauty .= "${utag}\n"; - } - } - - if ($common_dir) { - $common_dir = &xml_escape ($common_dir); - $beauty .= "${common_dir}\n"; - } - - # That's enough for XML, time to go home: - return $beauty; - } - - # Else not XML output, so complexly compactify for chordate - # consumption. At this point we have enough global information - # about all the qunks to organize them non-redundantly for output. - - if ($common_dir) { - # Note that $common_dir still has its trailing slash -# $beauty .= "$common_dir: "; - $beauty .= "$common_dir:, "; - } - - if ($Show_Branches) - { - # For trailing revision numbers. - my @brevisions; - - foreach my $branch (keys (%all_branches)) - { - foreach my $qunkref (@qunkrefs) - { - if ((defined ($$qunkref{'branch'})) - and ($$qunkref{'branch'} eq $branch)) - { - if ($fbegun) { - # kff todo: comma-delimited in XML too? Sure. - $beauty .= ", "; - } - else { - $fbegun = 1; - } - my $fname = substr ($$qunkref{'filename'}, length ($common_dir)); - $beauty .= $fname; - $$qunkref{'printed'} = 1; # Just setting a mark bit, basically - - if ($Show_Tags && (defined @{$$qunkref{'tags'}})) { - my @tags = grep ($non_unanimous_tags{$_}, @{$$qunkref{'tags'}}); - if (@tags) { - $beauty .= " (tags: "; - $beauty .= join (', ', @tags); - $beauty .= ")"; - } - } - - if ($Show_Revisions) { - # Collect the revision numbers' last components, but don't - # print them -- they'll get printed with the branch name - # later. - $$qunkref{'revision'} =~ /.+\.([\d])+$/; - push (@brevisions, $1); - - # todo: we're still collecting branch roots, but we're not - # showing them anywhere. If we do show them, it would be - # nifty to just call them revision "0" on a the branch. - # Yeah, that's the ticket. - } - } - } - $beauty .= " ($branch"; - if (@brevisions) { - if ((scalar (@brevisions)) > 1) { - $beauty .= ".["; - $beauty .= (join (',', @brevisions)); - $beauty .= "]"; - } - else { - $beauty .= ".$brevisions[0]"; - } - } - $beauty .= ")"; - } - } - - # Okay; any qunks that were done according to branch are taken care - # of, and marked as printed. Now print everyone else. - - foreach my $qunkref (@qunkrefs) - { - next if (defined ($$qunkref{'printed'})); # skip if already printed - - if ($fbegun) { - $beauty .= ", "; - } - else { - $fbegun = 1; - } - $beauty .= substr ($$qunkref{'filename'}, length ($common_dir)); - # todo: Shlomo's change was this: - # $beauty .= substr ($$qunkref{'filename'}, - # (($common_dir eq "./") ? "" : length ($common_dir))); - $$qunkref{'printed'} = 1; # Set a mark bit. - - if ($Show_Revisions || $Show_Tags) - { - my $started_addendum = 0; - - if ($Show_Revisions) { - $started_addendum = 1; - $beauty .= " ("; - $beauty .= "$$qunkref{'revision'}"; - } - if ($Show_Tags && (defined $$qunkref{'tags'})) { - my @tags = grep ($non_unanimous_tags{$_}, @{$$qunkref{'tags'}}); - if ((scalar (@tags)) > 0) { - if ($started_addendum) { - $beauty .= ", "; - } - else { - $beauty .= " (tags: "; - } - $beauty .= join (', ', @tags); - $started_addendum = 1; - } - } - if ($started_addendum) { - $beauty .= ")"; - } - } - } - - # Unanimous tags always come last. - if ($Show_Tags && %unanimous_tags) - { - $beauty .= " (utags: "; - $beauty .= join (', ', keys (%unanimous_tags)); - $beauty .= ")"; - } - - # todo: still have to take care of branch_roots? - - $beauty = "* $beauty:"; - - return $beauty; -} - - -sub common_path_prefix () -{ - my $path1 = shift; - my $path2 = shift; - - my ($dir1, $dir2); - (undef, $dir1, undef) = fileparse ($path1); - (undef, $dir2, undef) = fileparse ($path2); - - # Transmogrify Windows filenames to look like Unix. - # (It is far more likely that someone is running cvs2cl.pl under - # Windows than that they would genuinely have backslashes in their - # filenames.) - $dir1 =~ tr#\\#/#; - $dir2 =~ tr#\\#/#; - - my $accum1 = ""; - my $accum2 = ""; - my $last_common_prefix = ""; - - while ($accum1 eq $accum2) - { - $last_common_prefix = $accum1; - last if ($accum1 eq $dir1); - my ($tmp1) = split (/\//, (substr ($dir1, length ($accum1)))); - my ($tmp2) = split (/\//, (substr ($dir2, length ($accum2)))); - $accum1 .= "$tmp1/" if ((defined ($tmp1)) and $tmp1); - $accum2 .= "$tmp2/" if ((defined ($tmp2)) and $tmp2); - } - - return $last_common_prefix; -} - - -sub preprocess_msg_text () -{ - my $text = shift; - - # Strip out carriage returns (as they probably result from DOSsy editors). - $text =~ s/\r\n/\n/g; - - # If it *looks* like two newlines, make it *be* two newlines: - $text =~ s/\n\s*\n/\n\n/g; - - if ($XML_Output) - { - $text = &xml_escape ($text); - $text = "${text}\n"; - } - elsif (! $No_Wrap) - { - # Strip off lone newlines, but only for lines that don't begin with - # whitespace or a mail-quoting character, since we want to preserve - # that kind of formatting. Also don't strip newlines that follow a - # period; we handle those specially next. And don't strip - # newlines that precede an open paren. - 1 while ($text =~ s/(^|\n)([^>\s].*[^.\n])\n([^>\n])/$1$2 $3/g); - - # If a newline follows a period, make sure that when we bring up the - # bottom sentence, it begins with two spaces. - 1 while ($text =~ s/(^|\n)([^>\s].*)\n([^>\n])/$1$2 $3/g); - } - - return $text; -} - - -sub last_line_len () -{ - my $files_list = shift; - my @lines = split (/\n/, $files_list); - my $last_line = pop (@lines); - return length ($last_line); -} - -sub FindPrevDayStr() { - my($prevdays,$dayofmonth,$month,$year) = @_; - use integer; - - $dayofmonth--; # make this zero-based - - #doesnt account for leap years well, but good enuff - - my $totalyeardays=365; - if($year % 4 == 0) { - $totalyeardays++; - $monthlengtharr[1]=29; - } - - my $prevyeardays = $prevdays % $totalyeardays; - my $yearsback = $prevdays / 365; - - my $m=0; - my $yearday = 0; - while($m<$month) { - $yearday+=$monthlengtharr[$m]; - $m++; - } - - $yearday+=$dayofmonth; - $yearday-=$prevyeardays; - - if($yearday<0) { - $yearsback++; - $yearday+=$totalyeardays; - } - - $year -= $yearsback; # also doesnt go lower than year 0 - - $m=0; - while($yearday>=$monthlengtharr[$m]) { - $yearday-=$monthlengtharr[$m]; - $m++; - } - - # mon/day are 0-based, conv to 1-based - my $retstr=($year+1900)."-".($m+1)."-".($yearday+1); - return $retstr; -} - -# A custom wrap function, sensitive to some common constructs used in -# log entries. -sub wrap_log_entry () -{ - my $text = shift; # The text to wrap. - my $left_pad_str = shift; # String to pad with on the left. - - # These do NOT take left_pad_str into account: - my $length_remaining = shift; # Amount left on current line. - my $max_line_length = shift; # Amount left for a blank line. - - my $wrapped_text = ""; # The accumulating wrapped entry. - my $indentation = ""; # Inherited indentation from prev line. - - my $first_time = 1; # Is this the first iteration of the loop? - - my @lines = split (/\n/, $text); - while (@lines) # Don't use `foreach' here, it won't work. - { - my $this_line = shift (@lines); - chomp $this_line; - - # First, if it matches any of the line-start regexps, then print a - # newline now... - if (($this_line =~ /^(\s*)\*\s+[a-zA-Z0-9]/) - || ($this_line =~ /^(\s*)\* [a-zA-Z0-9_\.\/\+-]+/) - || ($this_line =~ /^(\s*)\([a-zA-Z0-9_\.\/\+-]+(\)|,\s*)/) - || ($this_line =~ /^(\s*)- +/) - || ($this_line =~ /^(\s*)[^\s]+:\s*$/) - || ($this_line =~ /^(\s*)\*\) +/) - || ($this_line =~ /^(\s*)[a-zA-Z0-9](\)|\.|\:) +/)) - { - # Make a line break immediately, unless header separator is set - # and this line is the first line in the entry, in which case - # we're getting the blank line for free already and shouldn't - # add an extra one. - unless (($After_Header ne " ") and ($first_time)) { - $wrapped_text .= "\n${left_pad_str}"; - } - - $indentation = $1; - $length_remaining = $max_line_length - (length ($indentation)); - } - - # Now that any indentation has been preserved, strip off leading - # whitespace, so up-folding has no ugly side-effects. - $this_line =~ s/^\s*//; - - # Accumulate the line, and adjust parameters for next line. - my $this_len = length ($this_line); - if ($this_len == 0) - { - # Blank lines should be preserved, and should cancel any - # indentation level. - $this_line = "\n${left_pad_str}"; - $indentation = ""; - $length_remaining = $max_line_length; - } - elsif ($this_len >= $length_remaining) - { - # Walk backwards from the end. At first acceptable spot, break - # a new line. - my $idx = $length_remaining - 1; - if ($idx < 0) { $idx = 0 }; - while ($idx > 0) - { - if (substr ($this_line, $idx, 1) =~ /\s/) - { - my $line_now = substr ($this_line, 0, $idx); - my $next_line = substr ($this_line, $idx); - $this_line = $line_now; - - # Clean whitespace off the end. - chomp $this_line; - - # The current line is ready to be printed. - $this_line .= "\n${left_pad_str}"; - - # Make sure the next line is allowed full room. - $length_remaining = $max_line_length - (length ($indentation)); - - # Strip next_line, but then preserve any indentation. - $next_line =~ s/^\s*//; - $next_line = $indentation . $next_line; - - unshift (@lines, $next_line); - last; - } - else - { - $idx--; - } - } - - # If we just bottomed out, the line is too long, so just break - # it where the original text does. - if ($idx == 0) - { - if ($length_remaining == ($max_line_length - (length ($indentation)))) - { - # The line is simply too long -- there is no hope of ever - # breaking it nicely, so just insert it verbatim, with - # appropriate padding. - $this_line = "\n${left_pad_str}${this_line}"; - } - else - { - # Can't break it here, but may be able to on the next round. - unshift (@lines, $this_line); - $length_remaining = $max_line_length - (length ($indentation)); - $this_line = "\n${left_pad_str}"; - } - } - } - else # $this_len < $length_remaining, so tack on what we can. - { - # Leave a note for the next iteration. - $length_remaining = $length_remaining - $this_len; - - if ($this_line =~ /\.$/) - { - $this_line .= " "; - $length_remaining -= 2; - } - else # not a sentence end - { - $this_line .= " "; - $length_remaining -= 1; - } - } - - # Unconditionally indicate that loop has run at least once. - $first_time = 0; - - $wrapped_text .= "${this_line}"; - } - - # One last bit of padding. - $wrapped_text .= "\n"; - - return $wrapped_text; -} - - -sub xml_escape () -{ - my $txt = shift; - $txt =~ s/&/&/g; - $txt =~ s//>/g; - return $txt; -} - - -sub maybe_read_user_map_file () -{ - my %expansions; - - if ($User_Map_File) - { - open (MAPFILE, "<$User_Map_File") - or die ("Unable to open $User_Map_File ($!)"); - - while () - { - next if /^\s*#/; # Skip comment lines. - next if not /:/; # Skip lines without colons. - - # It is now safe to split on ':'. - my ($username, $expansion) = split ':'; - chomp $expansion; - $expansion =~ s/^'(.*)'$/$1/; - $expansion =~ s/^"(.*)"$/$1/; - - # If it looks like the expansion has a real name already, then - # we toss the username we got from CVS log. Otherwise, keep - # it to use in combination with the email address. - - if ($expansion =~ /^\s*<{0,1}\S+@.*/) { - # Also, add angle brackets if none present - if (! ($expansion =~ /<\S+@\S+>/)) { - $expansions{$username} = "$username <$expansion>"; - } - else { - $expansions{$username} = "$username $expansion"; - } - } - else { - $expansions{$username} = $expansion; - } - } - - close (MAPFILE); - } - - return %expansions; -} - - -sub parse_options () -{ - # Check this internally before setting the global variable. - my $output_file; - - # If this gets set, we encountered unknown options and will exit at - # the end of this subroutine. - my $exit_with_admonishment = 0; - - while (my $arg = shift (@ARGV)) - { - if ($arg =~ /^-h$|^-help$|^--help$|^--usage$|^-?$/) { - $Print_Usage = 1; - } - elsif ($arg =~ /^--debug$/) { # unadvertised option, heh - $Debug = 1; - } - elsif ($arg =~ /^--version$/) { - $Print_Version = 1; - } - elsif ($arg =~ /^-g$|^--global-opts$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - # Don't assume CVS is called "cvs" on the user's system: - $Log_Source_Command =~ s/(^\S*)/$1 $narg/; - } - elsif ($arg =~ /^-l$|^--log-opts$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $Log_Source_Command .= " $narg"; - } - elsif ($arg =~ /^-f$|^--file$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $output_file = $narg; - } - elsif ($arg =~ /^--fsf$/) { - $FSF_Style = 1; - } - elsif ($arg =~ /^-U$|^--usermap$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $User_Map_File = $narg; - } - elsif ($arg =~ /^-W$|^--window$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $Max_Checkin_Duration = $narg; - } - elsif ($arg =~ /^-I$|^--ignore$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - push (@Ignore_Files, $narg); - } - elsif ($arg =~ /^-C$|^--case-insensitive$/) { - $Case_Insensitive = 1; - } - elsif ($arg =~ /^-R$|^--regexp$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $Regexp_Gate = $narg; - } - elsif ($arg =~ /^--stdout$/) { - $Output_To_Stdout = not $Output_To_Stdout; - } - elsif ($arg =~ /^--version$/) { - $Print_Version = 1; - } - elsif ($arg =~ /^--distributed$/) { - $Distributed = 1; - } - elsif ($arg =~ /^-P$|^--prune$/) { - $Prune_Empty_Msgs = 1; - } - elsif ($arg =~ /^-S$|^--separate-header$/) { - $After_Header = "\n\n"; - } - elsif ($arg =~ /^--no-wrap$/) { - $No_Wrap = not $No_Wrap; - } - elsif ($arg =~ /^--gmt$|^--utc$/) { - $UTC_Times = 1; - } - elsif ($arg =~ /^-w$|^--day-of-week$/) { - $Show_Day_Of_Week = not $Show_Day_Of_Week; - } - elsif ($arg =~ /^-r$|^--revisions$/) { - $Show_Revisions = not $Show_Revisions; - } - elsif ($arg =~ /^-t$|^--tags$/) { - $Show_Tags = not $Show_Tags; - } - elsif ($arg =~ /^-b$|^--branches$/) { - $Show_Branches = not $Show_Branches; - } - elsif ($arg =~ /^-c$|^--count$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $Max_Fileline_Count = $narg; - } - elsif ($arg =~ /^-d$|^--days$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $Prev_Day_Count = $narg; - } - elsif ($arg =~ /^-F$|^--follow$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - push (@Follow_Branches, $narg); - } - elsif ($arg =~ /^--stdin$/) { - $Input_From_Stdin = 1; - } - elsif ($arg =~ /^--header$/) { - my $narg = shift (@ARGV) || die "$arg needs argument.\n"; - $ChangeLog_Header = &slurp_file ($narg); - if (! defined ($ChangeLog_Header)) { - $ChangeLog_Header = ""; - } - } - elsif ($arg =~ /^--xml$/) { - $XML_Output = 1; - } - elsif ($arg =~ /^--hide-filenames$/) { - $Hide_Filenames = 1; - $After_Header = ""; - } - else { - # Just add a filename as argument to the log command - $Log_Source_Command .= " $arg"; - } - } - - ## Check for contradictions... - - if ($Output_To_Stdout && $Distributed) { - print STDERR "cannot pass both --stdout and --distributed\n"; - $exit_with_admonishment = 1; - } - - if ($Output_To_Stdout && $output_file) { - print STDERR "cannot pass both --stdout and --file\n"; - $exit_with_admonishment = 1; - } - - # Or if any other error message has already been printed out, we - # just leave now: - if ($exit_with_admonishment) { - &usage (); - exit (1); - } - elsif ($Print_Usage) { - &usage (); - exit (0); - } - elsif ($Print_Version) { - &version (); - exit (0); - } - - ## Else no problems, so proceed. - - if ($Output_To_Stdout) { - undef $Log_File_Name; # not actually necessary - } - elsif ($output_file) { - $Log_File_Name = $output_file; - } -} - - -sub slurp_file () -{ - my $filename = shift || die ("no filename passed to slurp_file()"); - my $retstr; - - open (SLURPEE, "<${filename}") or die ("unable to open $filename ($!)"); - my $saved_sep = $/; - undef $/; - $retstr = ; - $/ = $saved_sep; - close (SLURPEE); - return $retstr; -} - - -sub debug () -{ - if ($Debug) { - my $msg = shift; - print STDERR $msg; - } -} - - -sub version () -{ - print "cvs2cl.pl version ${VERSION}; distributed under the GNU GPL.\n"; -} - - -sub usage () -{ - &version (); - print <<'END_OF_INFO'; -Generate GNU-style ChangeLogs in CVS working copies. - -Notes about the output format(s): - - The default output of cvs2cl.pl is designed to be compact, formally - unambiguous, but still easy for humans to read. It is largely - self-explanatory, I hope; the one abbreviation that might not be - obvious is "utags". That stands for "universal tags" -- a - universal tag is one held by all the files in a given change entry. - - If you need output that's easy for a program to parse, use the - --xml option. Note that with XML output, just about all available - information is included with each change entry, whether you asked - for it or not, on the theory that your parser can ignore anything - it's not looking for. - -Notes about the options and arguments (the actual options are listed -last in this usage message): - - * The -I and -F options may appear multiple times. - - * To follow trunk revisions, use "-F trunk" ("-F TRUNK" also works). - This is okay because no would ever, ever be crazy enough to name a - branch "trunk", right? Right. - - * For the -U option, the UFILE should be formatted like - CVSROOT/users. That is, each line of UFILE looks like this - jrandom:jrandom@red-bean.com - or maybe even like this - jrandom:'Jesse Q. Random ' - Don't forget to quote the portion after the colon if necessary. - - * Many people want to filter by date. To do so, invoke cvs2cl.pl - like this: - cvs2cl.pl -l "-d'DATESPEC'" - where DATESPEC is any date specification valid for "cvs log -d". - (Note that CVS 1.10.7 and below requires there be no space between - -d and its argument). - -Options/Arguments: - -h, -help, --help, or -? Show this usage and exit - --version Show version and exit - -r, --revisions Show revision numbers in output - -b, --branches Show branch names in revisions when possible - -t, --tags Show tags (symbolic names) in output - --stdin Read from stdin, don't run cvs log - --stdout Output to stdout not to ChangeLog - -d, --distributed Put ChangeLogs in subdirs - -f FILE, --file FILE Write to FILE instead of "ChangeLog" - --fsf Use this if log data is in FSF ChangeLog style - -W SECS, --window SECS Window of time within which log entries unify - -U UFILE, --usermap UFILE Expand usernames to email addresses from UFILE - -R REGEXP, --regexp REGEXP Include only entries that match REGEXP - -I REGEXP, --ignore REGEXP Ignore files whose names match REGEXP - -C, --case-insensitive Any regexp matching is done case-insensitively - -F BRANCH, --follow BRANCH Show only revisions on or ancestral to BRANCH - -S, --separate-header Blank line between each header and log message - --no-wrap Don't auto-wrap log message (recommend -S also) - --gmt, --utc Show times in GMT/UTC instead of local time - -w, --day-of-week Show day of week - --header FILE Get ChangeLog header from FILE ("-" means stdin) - --xml Output XML instead of ChangeLog format - --hide-filenames Don't show filenames (ignored for XML output) - -P, --prune Don't show empty log messages - -g OPTS, --global-opts OPTS Invoke like this "cvs OPTS log ..." - -l OPTS, --log-opts OPTS Invoke like this "cvs ... log OPTS" - -c [#lines], --count [#lns] Print only #lines worth of file per dir (deflt 15) - -d [#days], --days [#days] Print only changes within the last [#days] days - FILE1 [FILE2 ...] Show only log information for the named FILE(s) - if no file or dir is specified, default to current dir logs only (no recursion) - -See http://www.red-bean.com/~kfogel/cvs2cl.shtml for maintenance and bug info. -END_OF_INFO -} - -__END__ - -=head1 NAME - -cvs2cl.pl - produces GNU-style ChangeLogs in CVS working copies, by - running "cvs log" and parsing the output. Shared log entries are - unified in an intuitive way. - -=head1 DESCRIPTION - -This script generates GNU-style ChangeLog files from CVS log -information. Basic usage: just run it inside a working copy and a -ChangeLog will appear. It requires repository access (i.e., 'cvs log' -must work). Run "cvs2cl.pl --help" to see more advanced options. - -See http://www.red-bean.com/~kfogel/cvs2cl.shtml for updates, and -for instructions on getting anonymous CVS access to this script. - -Maintainer: Karl Fogel -Please report bugs to . - -=head1 README - -This script generates GNU-style ChangeLog files from CVS log -information. Basic usage: just run it inside a working copy and a -ChangeLog will appear. It requires repository access (i.e., 'cvs log' -must work). Run "cvs2cl.pl --help" to see more advanced options. - -See http://www.red-bean.com/~kfogel/cvs2cl.shtml for updates, and -for instructions on getting anonymous CVS access to this script. - -Maintainer: Karl Fogel -Please report bugs to . - -=head1 PREREQUISITES - -This script requires C, C, and -C. -It also seems to require C or higher. - -=pod OSNAMES - -any - -=pod SCRIPT CATEGORIES - -Version_Control/CVS - -=cut - - --*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- -*- - -Note about a bug-slash-opportunity: ------------------------------------ - -There's a bug in Text::Wrap, which affects cvs2cl. This script -reveals it: - - #!perl -w - - use Text::Wrap; - - my $test_text = - "This script demonstrates a bug in Text::Wrap. The very long line - following this paragraph will be relocated relative to the surrounding - text: - - ==================================================================== - - See? When the bug happens, we'll get the line of equal signs below - this paragraph, even though it should be above."; - - - # Print out the test text with no wrapping: - print "$test_text"; - print "\n"; - print "\n"; - - # Now print it out wrapped, and see the bug: - print wrap ("\t", " ", "$test_text"); - print "\n"; - print "\n"; - -If the line of equal signs were one shorter, then the bug doesn't -happen. Interesting. - -Anyway, rather than fix this in Text::Wrap, we might as well write a -new wrap() which has the following much-needed features: - -* initial indentation, like current Text::Wrap() -* subsequent line indentation, like current Text::Wrap() -* user chooses among: force-break long words, leave them alone, or die()? -* preserve existing indentation: chopped chunks from an indented line - are indented by same (like this line, not counting the asterisk!) -* optional list of things to preserve on line starts, default ">" - -Note that the last two are essentially the same concept, so unify in -implementation and give a good interface to controlling them. - -And how about: - -Optionally, when encounter a line pre-indented by same as previous -line, then strip the newline and refill, but indent by the same. -Yeah... diff --git a/pandatool/src/scripts/lastchng.pl b/pandatool/src/scripts/lastchng.pl deleted file mode 100755 index 09662e802a..0000000000 --- a/pandatool/src/scripts/lastchng.pl +++ /dev/null @@ -1,42 +0,0 @@ -#!perl - -# find last checked-in modification to [filename] - -if($#ARGV==-1) { - die "Usage: lastchng.pl [filename]\nfinds last checked-in modification to file\n"; -} - -if(!(-e $ARGV[0])) { - die "file '".$ARGV[0]."' doesnt exist!\n"; -} - -open(INPUT_STREAM,"cvs log $ARGV[0] |"); - -$firstrev=null; -$secondrev=null; - -while($line=) { - if($line =~ /^revision (\S*)$/) { -# print $line."\n"; - if($firstrev==null) { - $firstrev=$1; - } else { - $secondrev=$1; - last; - } - } -} -close(INPUT_STREAM); - -if($firstrev==null) { - die "Couldn't find first revision of $ARGV[0]!\n"; -} -$revstr="-r$firstrev"; -if($secondrev!=null) { -$revstr = "-r$secondrev ".$revstr; -} - -$cvsline="cvs diff $revstr ".$ARGV[0]; -print $cvsline,"\n"; -system($cvsline); -exit(0); diff --git a/pandatool/src/scripts/wlastchng.pl b/pandatool/src/scripts/wlastchng.pl deleted file mode 100755 index 4f6127477e..0000000000 --- a/pandatool/src/scripts/wlastchng.pl +++ /dev/null @@ -1,45 +0,0 @@ -#!perl - -# find last checked-in modification to [filename] - -if($#ARGV==-1) { - die "Usage: lastchng.pl [filename]\nfinds last checked-in modification to file\n"; -} - -if(!(-e $ARGV[0])) { - die "file '".$ARGV[0]."' doesnt exist!\n"; -} - -open(INPUT_STREAM,"cvs log $ARGV[0] |"); - -$firstrev=null; -$secondrev=null; - -while($line=) { - if($line =~ /^revision (\S*)$/) { -# print $line."\n"; - if($firstrev==null) { - $firstrev=$1; - } else { - $secondrev=$1; - last; - } - } -} -close(INPUT_STREAM); - -if($firstrev==null) { - die "Couldn't find first revision of $ARGV[0]!\n"; -} -$revstr="-r$firstrev"; -if($secondrev!=null) { -$revstr = "-r$secondrev ".$revstr; -} - -$cvsline="cvs update -p -r".$secondrev." ".$ARGV[0]." > junk"; -$windiffline="windiff junk ".$ARGV[0]; -print $cvsline,"\n"; -system($cvsline); -print $windiffline,"\n"; -system($windiffline); -exit(0);